当前位置: 首页 > 知识库问答 >
问题:

JTree节点没有按预期添加

萧凡
2023-03-14

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

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

“窗口01”将添加到根节点“对象列表”,但“页面01”节点不会显示在“窗口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;
        }
    }
}

共有1个答案

郑正阳
2023-03-14

将自定义DefaultMutableTreeNodeDataNode添加到WINDOW 01的子节点,而不是从未添加到JTreedWindow。代替

dWindow.add(xPage);

xWindow.add(xPage);
 类似资料:
  • > 创建了一个没有任何组件的JFrame 我重写了keyPressed()方法,这样每当从键盘上按下一个键时,框架中就会出现一个按钮(通过使用add()然后调用repaint())。现在我想问的是,当从键盘上按下键的时候,没有任何东西被添加到框架中,但是当我调整框架窗口的大小时,按下键后,按钮不知从框架的哪里出来....出什么事了?

  • 我正在开发一个graqphqlapi,它通过Mongoose从MongoDB获取数据。现在我遇到的问题是GraphQL不使用查询来解析字段,而是使用字段解析程序,因为没有设置ID,所以字段解析程序无法工作。 TypeDefs: 解析程序: 功能: 查询: 结果:

  • 我试图在弹出组件和JMenuItem组件的click action事件中向JTree动态添加节点。我右键单击节点组件并添加另一个节点。添加节点适用于叶节点,但不适用于非叶节点。我不知道代码有什么问题。似乎添加了节点,但Gui没有更新。 平台:Windows 7 Java Java版本“1.7.0\u 17”Java(TM)SE运行时环境(build 1.7.0\u 17-b02)Java HotS

  • 我已经实现了一个TreeModel来调整存量数据模型,以便将其可视化为JTree。我遇到了一个问题,节点有多个相同的子(叶)节点。例如,考虑一个JTree,它的叶节点是Strings。每当父节点包含具有相同String值的子节点时,就会出现问题。这些叶节点的TreePath是相同的,作为Strings,equals()返回true。留档明确地调用这个: JTree及其相关类广泛使用TreePath

  • 我在使用R的group_by和SUMMARY函数时遇到了一些问题,我想知道你们是否可以帮我一些忙。我有一张类似的表格: 我试图使用dplyr的group_by和SUMMARY来找到频率列的平均值。下面是我的示例代码: 我所期望的是,一个表格被吐出来,分解按单个类别分组的平均频率,如下所示: 但是,我收到的是一个按类别分组的表,每个类别接收整个表的平均值,如下所示: 有什么线索吗?我应该说我是初学者

  • 问题内容: 我想使用文件浏览器创建文本编辑器,所以当我启动应用程序时,我想在程序中在JTree上添加节点,以便它向我显示所有文件和文件夹,例如在“我的文档”文件夹中,并允许我访问这些文件和文件夹(尤其是文件夹)。我试图从这个例子中弄清楚安德鲁·汤普森是如何做到的, 但是我失败了。我使用此示例为“我的文档”中的所有文件和文件夹创建了节点 。但这就是全部,当单击表示文件夹的节点之一时,我无法弄清楚如何