Comment ajouter une Image dans un JavaFx TableView colonne
J'essaie de trouver un moyen d'ajouter une image à un JavaFx TableView colonne de données dans les autres colonnes rempli à partir d'un H2 de la base de données via hibernate. La TableView a été conçu en JavaFx Scene Builder.
C'est ce que j'ai réussi à mettre ensemble pour l'instant:
De La Classe De Contrôleur:
public class HomeController implements Initializable {
@FXML
private TableView<NewBeautifulKiwi> KIWI_TABLE;
@FXML
private TableColumn<NewBeautifulKiwi, Image> KiwiId;
@FXML
private TableColumn<NewBeautifulKiwi, String> Kiwi;
public ObservableList<NewBeautifulKiwi> data;
//Initializes the controller class.
@Override
public void initialize(URL url, ResourceBundle rb) {
KiwiId.setCellFactory(new Callback<TableColumn<NewBeautifulKiwi, Image>, TableCell<NewBeautifulKiwi, Image>>() {
@Override
public TableCell<NewBeautifulKiwi, Image> call(TableColumn<NewBeautifulKiwi, Image> param) {
//Set up the ImageView
final ImageView imageview = new ImageView();
imageview.setFitHeight(50);
imageview.setFitWidth(50);
//Set up the Table
TableCell<NewBeautifulKiwi, Image> cell = new TableCell<NewBeautifulKiwi, Image>() {
public void updateItem(NewBeautifulKiwi item, boolean empty) {
if (item != null) {
imageview.setImage("arrow.png");
}
}
};
//Attach the imageview to the cell
cell.setGraphic(imageview);
return cell;
}
});
Kiwi.setCellValueFactory(new PropertyValueFactory<NewBeautifulKiwi, String>("Kiwi"));
KIWI_TABLE.setItems(gobbledyGook());
}
private ObservableList<NewBeautifulKiwi> gobbledyGook() {
data = FXCollections.observableArrayList();
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
List courses = session.createQuery("from KIWI_TABLE").list();
for (Iterator iterator = courses.iterator(); iterator.hasNext();) {
NewBeautifulKiwi course = (NewBeautifulKiwi) iterator.next();
System.out.println(course.getKiwi());
data.add(course);
}
transaction.commit();
} catch (HibernateException e) {
transaction.rollback();
e.printStackTrace();
} finally {
session.close();
}
return data;
}
}
J'obtiens une erreur à imageview.setImage("arrow.png");
qui dit Incopatibletypes: String cannot be converted to Image
.
C'est ma première fois d'essayer d'ajouter une image dans une TableView.
J'ai regardé autour depuis hier, mais maintenant, je semble être coincé. J'espérais de l'aide. Je voudrais vraiment l'apprécier un peu d'aide.
C'est la classe qui crée la base de données pojo:
@Entity(name = "KIWI_TABLE")
public class NewBeautifulKiwi implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int KiwiId;
private String Kiwi;
public int getKiwiId() {
return KiwiId;
}
public void setKiwiId(int KiwiId) {
this.KiwiId = KiwiId;
}
public String getKiwi() {
return Kiwi;
}
public void setKiwi(String Kiwi) {
this.Kiwi = Kiwi;
}
}
Je vous remercie tous à l'avance.
OriginalL'auteur ILikeProgramming | 2014-02-25
Vous devez vous connecter pour publier un commentaire.
Mise à jour
Puisque le lien ne fonctionne pas et j'ai eu plusieurs demandes de mise à jour, je mets à jour ce avec une nouvelle réponse.
De la question, je ne suis pas certain que l'OP veut que l'image soit chargée à partir d'un certain domaine
NewBeautifulKiwi
ou il ne veut afficher la même image pour toutes les données. Donc, je vais répondre pour les deux approches.Remarque: Approche 1 n'a pas beaucoup de sens pour moi et n'existe que parce que je suis confus au sujet de l'OP. La question est de ~4 ans et je ne pense pas que la clarification de l'OP aura aucune incidence. La démarche proposée pour gérer ce genre de problème est de 2.
arrow.png
pour toutes les lignesCode:
NewBeautifulKiwi
. Depuis que la colonneTableColumn<NewBeautifulKiwi, Image> KiwiId;
semble qu'il doit se lier à une propriété de l'image qui est absent deNewBeautifulKiwi
. Je vais vous les présenter et de les utiliser plus tard pour le lier à cette colonne (renommé 'kiwiImageCol') la valeur de la cellule de l'usine.Code:
Dans le tableau, je vais lier les TableColumn à cette nouvelle propriété
Réponse Dépassée
Vous avez oublié de lier la KiwiId avec un
CellValueFactory
. S'il vous plaît aller à travers l'exemple suivant qui utilise une VBox dans une colonne comme il a besoin d'une Image et d'une étiquette. Vous pouvez utiliser directement une ImageViewhttps://blogs.oracle.com/javajungle/entry/how_to_pretty_up_your
Tout est décrit très bien. Incase vous avez encore des doutes n'hésitez pas à commenter !
Passons sur le fait que je l'ai trouvé. Il doit être un ObjectProperty. mais j'apprécie vraiment le blog de nice, qui a aidé beaucoup.
si vous vous souvenez encore, vous pouvez poster ce que corriger cela s'il vous plaît?
Le lien est mort. Veuillez inclure le code si disponible.
Lien brisé. Veuillez le mettre à jour.
OriginalL'auteur ItachiUchiha
Votre erreur peut être retiré si vous utilisez l'instruction suivante
OriginalL'auteur Rahil Kazi