我想从我的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
或类似TableView
的模型。我有一个带有覆盖TableCell
的自定义updateItem
,我希望根据CustomProperty
具有的属性设置单元格的文本,例如initialValue,oldValue等。示例如果initialValue为0,则将文本设置为空,而不是默认情况下具有单元格的 0 。我有一个部分解决方案:创建一个interface HasCustomProperty
然后模型将实现它,但是有一些问题:
可以肯定的是,在一个单元格中只有一个属性,苹果或桃子,所以理论上我不应该关注单元格,如果我知道它们都是CustomIntegerProperties,所以我知道它们有initialValue
或oldValue
所以我可以根据它设置单元格的文本。
我只能获得该项目,这是一种整数,所以我没有它的属性,或者有没有办法获得该属性?
sollution可以在每个列的cellFactory中覆盖updateItem,我知道这是appleColumn所以从appleCountProperty获取信息,依此类推,但是这会导致很多重复的代码如果我必须在5-6个地方做所以我想我创建了一个自定义的TableCell,然后我管理了文本,然后我就为cellFactory()
的每个列设置了单元格。
你有什么想法如果没有重复的代码我怎么能这么简单?
答案 0 :(得分:1)
根据我们的讨论 - 我认为您面临的问题是确定用户集0和IntegerProperty的初始化0之间的差异。
您应该在模型中使用以下内容,而不是使用使用int且不能为null的IntegerProperty:
private ObjectProperty<Integer> appleCountProperty = new SimpleObjectProperty<>();
然后在你的表中你绑定它:
@FXML
TableColumn<Model, Integer> appleCountColumn;
//在初始化
中appleCountColumn.setCellValueFactory(data -> data.getValue().appleCountProperty ());
这应该可以满足您的需求。