2013-06-12 341 views
1

我想在我的vaadin組合框中以升序方式分類項目列表。我正在添加如下項目。如何將組合框項目排序

 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,對數據進行排序,然後將數據添加到組合框。請參閱查爾斯安東尼在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不是在鞦韆。 –

+1

*「對不起,我想要在Vaadin」*對不起,但直到你可以發佈你自己的基於Vaadin的SSCCE(我在*製作自己的SSCCE之前要求你發佈*)之前,我可以不提供進一步的幫助。 –

+1

@Sanjaya Liyanage -1忽略,[在Vaadin是相似的API](http://stackoverflow.com/a/7388965/714968) – mKorbel