我扩展了 TreeCell 和 TreeItem 类。 MyTreeItem 包含一个自定义属性,我在 MyTreeCell 中使用它来渲染图形/字体等。问题是当我设置 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);
}
}
另一种方法是使自定义属性成为“真实”属性,并让感兴趣的各方(例如您的自定义 TreeCell)监听该属性的更改。有关如何实现(和重新连接)侦听器的示例,请查看 DefaultTreeCell 如何处理 TreeItem 的图形属性。
选择哪一个取决于您的上下文:第一个确保 TreeModificationEvents 的所有侦听器都得到通知,第二个允许实现采用 treeItem 的属性(工厂)进行可视化的通用 TreeCell。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)