我有一个以a表示的数据对象TreeModel,我只想在我的节目中显示它的一部分JTree- 为了争论,说叶子和他们的父母.如何隐藏/过滤不必要的节点?
我的最终实施:
TreeModel,底层的和过滤的.TreeModel,重建TreeModel从头开始过滤.克隆应该可见的每个节点,并将其添加到过滤的第一个可见祖先TreeModel(如果没有可见的话,则添加到根).如果你很好奇,请参阅下面的代码.这具有折叠用户打开的每条路径的不幸副作用.为了解决这个问题,我TreeModelListener在过滤后添加了一个TreeModel.当模型更改时,我将扩展路径保存在JTree(使用getExpandedDescendants())中,然后稍后重新展开(使用SwingUtilities.invokeLater()).
我必须equals()在TreeNode我使用的类中重写,以便新的克隆节点与旧的克隆节点相同.
...
populateFilteredNode(unfilteredRoot, filteredRoot);
...
void populateFilteredNode(TreeNode unfilteredNode, TreeNode filteredNode)
{
for (int i = 0; i < unfilteredNode.getChildCount(); i++)
{
TreeNode unfilteredChildNode = unfilteredNode.getChildAt(i);
if (unfilteredChildNode.getType() == Type.INVISIBLE_FOLDER)
{
populateFilteredNode(unfilteredChildNode, filteredNode);
}
else
{
TreeNode filteredChildNode = unfilteredChildNode.clone();
filteredNode.add(filteredChildNode);
populateFilteredNode(unfilteredChildNode, filteredChildNode);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14984 次 |
| 最近记录: |