2011-03-29 53 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

相關問題