在自定义 TreeItem 属性 更改时更新 TreeView
Update TreeView on custom TreeItem property change
我扩展了 TreeCell 和 TreeItem class。 MyTreeItem 包含一个自定义 属性,我在 MyTreeCell 中使用它来呈现 graphics/font 等。问题是当我设置 MyTreeCell.customProperty 时,我不确定如何进行 TreeView/Cell 重绘。
例如:
public class MyTreeItem extends TreeItem {
Object customProperty
public void setCustomProperty(Object customProperty) {
this.customProperty = customProperty
// how to fire a change event on the TreeView?
}
}
对解决方案或(缺乏)设计方法的任何评论表示赞赏。
至少有两种方法(不包括评论中建议的清零值的技巧)
一种是在设置自定义 属性 时手动触发 TreeModificationEvent,它位于您的 setCustomProperty:
public class MyTreeItem extends TreeItem {
Object customProperty
public void setCustomProperty(Object customProperty) {
this.customProperty = customProperty
TreeModificationEvent<T> ev = new TreeModificationEvent<>(valueChangedEvent(), this);
Event.fireEvent(this, ev);
}
}
另一种方法是将自定义 属性 设为 "real" 属性 并让感兴趣的各方(f.i。您的自定义 TreeCell)收听 [=21] 的更改=].有关如何实现(和重新连接)侦听器的示例,请查看 DefaultTreeCell 如何处理 TreeItem 的 graphicProperty。
选择哪个取决于您的上下文:第一个确保通知所有 TreeModificationEvents 的侦听器,第二个允许实现一个通用的 TreeCell,采用 属性(工厂)treeItem 进行可视化。
我扩展了 TreeCell 和 TreeItem class。 MyTreeItem 包含一个自定义 属性,我在 MyTreeCell 中使用它来呈现 graphics/font 等。问题是当我设置 MyTreeCell.customProperty 时,我不确定如何进行 TreeView/Cell 重绘。
例如:
public class MyTreeItem extends TreeItem {
Object customProperty
public void setCustomProperty(Object customProperty) {
this.customProperty = customProperty
// how to fire a change event on the TreeView?
}
}
对解决方案或(缺乏)设计方法的任何评论表示赞赏。
至少有两种方法(不包括评论中建议的清零值的技巧)
一种是在设置自定义 属性 时手动触发 TreeModificationEvent,它位于您的 setCustomProperty:
public class MyTreeItem extends TreeItem {
Object customProperty
public void setCustomProperty(Object customProperty) {
this.customProperty = customProperty
TreeModificationEvent<T> ev = new TreeModificationEvent<>(valueChangedEvent(), this);
Event.fireEvent(this, ev);
}
}
另一种方法是将自定义 属性 设为 "real" 属性 并让感兴趣的各方(f.i。您的自定义 TreeCell)收听 [=21] 的更改=].有关如何实现(和重新连接)侦听器的示例,请查看 DefaultTreeCell 如何处理 TreeItem 的 graphicProperty。
选择哪个取决于您的上下文:第一个确保通知所有 TreeModificationEvents 的侦听器,第二个允许实现一个通用的 TreeCell,采用 属性(工厂)treeItem 进行可视化。