我想填充 TableView
在 JavaFX 中。我的类(class)是Manual
它有另一个对象,如属性( User
)。如何使用 User
中的用户名填充表列目的。
columnVanzator.setCellFactory(new Callback<TableColumn<Manual, User>,
TableCell<Manual, User>>() {
@Override
public TableCell<Manual, User> call(TableColumn<Manual, User> arg0) {
final TableCell<Manual, User> cell = new TableCell<Manual, User>() {
@Override
public void updateItem(final User item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
this.setText("");
}
else {
this.setText(item.getUsername());
}
}
};
return cell;
}
});
我收到NullPointerException
上this.setText(item.getUsername());
最佳答案
您要寻找的不是 cellFactory,而是 cellValueFactory。 如果列中显示的类型比字符串或数字更复杂(例如日期、状态或更复杂的类型),则使用自定义 cellFactory。
JavaFX 的 cellValueFactory 与属性配合使用效果最佳:
column.setCellValueFactory((p) -> p.getValue().yourContentProperty());
但看起来您的对象中没有相应的 JavaFX 属性,因此我们必须构建一些解决方法:
column.setCellValueFactory((p) -> new SimpleStringProperty(p.getValue().getUsername());
我建议以 JavaFX 风格构建模型并在其中包含属性。如果属性内部的值发生变化,TableView 将自动更新单元格。 JavaFX 中的几乎每个控件都是如此。但如果您不能或根本不想,请随意使用上面的方式,但请记住,值更改不会自动通知 View !
关于java - 在javafx中填充tableview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44443305/