3

在这里读到,但是如果 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

4

3 回答 3

3

我在 in 中添加了一个新Action的。您可能希望从构造函数中重新考虑;为了方便起见,我对其进行了硬编码:popupgetJPopupForExplorerTree()xmlFileXMLTree

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);
        }
    }
});
于 2012-08-09T01:38:02.140 回答
2
  • 这是最复杂的代码,可能

  • 阅读有关的教程JTables DefaultTableModel(良好描述的概念和逻辑DefaultXxxModel类似/相同)

  • 阅读有关的教程JTree

  • 阅读有关的教程Concurency in Swing

  • 特别是关于SwingWorker

  • 在您的情况下,更好(抱歉)将创建一个新实例DefaultTreeModel,通过使用填充数据SwingWorker,将新模型添加到可见JTree

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

于 2012-08-07T07:38:35.947 回答
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();
}}; 
于 2012-08-08T07:07:37.810 回答