2016-05-23 9 views
1

Wie kann ich die Elemente einer ListSelect mischen?Vaadin shuffle ListSelect

So habe ich eine ListSelect mit Elementen angezeigt und nachdem ich auf eine Schaltfläche geklickt habe, möchte ich die Elemente in ihrer Reihenfolge mischen.

FYI: Ich bin Vaadin 7 und Eclipse Mars mit

Edit:

final VerticalLayout layout = new VerticalLayout(); 
     final Button button = new Button("Run"); 

     ListSelect select = new ListSelect(); 
     select.setRows(1000); 
     select.setNullSelectionAllowed(false); 
     select.addItems("Item1","Item2","Item3","Item3"); 

     //Shuffle the list 
     button.addClickListener(); 

     layout.addComponents(button, select); 
     layout.setMargin(true); 
     layout.setSpacing(true); 

     setContent(layout); 
    } 
+0

Bitte zeigen Sie Ihren Code. Grundsätzlich können Sie einen Container mit Ihren Artikeln verwenden und dort den neuen Auftrag festlegen –

Antwort

2

Verwenden Sie die BeanItemContainer Klasse zu Ihrem Vorteil:

protected void init(VaadinRequest request) { 
    final HorizontalLayout layout = new HorizontalLayout(); 
    final Button button = new Button("Run"); 

    final ListSelect select = new ListSelect(); 

    select.setNullSelectionAllowed(false); 
    final List<ItemBean> list = new LinkedList(); 
    //Add elements to list 
    list.add(new ItemBean("Item1", 1)); 
    list.add(new ItemBean("Item2", 2)); 
    list.add(new ItemBean("Item3", 3)); 
    list.add(new ItemBean("Item4", 4)); 
    list.add(new ItemBean("Item5", 5)); 

    final BeanItemContainer<ItemBean> beanBeanItemContainer = new BeanItemContainer<>(ItemBean.class); 
    beanBeanItemContainer.addAll(list); 

    select.setContainerDataSource(beanBeanItemContainer); 


    //Shuffle the list 
    button.addClickListener(new Button.ClickListener() { 
     @Override 
     public void buttonClick(Button.ClickEvent clickEvent) { 
      select.removeAllItems(); 

      Collections.shuffle(list); 

      beanBeanItemContainer.addAll(list); 


     } 
    }); 

    layout.addComponents(button); 
    layout.addComponent(select); 
    layout.setMargin(true); 
    layout.setSpacing(true); 

    setContent(layout); 
} 

Und Ihre Bean-Klasse definiert werden können wie folgt:

public class ItemBean implements Serializable { 
    String name; 
    int id; 

    public ItemBean(String name, int id) { 
     this.name = name; 
     this.id = id; 
    } 

    @Override 
    public String toString() { 
     return this.name; 
    } 

} 

Bitte lassen Sie mich wissen, wenn Sie weitere Fragen haben!