在 javafx 中填充表视图
Populate tableview in javafx
我想在 JavaFX 中填充 TableView
。我的 class 是 Manual
并且它有另一个对象,如属性 (User
)。如何使用 User
对象中的用户名填充 table 列。
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;
}
});
我在 this.setText(item.getUsername());
收到了 NullPointerException
您要查找的不是 cellFactory,而是 cellValueFactory。
如果您的列中显示的类型比字符串或数字更复杂(例如日期、州或更复杂的类型),则使用自定义 cellFactory。
JavaFX 的 cellValueFactory 最适合与 Properties 搭配使用:
column.setCellValueFactory((p) -> p.getValue().yourContentProperty());
但您的对象中似乎没有 JavaFX 属性,因此我们必须构建一个小的解决方法:
column.setCellValueFactory((p) -> new SimpleStringProperty(p.getValue().getUsername());
我建议以 JavaFX 样式构建模型并在其中包含属性。如果 属性 中的值发生变化,TableView 将自动更新 Cell。 JavaFX 中的几乎所有控件都是如此。但如果你不能或根本不想,请随意使用上面的方式,但请记住,值更改不会自动通知视图!
我想在 JavaFX 中填充 TableView
。我的 class 是 Manual
并且它有另一个对象,如属性 (User
)。如何使用 User
对象中的用户名填充 table 列。
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;
}
});
我在 this.setText(item.getUsername());
NullPointerException
您要查找的不是 cellFactory,而是 cellValueFactory。 如果您的列中显示的类型比字符串或数字更复杂(例如日期、州或更复杂的类型),则使用自定义 cellFactory。
JavaFX 的 cellValueFactory 最适合与 Properties 搭配使用:
column.setCellValueFactory((p) -> p.getValue().yourContentProperty());
但您的对象中似乎没有 JavaFX 属性,因此我们必须构建一个小的解决方法:
column.setCellValueFactory((p) -> new SimpleStringProperty(p.getValue().getUsername());
我建议以 JavaFX 样式构建模型并在其中包含属性。如果 属性 中的值发生变化,TableView 将自动更新 Cell。 JavaFX 中的几乎所有控件都是如此。但如果你不能或根本不想,请随意使用上面的方式,但请记住,值更改不会自动通知视图!