是否可以从 SwingX 的 TreeTableModel/AbstractTreeTableModel(特别是getValueAt(Object node, int index)
方法)中检测节点是展开还是折叠?我需要为父节点显示不同的值,具体取决于它是展开还是折叠。(我意识到这违反了模型和视图分离的原则,对不起!)
isExpanded()
我知道您可以使用标准和方法从 JXTreeTable 对象中检查这一点isCollapsed()
,但我需要从模型中了解这一点。
具体来说,我有多个版本的对象,我想使用 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()
?