Java Swing:如何将对xml文件所做的更改立即反映到可视化树?

时间:2011-03-29 06:34:00

标签: java xml swing treeview

更新:它不必使用静态文件。是否正在使用全局变量字符串并监听是否可能改变长度?

我正在尝试做什么:基本上,我试图表示在另一个Jpanel上呈现的xml文档的可视树表示。当我在这个渲染的xml文档上选择节点时,我想将该xml节点添加到可视树上。基本上,呈现的组件和可视树组件共享相同的xml文件/变量。

问题(我愿意接受其他建议):

我使用 org.apache.xerces.parsers.SAXParser 通过以下方法生成可视树。

它读取xml文件并返回要在屏幕上呈现的scrollPane组件。

我需要能够添加或删除节点并进行编辑。因此,当我单击一个按钮时,它会将一个节点添加到可视树中。但是,我认为在更新xml文件以快速绘制树时需要有一些事件监听器。这可能效率低下(?),因为每次xml文件更改事件发生时都需要重新绘制树?

private static Component createTree() {
         DefaultMutableTreeNode top = new DefaultMutableTreeNode("test"));

         SAXTreeBuilder saxTree = new SAXTreeBuilder(top); 

         try {             
             SAXParser saxParser = new SAXParser();
             saxParser.setContentHandler(saxTree);
             saxParser.parse(new InputSource(new FileInputStream("test1.xml")));
         }catch(Exception ex){
             ex.printStackTrace();
             top.add(new DefaultMutableTreeNode(ex.getMessage()));
         }

         JTree tree = new JTree(saxTree.getTree()); 
         JScrollPane scrollPane = new JScrollPane(tree);

        return scrollPane;
    }

2 个答案:

答案 0 :(得分:2)

首次在第一次绘制树时将XML文件的修改时间存储在临时变量中然后使用线程或TimerTask跟踪修改时间,如果修改时间与临时变量相比有任何变化这意味着修改了XML文件。请查看树视图生成代码。

答案 1 :(得分:1)

文件的更改事件不存在。您唯一的选择是在您的文件上编写一个调用java.io.File.lastModified()的轮询线程。取决于可能足够的情况和性能损失不是太高。

如果您愿意,也可以使用此library from Apache commons