2017-07-27 71 views
0

获得属性我想从一个模型的属性在我的TableCell的,所以根据该属性可以让本身在下面的例子中,我可以maipulate细胞:JavaFX的:从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; 
    } 
} 

这种模式只是一个恶搞我,和我有有两个或两个以上CustomProperty<Integer>

然后我有了这个Model或类似的CLA几桌几模型ss作为TableView的模型。我有一个自定义TableCell与覆盖updateItem,那里我想设置单元格的文本取决于CustomProperty具有例如initialValue,oldValue等的属性。例如,如果initialValue为0,然后将文本设置为空而不是默认情况下有单元格。我有这方面的部分解决方案:创建一个interface HasCustomProperty那么模型就要实现它,但后来有几个问题:

  • 我需要添加两个CustomProperties来或他们的接口
  • 我的列表需要以某种方式询问单元格:你是appleCount?你是桃子细胞吗?

可以肯定的是在一个小区只有一个属性,苹果或桃子,所以理论上我不应该关心的电池,如果我知道他们两个都CustomIntegerProperties所以我知道他们有initialValueoldValue,所以我可以根据它设置单元格的文本。

我只能得到这个项目,这是一个Integer类型,所以我没有它的属性,或者有什么办法来获得属性本身?

溶剂可能是在每个列的cellFactory中覆盖updateItem,并且在那里我知道例如这是appleColumn,因此从appleCountProperty获取信息等等,但是如果我有这些,会导致大量重复的代码在5-6个地方完成。所以我认为我做了一个自定义TableCell,然后在那里管理文本,然后我为每个列设置cellFactory()的单元格。

你有什么想法我怎么能做到这一点简单没有重复的代码?

+0

我不太确定你问的问题....我提供了一个关于如何在更新项目中给单元格单元格提供查询的整个对象的答案。如果这不是你正在寻找的,请让我知道,我希望能指引你朝另一个方向发展。 –

回答

1

根据我们的讨论 - 我认为你面临的问题是确定用户集合0和IntegerProperty的初始化0之间的差异。

而不是使用IntegerProperty它使用int和不能为空 - 你应该使用在模型如下:

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

然后在你的表,你只是给它绑定:

@FXML 
TableColumn<Model, Integer> appleCountColumn; 

//初始化

appleCountColumn.setCellValueFactory(data -> data.getValue().appleCountProperty()); 

这应该会给你你需要的东西。

+0

我知道这可以是一个解决方案,但问题是,如果我使用这种解决方案,我将有重复的代码,因为我有几个模型类,是相似的,他们有一个'CustomProperty ',那么我将不得不做这在很多地方。我想要一个自定义表格单元格,它可以在一个地方处理所有'CustomProperty '-s,然后为每个列我可以简单地调用'.setCellFactory(factory - > new CustomIntegerTableCell())' – Sunflame

+0

你只是想让单元格保持空白当它是0?我不明白为什么你需要以这种方式查询单元格 - 我需要以某种方式问单元格:你是appleCount吗?或者你是桃子细胞吗? –

+0

所以是的,我想要使用整数值,但是当我最初构建行时,我想要使用0-s来初始化清空。但后来,如果我将值设置为0,则应该显示0。 – Sunflame