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

            }
4

3 回答 3

8

您可以简单地将值添加到 aList并使用CollectionsAPI 对其进行排序。

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如果这样更容易

于 2013-06-12T06:00:16.223 回答
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");
于 2013-06-12T06:04:02.537 回答
2

似乎在这里工作得很好:

在此处输入图像描述

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);
    }
}
于 2013-06-12T06:06:20.257 回答