有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

来自XML(MSDL)的java分层Vaadin树

我试图从一个XML文件(MSDL)构建一个Vaadin树,我一直在向我的树中添加子项。到目前为止,我可以从我的XML文件中读取并显示我想要的标记/信息,但我无法从中创建层次结构,例如:

我有一个XML文件,其中包含一些关于行星及其卫星以及它们所在星系的信息:

Milky Way
 -Sunsystem
  -Earth
   -"Moon"
  -Mars
    -Phobos
    -Deimos
  -Saturn
    -Titan
    -Tethys
Pinwheel Galaxy
 -somesystem
   -weirdPlanet1
     -moon1
     -moon2
   -weirdPlanet2
     -moon1
     -moon2

现在我想在我的瓦丁树上有同样的结构。我尝试了很多东西,但结果总是一样的:一些空值添加到树中,我只能看到galaxys,但我无法扩展它们,或者我可以看到一个包含所有信息的树,但所有行星/卫星都没有结构,其中刚刚列出:/


共 (1) 个答案

  1. # 1 楼答案

    我很确定这和树本身没有任何关系。您可以尝试以下方法,而不是直接将数据添加到树中:

    1. 将XML数据解析为HierarchicalContainer
    2. 使用下面的示例代码遍历HierarchycalContainer,并验证它是否与XML文件结构相同
    3. 通过调用Tree.setContainerDataSource(Container)将数据容器绑定到树

    遍历HierarchycalContainer的示例代码:

    void iterateContainer() {
        for(Object rootItemId : myContainer.rootItemIds()) {
            Item rootItem = myContainer.getItem(rootItemId);
            System.out.println(rootItem.getItemProperty(myLabelProperty).getValue());
    
            iterateChildren(rootItemId, 1);
        }
    }
    
    void iterateChildren(Object parentItemId, int indent) {
    
        for(Object childItemId : myContainer.getChildren(parentItemId)) {
            Item childItem = myContainer.getItem(childItemId);
    
            for(int i = 0; i < indent; i++) {
                System.out.print(" ");
            }
            System.out.println(childItem.getItemProperty(myLabelProperty).getValue());
    
            if(myContainer.hasChildren(childItemId)) {
                iterateChildren(childItemId, indent+1);
            }
        }
    
    }
    

    这只是一些未经测试的QnD代码,但这应该有助于您遍历容器

    编辑:刚刚注意到我的答案可能(部分)是一个愚蠢的解决方案,因为树已经使用了HierarchycalContainer。您可以初始化myContainerHierarchicalContainer myContainer = (HierarchicalContainer) myTree.getContainerDataSource();并使用上面的代码

    edit2:如果结构不相同,请查看哪里出错,然后让调试器完成其余的工作:)