当调用table.getItems().setAll(lst);
List<Student> lst;
时,JavaFX TableView不会更新,即使在另一个项目中这个逻辑似乎有用。
所以,我有一个带有吸气剂的学生。
public class Student implements HasID<Integer> {
private Integer id;
private String name;
private String group;
private String email;
private String guide;
public Student(int _id, String _name, String _group, String _email, String _guide) {
this.id = _id;
this.name = _name;
this.group = _group;
this.email = _email;
this.guide = _guide;
}
@Override
public Integer getId() {
return this.id;
}
public String getName() {
return this.name;
}
public String getGroup() {
return this.group;
}
public String getEmail() {
return this.email;
}
public String getGuide() {
return this.guide;
}
我有桌子的fxml。
<TableView fx:id="table" layoutX="37.0" layoutY="113.0" prefHeight="397.0" prefWidth="480.0">
<columns>
<TableColumn fx:id="id" prefWidth="61.0" text="ID" />
<TableColumn fx:id="name" prefWidth="119.0" text="Name" />
<TableColumn fx:id="group" prefWidth="78.0" text="Group" />
<TableColumn fx:id="email" prefWidth="102.0" text="Email" />
<TableColumn fx:id="guide" prefWidth="119.0" text="Guide" />
</columns>
</TableView>
最后,我有控制器的方法来填充表格。
public void testAction() {
List<Student> lst = s.findAllListStudent();
table.getItems().setAll(lst);
for (Student x : lst) {
System.out.println(x);
}
}
控制器和方法正确链接,因为我可以看到println
的输出,我可以看到表中的更改,但没有显示数据。
示例(触发方法之前和之后):
感谢任何帮助。
答案 0 :(得分:2)
TableView
有
TableColumn
s和item
s,每个项目代表表格中一行显示的值。为了使列显示该列中每个单元格中的值,该列需要一个函数,将该行的值映射到要在相应单元格中显示的值。具体来说,如果您有TableView<S>
,则每行的值由类型为S
的对象表示。每列都是TableColumn<S,T>
,将行映射到要在该列的相应单元格中显示的值的函数是Callback<CellDataFeatures<S,T>, ObservableValue<T>>
。 (CellDataFeatures
只是行值的包装。)此函数称为列的cellValueFactory
(它是一个创建要在单元格中显示的值的函数)。
因此,您需要为每个列提供单元格值工厂。在控制器的initialize()
方法中,执行以下操作:
@FXML
private TableColumn<Student, Number> id ;
@FXML
private TableColumn<Student, String> name ;
public void initialize() {
id.setCellValueFactory(cellData -> new SimpleIntegerProperty(cellData.getValue().getId()));
name.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().getName()));
// ...
}
,其余列也类似。