首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在模型更新时更新JTree中的selectionPaths

在模型更新时更新JTree中的selectionPaths
EN

Stack Overflow用户
提问于 2012-06-06 04:07:40
回答 2查看 684关注 0票数 0

我有一个带有自定义对象和自定义模型的JTree。在某些情况下,我选择一个节点,当发生这种情况时,我用新检索到的数据更新树。当发生这种情况时,我会在树中查找选定的节点,并将其替换为新的(最新的)节点。当我找到它时,我从它的父节点中删除旧节点,将新节点添加到它的位置,并调用nodeChanged(newNode)。树更新正常,新的节点会出现在那里,其中包含更新的内容。

问题是当从这个树更新返回时,选择路径还没有更新,所以当我使用getSelectionPaths()方法时,返回的路径(如果只选择了一个节点)对应于我从树中删除的旧节点。

如何将选择路径更新为新的更新后的模型?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-06 04:11:00

您可以创建一个新的TreePath并使用新路径调用setSelectedPath。但是,更好的做法是将节点设置为可变并更新节点,而不是删除节点。这样,树模型不会改变,选择路径也不会改变。

您还需要触发相应的事件(节点已更改,而不是节点已移除/已添加等)。

票数 3
EN

Stack Overflow用户

发布于 2012-06-06 04:35:38

如果能够找到叶的新路径,就可以创建一个TreePath

我做了一个例子,在JTree中选择一个具有一级节点的叶子:

代码语言:javascript
复制
public JTree             fileTree;
public void setJTreePath(String leafName, String nodeName) {

    TreeNode root = (TreeNode) fileTree.getModel().getRoot();
    TreePath path = new TreePath(root);
    int rootChildCount = root.getChildCount();
    mainLoop:
    for (int i = 0; i < rootChildCount; i++) {

        TreeNode child = root.getChildAt(i);
        if (child.toString().equals(nodeName)) {
            path = path.pathByAddingChild(child);
            int ChildCount = child.getChildCount();
            for (int j = 0; j < ChildCount; j++) {
                TreeNode child2 = child.getChildAt(j);
                if (child2.toString().equals(leafName)) {
                    path = path.pathByAddingChild(child2);
                    fileTree.setSelectionPath(path);

                    //I've used a SwingUtilities here, maybe it's not mandatory
                    SwingUtilities.invokeLater(
                            new Runnable() {
                                @Override
                                public void run() {
                                    fileTree.scrollPathToVisible(fileTree.getSelectionPath());
                                }
                            });
                    break mainLoop;
                }
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10904170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档