2011-03-29 57 views
1

UPDATE:它不一定要使用静态文件。是否正在使用全局变量字符串,并且如果长度可能发生变化,则正在监听?Java Swing:如何立即将对xml文件所做的更改反映到可视化树中?

我想做什么:基本上,我试图表示在其他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

第一店的XML文件的一个临时变量而绘制树的第一次,然后用螺纹或TimerTask的不断的修改时间轨迹,如果在修改时间的任何改变的修改时间与临时变量相比,这意味着XML文件被修改。请使用您的树视图生成代码。

1

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

如果你想要你也可以用这个library from Apache commons

相关问题