2012-08-07 48 views
3

我读 here,但如果XML文件改变的JTree不会重新加载/刷新
如何创建刷新函数/重载JTree的
我尝试写代码:
如何刷新XML中的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

getJPopupForExplorerTree()增加了一个新的Actionpopup。您可能需要将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); 
     } 
    } 
}); 
+0

是啊,非常感谢你.. :) – 2012-08-09 07:46:34

+0

很高兴帮忙;还考虑[WatchService](http://stackoverflow.com/q/7784909/230513)。 – trashgod 2012-08-09 10:24:19

2
  • 这是最复杂的代码,可能

  • 的读取教程约JTables DefaultTableModel(良好所述概念和逻辑对于DefaultXxxModel是similair /相同)

  • 的读取教程约JTree

  • 读教程约Concurency in Swing

  • 特别描述关于SwingWorker

  • 在你的情况下更好(对不起)将创建一个n为DefaultTreeModel EW例如,通过使用SwingWorker填充数据,通过更换型号,你会迷失在当前JTree

+0

在此代码我用DefaultTreeModel的,但没有工作:( – 2012-08-08 02:14:48

+0

@BujanganMuda:我认为你必须从文件刷新模型,如图所示[这里] (http://stackoverflow.com/a/11875615/230513) – trashgod 2012-08-09 01:39:11

1

所有的变化我不知道spesific代码添加新模式,可见JTree

  • 但你可以试试这个

    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(); 
    }}; 
    
  • +0

    好主意,但我认为他必须从文件中刷新模型,如[这里]所示(http://stackoverflow.com/a/11875615/230513)BujanganMuda:另见[Q&A](http://stackoverflow.com/q/11790390/230513)。 – trashgod 2012-08-09 01:41:29