如何在 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 并在其他列中具有数据的 JTable?