3

我正在 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);
}

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

4

3 回答 3

2

问题是a.equals(e) == true。所以分层容器不会添加两次。

你可以做两件事:

1)

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

更多信息在这里

2)使用例如实现的POJO对象toString()并在那里设置您的项目标题或使用另一个项目标题模式select.setItemCaptionMode(Select.ITEM_CAPTION_MODE_XYZ);

更多信息也在这里

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

tree.setParent(itemChildId, itemAlphabetId);

请参阅此处的示例。

于 2013-07-16T15:17:20.230 回答
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;
   }
}

班级菜单标题

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

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

视图类方法

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
于 2017-10-20T14:41:47.303 回答
0

关键是每个项目都有唯一的 id 并修改标题。就像是:

String[] items = {"alphabet", "a", "b", "c", "d", "a"};
int counter = 1;
for(String item : items) {
   Object itemId = tree.addItem(counter);
   tree.setItemCaption(counter, item);
   if(counter >1) {
     tree.setParent(counter, 1);
   }
   counter++;
}

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

于 2017-07-17T21:06:09.427 回答