2013-04-14 38 views
0

我正試圖解析下面的XML文件並基於它創建一個JTree。JTree節點未按預期方式添加

<OBJECTS> 
    <WINDOW NAME = "WINDOW 01" URL = "URL 01"> 
     <PAGE NAME = "PAGE 01" URL = "PAGE URL 01"> 
     </PAGE> 
    </WINDOW> 
</OBJECTS> 

的「窗口01」被添加到該根節點「對象列表」,但「PAGE 01」節點不獲取下的「WINDOW 01」節點顯示。使用的源代碼如下所示。請幫忙!!!

public class DataNode extends DefaultMutableTreeNode {  
    private static final long serialVersionUID = 1L; 
    public String ObjectType, ObjectName, URL, ElementType; 
    public DefaultMutableTreeNode node; 

    public DataNode(DefaultMutableTreeNode node, Element element) { 
     this.node = node; 
     this.ObjectType = element.getTagName(); 
     this.ObjectName = element.getAttribute("NAME"); 
     this.URL = element.getAttribute("URL"); 
     this.ElementType = element.getAttribute("TYPE"); 
    } 

    public DataNode(Element element) { 
     this.node = new DefaultMutableTreeNode("OBJECT"); 
     this.ObjectType = element.getTagName(); 
     this.ObjectName = "Object List"; 
     this.URL = ""; 
     this.ElementType = ""; 
    } 

    @Override 
    public String toString() { 
     return this.ObjectName; 
    } 
} 

這是主類。編譯時不會顯示錯誤或警告。

public class MyOwn { 
    private JFrame contentsFrame; 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        MyOwn window = new MyOwn(); 
        window.contentsFrame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    public MyOwn() { 
     contentsFrame = new JFrame(); 
     contentsFrame.setTitle("My JTree"); 
     contentsFrame.setBounds(100, 100, 549, 738); 
     contentsFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JTree objectListTree = new JTree(convertXMLtoTree("G:/Collection.xml")); 
     objectListTree.setAlignmentY(Component.TOP_ALIGNMENT); 
     objectListTree.setAlignmentX(Component.LEFT_ALIGNMENT); 

     contentsFrame.getContentPane().add(new JScrollPane(objectListTree)); 
    } 

    private DefaultMutableTreeNode convertXMLtoTree(String Path) { 
     NodeList nWindow, nPage; 
     DefaultMutableTreeNode dRoot, dWindow, dPage; 
     DataNode xRoot, xWindow, xPage; 

     try { 
      File fXmlFile = new File(Path); 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(fXmlFile); 

      doc.getDocumentElement().normalize(); 
      xRoot = new DataNode(doc.getDocumentElement()); 
      dRoot = new DefaultMutableTreeNode(xRoot); 
      nWindow = doc.getDocumentElement().getElementsByTagName("WINDOW"); 

      for (int i = 0; i < nWindow.getLength(); i++) { 
       dWindow = new DefaultMutableTreeNode(((Element)(nWindow.item(i))).getAttribute("NAME")); 
       xWindow = new DataNode(dWindow, (Element)(nWindow.item(i))); 
       dRoot.add(xWindow); 
       nPage = ((Element)(nWindow.item(i))).getElementsByTagName("PAGE"); 
       for (int j = 0; j < nPage.getLength(); j++) { 
        dPage = new DefaultMutableTreeNode(((Element)(nPage.item(j))).getAttribute("NAME")); 
        xPage = new DataNode(dPage, (Element)(nPage.item(j))); 
        dWindow.add(xPage); 
       } 
      } 
      return dRoot; 
     } catch (Exception e) { 
      return null; 
     } 
    } 
} 
+0

請學習Java命名約定並嚴格遵守。 – kleopatra

回答

1

DefaultMutableTreeNode的DataNode添加自定義到子節點WINDOW 01而不是永遠也不會被添加到JTreedWindow。更換

dWindow.add(xPage); 

xWindow.add(xPage); 
+0

工作...你真棒...謝謝你 –