如何在 Jtree 中刷新 XML

Posted

技术标签:

【中文标题】如何在 Jtree 中刷新 XML【英文标题】:How to refresh XML in Jtree 【发布时间】:2012-08-04 04:21:45 【问题描述】:

我读过 here ,但如果 xml 文件发生更改,jtree 不会重新加载 /refreshes 如何创建刷新/重新加载 Jtree 的函数 我尝试编写代码:

refreshAction = new AbstractAction("Refresh", IconFactory.getIcon("delete", IconFactory.IconSize.SIZE_16X16)) 
public void actionPerformed(ActionEvent e) 
    XMLTree xmlClass = null;
    ((DefaultTreeModel) xmlClass.getModel()).reload(); 
    System.out.println("Refresh");
;

但我得到了错误:java.lang.NullPointerException

【问题讨论】:

【参考方案1】:

我在getJPopupForExplorerTree() 中为popup 添加了一个新的Action。您可能希望从 XMLTree 构造函数中重构 xmlFile;为了方便起见,我已经对其进行了硬编码:

popup.add(new AbstractAction("Reload") 

    public void actionPerformed(ActionEvent e) 
        System.out.println("Reload");
        try 
            root = getRoot("xml.xml");
            setModel(new XMLTreeModel(root));
         catch (Exception ex) 
            ex.printStackTrace(System.err);
        
    
);

【讨论】:

很高兴为您提供帮助;也可以考虑WatchService【参考方案2】:

这是最复杂的代码,可能

阅读关于JTables DefaultTableModel 的教程(DefaultXxxModel 的良好描述概念和逻辑与/相同)

阅读关于JTree的教程

阅读关于Concurency in Swing的教程,

特别是关于SwingWorker的描述

在你的情况下更好(对不起)为DefaultTreeModel创建一个新实例,使用SwingWorker填充数据,将新模型添加到可见JTree

李>

通过替换模型,您将丢失当前JTree中的所有更改

【讨论】:

@BujanganMuda:我认为您必须从文件中刷新模型,如here 所示。【参考方案3】:

我不知道具体的代码,但你可以试试这个

refreshAction = new AbstractAction("Refresh", IconFactory.getIcon("delete", IconFactory.IconSize.SIZE_16X16)) 
public void actionPerformed(ActionEvent e) 
     DefaultTreeModel myTreeModel = (DefaultTreeModel) xmlClass.getModel();

     myTreeModel.reload();

     revalidate();
     repaint();
; 

【讨论】:

好主意,但我认为他必须从文件中刷新模型,如here 所示。 BujanganMuda:另见Q&A。

以上是关于如何在 Jtree 中刷新 XML的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历JTree的每一个节点

如何:在第一列中具有可折叠 JTree 并在其他列中具有数据的 JTable?

如何在jtree中仅列出非隐藏和非系统文件

在java中如何响应单击JTree树中一个节点?

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

如何在jtree中搜索特定节点并使该节点展开。?