2013-06-12 9 views
1

Я хочу, чтобы отсортированный список элементов по возрастанию в моем поле со списком vaadin. Я добавляю элементы, как показано ниже.Как отсортировать элементы ComboBox

 for (long i = 1; i < 11; i++) { 
      Long item = new Long(i); 
      comboBoxPriority.addItem(item); 

     } 

Я также пробовал его под способом. Тем не менее, я получаю список товаров в порядке убывания.

for (long i = 10; i > 0; i--) { 
       Long item = new Long(i); 
       comboBoxPriority.addItem(item); 

      } 
+0

Для лучшей помощи раньше, опубликовать [SSCCE] (HTTP: // sscce .org /). –

ответ

4

Одним из способов было бы поместить данные в IndexedContainer, сортировать данные, а затем добавить данные в ComboBox. См. Пример Чарльза Энтони в vaadin-forum.

Вот его пример:

/* Creating a container, with a property of "name". Item Id is a number, here. Can be anything (unique). 
* Alternatively, you could use the IndexedContainer to generate it's own ItemId : 
* cityContainer.getItem(cityContainer.addItem()).getItemProperty("name").setValue("New York"); 
*/ 
IndexedContainer cityContainer = new IndexedContainer(); 
cityContainer.addContainerProperty("name", String.class, null); 
cityContainer.addItem(1).getItemProperty("name").setValue("New York"); 
cityContainer.addItem(2).getItemProperty("name").setValue("Turku"); 
cityContainer.addItem(3).getItemProperty("name").setValue("Paris"); 
cityContainer.addItem(4).getItemProperty("name").setValue("Zanzibar"); 
cityContainer.addItem(5).getItemProperty("name").setValue("Turin"); 
cityContainer.addItem(6).getItemProperty("name").setValue("London"); 
cityContainer.getItem(cityContainer.addItem()).getItemProperty("name").setValue("New York"); 
/* Lets sort the container on ascending name*/ 
cityContainer.sort(new Object[]{"name"}, new boolean[]{true}); 

/* Here's a comboBox that uses that container, where we are using the "name" property as the item caption */ 
ComboBox comboBox = new ComboBox("City", cityContainer); 
comboBox.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY); 
comboBox.setItemCaptionPropertyId("name"); 
+0

извините, что ваша ссылка ломается. –

+0

Прекрасно работает для меня, но вот он снова: https://vaadin.com/forum/#!/thread/1228358 – mrt

+0

Он не работает в IE. Теперь я использую хром, но не работает. Спасибо –

8

Можно просто добавить значения в List и использует Collections API для сортировки.

List<Long> values = new ArrayList<Long>(10); 
for (long i = 10; i > 0; i--) { 
    values.add(i); 
} 
Collections.sort(values); 
DefaultComboBoxModel model = new DefaultComboBoxModel(values.toArray(new Long[values.size()])); 
comboBoxPriority.setModel(model); 

Вы можете достичь того же, используя массив и Arrays.sort если это eaiser

2

Кажется работать нормально здесь:

enter image description here

import java.awt.*; 
import javax.swing.*; 

class ReversCombo { 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 

      @Override 
      public void run() { 
       JPanel gui = new JPanel(new GridLayout(1,0,5,5)); 

       JComboBox comboBoxPriority = new JComboBox(); 
       for (long i = 1; i < 11; i++) { 
        Long item = new Long(i); 
        comboBoxPriority.addItem(item); 
       } 

       JComboBox comboBoxPriority2 = new JComboBox(); 
       for (long i = 10; i > 0; i--) { 
        Long item = new Long(i); 
        comboBoxPriority2.addItem(item); 
       } 

       gui.add(comboBoxPriority); 
       gui.add(comboBoxPriority2); 

       JOptionPane.showMessageDialog(null, gui); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
+0

Извините, что хочу иметь его в Vaadin not в качелях. –

+1

* «Извините, я хочу иметь его в Ваадине» * Извините, но пока вы не можете опубликовать свой собственный SSCCE на основе Vaadin (который я просил вас опубликовать * до того, как я создал свой собственный SSCCE), я не могу оказать дальнейшую помощь. –

+1

@Sanjaya Liyanage -1 для игнорирования, [в Vaadin - аналогичные API-интерфейсы] (http://stackoverflow.com/a/7388965/714968) – mKorbel

Смежные вопросы