我读了 here,但如果xml文件发生更改,则jtree不会重新加载/刷新
如何创建刷新/重装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
答案 0 :(得分:3)
我在Action
中向popup
添加了新的getJPopupForExplorerTree()
。您可能希望从xmlFile
构造函数中重新考虑XMLTree
;我在下面为了方便而编写了硬编码:
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);
}
}
});
答案 1 :(得分:2)
这是最复杂的代码,可能是
阅读有关JTables DefaultTableModel
的教程(DefaultXxxModel
的良好描述的概念和逻辑是类似的/相同的)
阅读有关JTree
阅读有关Concurency in Swing
,
特别是关于SwingWorker
在你的情况下更好(抱歉)将为DefaultTreeModel
创建一个新实例,使用SwingWorker
填充数据,将新模型添加到可见JTree
,
通过替换模型,您将丢失当前JTree
答案 2 :(得分:1)
我不知道具体的代码,但你可以试试这个
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();
}};