0

我有这个配置的 TableView:

@FXML
private TableView<Budget> budgetTable;
@FXML
private TableColumn<Budget, String> idColumn, budgetNameColumn, buildingColumn, addressColumn, taxableColumn,
        budgetTotalColumn, budgetStateColumn, clientColumn;
@FXML
private TableColumn<Budget, LocalDate> budgetDateColumn;

@FXML
private void initialize() {
    ...
    clientColumn.setCellValueFactory(new Callback<CellDataFeatures<Budget, String>, ObservableValue<String>>() {
        @Override
        public ObservableValue<String> call(CellDataFeatures<Budget, String> data) {
            if (data.getValue().getClient() != null) {
                return data.getValue().getClient().nameProperty().concat(" ")
                        .concat(data.getValue().getClient().surnameProperty());
            }
            return null;
        }
    });
    ...
}
  1. 当应用程序启动时,表格工作正常。
  2. 当我尝试添加新预算时遇到问题。我将它很好地存储在数据库中,但是返回主视图时出现 NullPointerException。
  3. 如果我像代码所示那样控制这个异常,我必须记录相同的新创建预算。
  4. 当我创建一个新预算时,我删除了可观察列表的所有元素,并以与第一个相同的方式再次填充它(效果很好)。
  5. 在下图中,最后两条记录是不良记录。它只会显示第一个和第二个。

在此处输入图像描述

谁能帮帮我??

非常感谢。

4

2 回答 2

0

对于这种null情况,返回一个空的StringProperty

clientColumn.setCellValueFactory(new Callback<CellDataFeatures<Budget, String>, ObservableValue<String>>() {
    @Override
    public ObservableValue<String> call(CellDataFeatures<Budget, String> data) {
        if (data.getValue().getClient() != null) {
            return data.getValue().getClient().nameProperty().concat(" ")
                    .concat(data.getValue().getClient().surnameProperty());
        }
        return new ReadOnlyStringWrapper("");
    }
});
于 2015-08-29T22:12:44.490 回答
0

我找到了工作的“解决方案”。我真的不知道为什么它会这样工作,但此时它的工作方式如下:

clientColumn.setCellValueFactory(new Callback<CellDataFeatures<Budget, String>, ObservableValue<String>>() {
    @Override
    public ObservableValue<String> call(CellDataFeatures<Budget, String> data) {
        if (data.getValue().getClient() != null) {
            return data.getValue().getClient().nameProperty().concat(" ")
                .concat(data.getValue().getClient().surnameProperty());
        } else {
            budgetList.remove(data.getValue());
        }
        return new ReadOnlyStringWrapper("");
    }
});

我只是从 observableList 中删除 null 元素:)

于 2015-08-30T11:33:28.317 回答