更新:它不必使用静态文件。是否使用全局变量字符串并监听其长度是否可能发生变化?
我想做什么:基本上,我试图表示在另一个 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;
}
最佳答案
第一次绘制树时,首先将 XML 文件的修改时间存储在临时变量中,然后使用线程或 TimerTask 跟踪修改时间,如果修改时间与临时变量相比有任何变化这意味着 XML 文件已修改。请调用 TreeView 生成代码。
关于Java Swing : how to reflect changes made to xml file immediately to visual tree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5468777/