更新:它不必使用静态文件。是否正在使用全局变量字符串并监听是否可能改变长度?
我正在尝试做什么:基本上,我试图表示在另一个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;
}
答案 0 :(得分:2)
首次在第一次绘制树时将XML文件的修改时间存储在临时变量中然后使用线程或TimerTask跟踪修改时间,如果修改时间与临时变量相比有任何变化这意味着修改了XML文件。请查看树视图生成代码。
答案 1 :(得分:1)
文件的更改事件不存在。您唯一的选择是在您的文件上编写一个调用java.io.File.lastModified()的轮询线程。取决于可能足够的情况和性能损失不是太高。
如果您愿意,也可以使用此library from Apache commons