是否可以从SwingX的TreeTableModel / AbstractTreeTableModel(特别是getValueAt(Object node, int index)
方法)中检测节点是展开还是折叠?我需要为父节点显示不同的值,具体取决于它是展开还是折叠。 (我意识到这违反了分离模型和视图的原则,抱歉!)
我知道你可以使用标准isExpanded()
和isCollapsed()
方法从JXTreeTable对象中检查这个,但我需要在模型中知道这一点。
具体来说,我有多个版本的对象,我想使用JXTreeTable来支持扩展/折叠版本。如果对象已折叠,我希望父节点显示所有版本的值的摘要。如果它已展开,我希望父级只显示当前版本的值(最重要的一个),并且不再需要或不需要摘要。
一些伪代码可以让您了解我的意思:
getValueAt(Object node, int index) {
if (node.hasChildren()) {
if (node.isExpanded()) { // this is the part I'm not sure how to implement
return node.getCurrentValue(); // eg "Current version: C"
}
else {
return node.getSummaryValue(); // eg "Current version: C; previous versions: A, B"
}
}
else {
return node.getValue(); // eg "Version: B"
}
}
谢谢camickr,你当然是对的,我的问题无效! (我现在觉得有点蠢。)
您是否建议使用自定义TreeCellRenderer,以便根据节点的扩展状态选择要显示的值?也就是说,让模型提供一个实现如下内容的对象:
public interface ExpansionStateDependentValue {
public Object getDisplayValue(boolean expanded);
}
然后让TreeCellRenderer使用此方法(假设单元格值实现接口)根据expanded
方法中的getTreeCellRendererComponent()
标志显示适当的值?
答案 0 :(得分:0)
但我需要从模型中了解这一点。
许多View组件可以共享模型。也就是说它可以被两个不同的JTree对象使用。因此,有可能在树的一个视图中扩展节点代码,而在另一个视图中不扩展。
因此,您的问题的答案是模型不包含此信息,因为它是视图的一个功能。因此,您尝试在模型中执行此操作的方法是不正确的。