简体   繁体   中英

JTree node not getting added as expected

I am trying to Parse the below XML file and create an JTree based on it.

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

The "WINDOW 01" is getting added to the root node "Object List", but the "PAGE 01" node is not getting displayed under the "WINDOW 01" node. The source code used is given below. Please Help!!!

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;
    }
}

This is the main class. No errors or warnings are displayed on compiling.

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;
        }
    }
}

Add your custom DefaultMutableTreeNode DataNode to child node for WINDOW 01 rather than the dWindow which never gets added to the JTree . Replace

dWindow.add(xPage);

with

xWindow.add(xPage);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM