重新选择文件时Java JTree冻结

Posted

技术标签:

【中文标题】重新选择文件时Java JTree冻结【英文标题】:Java JTree freezing when file is re-selected 【发布时间】:2011-11-22 17:51:32 【问题描述】:

我有一个用作文件树的 JTree。如果我选择一个新文件,并选择与已选择的文件相同的文件,则树会因某种原因冻结。它应该删除包含树的旧 JScrollPane 并用一个新的替换它,如果我选择一个不同的文件,它工作正常,但不是同一个文件。 GUI 的其余部分仍然有效,只是树冻结了。以下是相关代码:

if ("browse".equals(e.getActionCommand())) 
        returnVal = fc.showOpenDialog(DSAuto.this);
        if (returnVal == JFileChooser.APPROVE_OPTION) 
            File file = fc.getSelectedFile();
            filename = file.getAbsolutePath();
            l1.setText("Job Location: " + filename);
            c.fill = GridBagConstraints.BOTH;
            c.weightx = 1.0;
            c.gridx = 0;
            c.gridy = 1;
            c.gridwidth = 10;
            c.gridheight = 9;
            c.ipady = 0;
            if (rm)
                pane.remove(ft1);
            else
                pane.remove(sp1);
            if (rm2) 
                pane.remove(l3);
                rm2 = false;
            
            if (!(file.isDirectory() || file.isFile())) 
                l3 = new JLabel("404 File Not Found");
                pane.add(l3, c);
                rm2 = true;
             else 
                ft1 = new FileTree(file);
                ft1.all = allB;
                pane.add(ft1, c);
                rm = true;
            
        

    

如果需要,我也可以提供 FileTree 类的代码。

【问题讨论】:

【参考方案1】:

它应该是移除旧框架并用新框架替换它

您不能从 JFrame 添加/删除 JFrame,所以我不知道该注释的含义。

不要删除/添加组件?如果要更新现有组件,请更改模型。那就是:

tree.setModel(...);

或者如果您确实删除/添加组件,那么您需要使用:

panel.revalidate();
panel.repaint();

【讨论】:

对不起,我发帖后才意识到我说的是框架而不是窗格。在我编辑之前你一定已经回复了。我以前从未见过 setModel() 。好的,添加 revalidate 和 repaint 使它工作。我将学习如何使用 setModel 以便下次可以这样做。感谢您的帮助! @SaintWacko,It should be removing the old JScrollPane containing the tree and replacing it with a new one。在这种情况下,您不需要更换 scrollPane。相反,您使用scrollPane.setViewportView(tree)。您很少需要删除/添加新组件。 好吧,这就是 scrollPane 实际上是 FileTree 类的一部分。这样做更有意义,因为文件树在滚动窗格之外真的没有太多用处。不过,我会记住 setViewportView 以备不时之需。

以上是关于重新选择文件时Java JTree冻结的主要内容,如果未能解决你的问题,请参考以下文章

JTree 通过单击行上的任意位置选择节点

Java:如何以编程方式选择和扩展 JTree 中的多个节点?

当我选择操作栏返回时冻结或制作稳定的 Web 视图?防止每次加载/重新加载

java jtree在延迟后重新显示每个项目的工具提示

java中jtree双击叶节点如何获取该文件所在的路径

如何在 Jtree 中刷新 XML