在 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 中的几乎所有控件都是如此。但如果你不能或根本不想,请随意使用上面的方式,但请记住,值更改不会自动通知视图!