Javafx:从TableCell获取属性

Javafx:从TableCell获取属性,java,javafx,properties,javafx-8,tablecell,Java,Javafx,Properties,Javafx 8,Tablecell,我想从TableCell中的模型中获取一个属性,这样我就可以根据该属性对单元格进行操作,如下例所示: 我有一个这样的模型: public class Model { private CustomProperty<Integer> appleCount; private CustomProperty<Integer> peachCount; public Model(Integer appleCount, Integer peachCount)

我想从TableCell中的模型中获取一个属性,这样我就可以根据该属性对单元格进行操作,如下例所示:

我有一个这样的模型:

public class Model {

    private CustomProperty<Integer> appleCount;
    private CustomProperty<Integer> peachCount;

    public Model(Integer appleCount, Integer peachCount) {
        this.appleCount = new CustomIntegerProperty(appleCount);
        this.peachCount = new CustomIntegerProperty(peachCount);
    }

    public CustomProperty<Integer> appleCountProperty() {
        return appleCount;
    }

    public CustomProperty<Integer> peachCountProperty() {
        return peachCount;
    }
}
公共类模型{
私有客户财产应用账户;
私人财产;
公共模型(整数appleCount、整数peachCount){
this.appleCount=新的CustomIntegerProperty(appleCount);
this.peachCount=新的CustomIntegerProperty(peachCount);
}
公共CustomProperty appleCountProperty(){
返回appleCount;
}
公共客户财产peachCountProperty(){
返乡桃数;
}
}
这个模型只是对我现有模型的一个模仿,我有一些模型有两个或更多的
CustomProperty

然后,我有一些表具有这个
模型
或类似于
表视图
模型的类。我有一个自定义的
TableCell
,上面覆盖了
updateItem
,我想根据
CustomProperty
具有的属性设置单元格的文本,例如initialValue、oldValue等。例如,如果initialValue为0,则将文本设置为空,而不是默认具有单元格的0。我有一个部分解决方案:创建一个
接口HasCustomProperty
,然后模型将实现它,但是还有一些问题:

  • 我需要向界面添加两个CustomProperties或它们的列表
  • 我需要在牢房里问:你是苹果账户吗?还是你是桃子细胞
可以肯定的是,在一个单元格中只有一个属性,苹果或桃子,因此理论上,如果我知道这两个属性都是CustomIntegerProperty,那么我就不应该关心单元格中的属性,因为我知道它们都有
initialValue
oldValue
,因此我可以根据它设置单元格的文本

我只能获取项,它是一种整数类型,因此我没有它的属性,或者有没有任何方法可以获取属性本身

解决方案可以是在每个列的cellFactory中重写updateItem,例如,我知道这是appleColumn,所以从appleCountProperty获取信息,等等,但是如果我必须在5-6个位置执行,这会导致大量重复代码。所以我想我制作了一个定制的TableCell,在那里我管理文本,然后我只为
cellFactory()
的每个列设置该单元格


您知道如何在没有重复代码的情况下简化吗?

基于我们的讨论-我认为您面临的问题是确定用户集0和整数属性的初始化0之间的差异

与使用IntegerProperty(使用int且不能为null)不同,您应该在模型中使用以下内容:

private ObjectProperty<Integer> appleCountProperty = new SimpleObjectProperty<>();

这会给你你所需要的。

我不太确定你到底在问什么。。。。我提供了一个关于如何在更新项期间为单元格提供整个查询对象的答案。如果这不是您想要的,请让我知道,我希望能为您指出一个不同的方向。我知道这可能是一个解决方案,但问题是如果我使用此解决方案,我将有重复的代码,因为我有一些相似的模型类,它们是
CustomProperty
,那么我将不得不在很多地方这样做。我想要的是一个自定义表格单元格,它在一个地方处理所有的
CustomProperty
-s,然后对于我可以简单调用的每一列
.setCellFactory(factory->new CustomIntegerTableCell())
您只是想在单元格为0时将其保留为空吗?我不明白为什么你需要用这种方式查询单元格-我需要在单元格中问:你是appleCount吗?或者你是桃子单元格?是的,我想使用整数值,但当我最初构造行时,我想清空,而不是初始化为0-s。但稍后如果我将值设置为0,则应显示0。我更改为显示如何在自定义单元格中将0设置为“”,但您如何在模型中知道0是真实的0而不是默认值?您的问题没有详细说明您如何知道该字段是由用户设置的?好的,但如果我使用这种方式,如果我愿意,a将无法再将值更改为0。
@FXML
TableColumn<Model, Integer> appleCountColumn;
appleCountColumn.setCellValueFactory(data -> data.getValue().appleCountProperty ());