Vaadin - 在树中添加重复项

时间:2013-07-16 10:28:45

标签: tree duplicates vaadin

我正在Vaadin 7做一个项目。在那里,我需要在树中添加一个重复的项目。

我需要一棵这样的树,

+ Person A
    Name
    Age
+ Person B
    Name
    Age

但是,Vaadin Tree组件未在树中添加Duplicate项。好像它覆盖了上一个项目。

在Vaadin有可能有如上所述的树吗?我使用分层容器。

更新

    Object a = "a";
    Object b = "b";
    Object c = "c";
    Object d = "d";
    Object e = "a";
    Object alphabet = "alphabet";

    HierarchicalContainer aHC = new HierarchicalContainer();
    aHC.addItem(a);
    aHC.addItem(b);
    aHC.addItem(c);
    aHC.addItem(d);
    aHC.addItem(e);
    aHC.addItem(alphabet);
    aHC.setParent(a, alphabet);
    aHC.setParent(b, alphabet);
    aHC.setParent(c, alphabet);
    aHC.setParent(d, alphabet);
    aHC.setParent(e, alphabet);

    Tree tree = new Tree();
    tree.setContainerDataSource(aHC);

由于对象a和e具有与'a'相同的值。树只是跳过或替换它。

动态代码

String[] items = {"alphabet", "a", "b", "c", "d", "a"};
for(String item : items) {
   Object itemId = tree.addItem();
   tree.setItemCaption(itemId, item);
}

现在我如何将字母设置为所有其他项的父级?

3 个答案:

答案 0 :(得分:2)

问题在于a.equals(e) == true。因此,分层容器不会添加两次。

你可以做两件事:

1)

Object itemId = select.addItem();
select.setItemCaption(itemId, "The Sun");

更多信息here

2)使用POJO对象,例如toString(),并设置项目标题或使用select.setItemCaptionMode(Select.ITEM_CAPTION_MODE_XYZ);

的其他项目标题模式

更多信息here

根据你的编辑: 添加子项目后:

tree.setParent(itemChildId, itemAlphabetId);

请参阅示例here

答案 1 :(得分:0)

关键是每个项目都有唯一的ID并修改字幕。类似的东西:

$ python manage.py migrate swsite 0023_hitcounter.py

根据定义,树不能有多个具有相同ID的项目。

答案 2 :(得分:0)

我已经做了以下事情而无法访问它

班级菜单

public class Menu implements Serializable{
    private static final long serialVersionUID = 4788509071437681011L;
    private String nodeName;

    public Menu(String nodeName) {
        this.nodeName = nodeName;
    }
    public Menu() {
    }
    public String getNodeName() {
        return nodeName;
    }
    public void setNodeName(String nodeName) {
        this.nodeName = nodeName;
   }
}

Class MenuCaption

public class MenuCaption implements ItemCaptionGenerator<Menu>{
    private static final long serialVersionUID = 5863017672993685887L;

    @Override
    public String apply(Menu item) {
        return item.getNodeName();
    }
} 

ViewClass方法

private void loadMenu() {
TreeData<Menu> menuTreeData = new TreeData<>();
Menu menu = null;
Menu childMenu = null; 
Tree<Menu> menuTree =  new Tree<>();
    try {
        menu = new Menu("General");
        menuTreeData.addItem(null, menu);

        menu = new Menu("Eze");
        menuTreeData.addItem(null, menu);
        childMenu = new Menu("Investor Activity");
        menuTreeData.addItem(menu, childMenu);
        childMenu = new Menu("Investor Statement");
        menuTreeData.addItem(menu, childMenu);

        menu = new Menu("Investran");
        menuTreeData.addItem(null, menu);

        menu = new Menu("VPM");
        menuTreeData.addItem(null, menu);
        childMenu = new Menu("Investor Activity");
        menuTreeData.addItem(menu, childMenu);
        childMenu = new Menu("Investor Statement");
        menuTreeData.addItem(menu, childMenu);

        TreeDataProvider<Menu> dataProvider = new TreeDataProvider<Menu>(menuTreeData);
        menuTree.setDataProvider(dataProvider);
        menuTree.setItemCaptionGenerator(new MenuCaption());
        this.mainHorizontalSplitPanel.setFirstComponent(menuTree);
    }catch (Exception e) {
        e.printStackTrace();
    }
}

输出类似

的内容
General
>Eze
    Investor Activity
    Investor Statement
Investran
>VPM
    Investor Activity
    Investor Statement