gpt4 book ai didi

JavaFX TableView 未更新

转载 作者:行者123 更新时间:2023-12-02 02:25:05 26 4
gpt4 key购买 nike

调用table.getItems().setAll(lst);时JavaFX TableView不更新哪里List<Student> lst;即使在另一个项目上这个逻辑似乎是有效的。

所以,我有一个带有 getter 的 Student 对象。

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>

最后,我有了 Controller 的方法来填充表格。

public void testAction() {
List<Student> lst = s.findAllListStudent();

table.getItems().setAll(lst);

for (Student x : lst) {
System.out.println(x);
}
}

Controller 和方法已正确链接,因为我可以看到 println 的输出我可以看到表中发生了变化,但没有显示任何数据。示例(触发方法之前和之后):

Before pressing the button to trigger the method After

感谢任何帮助。

最佳答案

一个TableView

  1. 一个collection of TableColumn s ,并且
  2. 一个collection of item s ,每个项目代表表格中一行中显示的值。

为了让列显示该列中每个单元格中的值,该列需要一个函数将行的值映射到相应单元格中要显示的值。具体来说,如果您有 TableView<S> ,则每行的值由 S 类型的对象表示。每列都是一个 TableColumn<S,T> ,将行映射到要在该列的相应单元格中显示的值的函数是 Callback<CellDataFeatures<S,T>, ObservableValue<T>> 。 ( CellDataFeatures 只是行值的包装器。)此函数称为 cellValueFactory对于列(它是一个创建要在单元格中显示的值的函数)。

因此,您需要为每个列提供单元格值工厂。在你的 Controller 的 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()));
// ...
}

对于其余列也类似。

关于JavaFX TableView 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47912397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com