有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在javafx TableView中显示外键

名字是法语的

老师

主题

nom=姓氏

prenom=名字

我将JavaFX2与FXML结合使用,将hibernate与MVC模式结合使用, 我想在TableView中显示“EnSignant”列表

tableView结构:

<TableView fx:id="tableau" >
    <columns>
        <TableColumn fx:id="ID" prefWidth="43.0" text="ID" />
        <TableColumn fx:id="NOM" prefWidth="95.0" text="NOM" />
        <TableColumn fx:id="PRENOM" prefWidth="94.0" text="PRENOM" />
        <TableColumn fx:id="MATIERE" prefWidth="97.0" text="Matière" />
    </columns>     
  </TableView>

在数据库中,我有两个表:

Enseignant(ID, #idMatiere, nom, prenom)
Matiere(IDMatiere, intitule)

hibernate将使用每个表作为类

Ensignant:

public class Enseignant  implements java.io.Serializable {

   private Integer idEnseignant;
   private Matiere matiere;
   private String nom;
   private String prenom;

马蒂埃:

public class Matiere  implements java.io.Serializable {


   private int idMatiere;
   private String intitule;

“EnSignant”的控制器有一个方法“show()”,它显示教师列表

ID.setCellValueFactory(new PropertyValueFactory<Enseignant, Integer>("idEnseignant"));
NOM.setCellValueFactory(new PropertyValueFactory<Enseignant, String>("nom"));
PRENOM.setCellValueFactory(new PropertyValueFactory<Enseignant, String>("prenom"));
MATIERE.setCellValueFactory(new PropertyValueFactory<Enseignant, String>("matiere"));
tableau.setItems(em.getEnseignant());

最后,它向我显示了正常列表,但“matiere”列指的是对象,例如:hibernate。Matiere@59456543


共 (1) 个答案

  1. # 1 楼答案

    在这种情况下,你必须改变

    MATIERE.setCellValueFactory(new PropertyValueFactory<Enseignant, String>("matiere")); 
    

    MATIERE.setCellValueFactory(new Callback<CellDataFeatures<Enseignant,String>,ObservableValue<String>>(){
    
                    @Override
                    public ObservableValue<String> call(CellDataFeatures<Enseignant, String> param) {
                        return new SimpleStringProperty(param.getValue().getMatiere().getIntitule());
                    }
                });