2013-07-16 1 views
2

Я делаю проект в Vaadin 7. В этом мне нужно добавить дубликат Item в Tree.Vaadin - Добавить повторяющийся элемент в дереве

мне нужно дерево, как это,

+ Person A 
    Name 
    Age 
+ Person B 
    Name 
    Age 

Но, компонент Vaadin Tree не добавляя элемент дубликат в дереве. Кажется, он перезаписывает предыдущий элемент.

Возможно ли иметь дерево, как указано выше, в Ваадине? Я использую иерархический контейнер.

Обновление

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); 

Поскольку объект А и Е имеет такое же значение, как 'а'. Дерево просто пропускает или заменяет его.

Динамический код

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

Теперь, как я могу установить алфавит как родитель для всех других элементов?

+0

Не могли бы вы показать нам какой-нибудь код, как вы добавляете свои предметы и какой контейнер используете? – nexus

+0

эй Nexus, я обновил свой вопрос. Возможно, это поможет вам найти проблему. – Gugan

ответ

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.

+0

Heh nexus .. У меня проблема с этим .. Мое дерево динамическое ... Как я могу обрабатывать объекты? – Gugan

+0

@Gugan, что вы подразумеваете под динамическим? – nexus

+0

@ Гуган, пожалуйста, предоставьте код. – nexus

0

Ключ имеет уникальный идентификатор для каждого элемента и изменяет титры. Что-то вроде:

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++; 
} 

По определению дерево не может иметь несколько элементов с одинаковым идентификатором.

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

Класс 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 
Смежные вопросы