如何对ComboBox项进行排序

时间:2013-06-12 05:54:15

标签: java swing sorting combobox vaadin

我希望在我的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);

            }

3 个答案:

答案 0 :(得分: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);

如果是eaiser

,您可以使用数组和Arrays.sort来实现相同的目标

答案 1 :(得分:4)

一种方法是将数据放入IndexedContainer,对数据进行排序,然后将数据添加到ComboBox。请参阅vaadin-forum中的Charles Anthony的例子。

以下是他的例子:

/* 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");

答案 2 :(得分: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);
    }
}