如何在Jtree中刷新XML

时间:2012-08-07 07:22:41

标签: java xml swing reload jtree

我读了 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

3 个答案:

答案 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();
}};