java - JTree 节点未按预期添加

标签 java swing jtree

我正在尝试解析下面的 XML 文件并基于它创建一个 JTree。

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

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

最佳答案

将自定义 DefaultMutableTreeNode DataNode 添加到 WINDOW 01 的子节点,而不是永远不会添加的 dWindowJTree。替换

dWindow.add(xPage);

xWindow.add(xPage);

关于java - JTree 节点未按预期添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16002714/

相关文章:

java - 获取 JTree 上单击节点的基础节点数据?

java - Java Web Start Swing App 如何显示 servlet 信息?

java - 如何在jspinner中设置预定义时间

java - 需要帮助更改按钮背景

Java 对象数组到 JTree

java - JTree:如何获取所有项目的文本?

java - 在java中添加对象到数组列表

java - 当我旋转模拟器时,如何阻止我的 Activity 被破坏?

java - 为按钮创建键盘快捷键

java swing 定时器...叹息