我有一个完全正常的ArrayList<MyObject>,需要编辑并从中选择一个对象。

在应用程序窗口中,我有一个JComboBox从列表中选择适当的选项。我正在为这些对象编写一个编辑器对话框,其中仅包含这些对象和编辑器字段的JList。这很容易做到;我只是有某种ListModel实现。插入ArrayList,通过通常的字段进行访问。 GUI列表中的内容是实际列表中内容的1:1表示。简单。

但是主应用程序窗口中的组合框让我有些头疼,因为我需要一个特殊的值。理想情况下,列表中的第一项应为“(无)”,并返回null

我是否只需要为此编写某种怪异的ComboBoxModel实现,或者是否有更简单的,已经实现的方法来实现?我绝对可以想象这种情况以前已经出现过。

最佳答案

实现自己的ComboBoxModel应该很容易。

由于此解决方案从您的Vector创建了一个新的ArrayList,因此在创建yourArrayList之后对Vector所做的更改将在您的JComboBox中不可见。如果需要,则必须实现自己的ComboBoxModel(请参见DefaultComboBoxModel实现)。

无论如何,您都必须这样做,因为没有DefaultComboBoxModel构造函数采用List

class SpecialComboBoxModel extends DefaultComboBoxModel {
    public final static String NULL_ELEMENT = "<None>";

    public SpecialComboBoxModel(Vector v) {
        super(v);
    }

    @Override
    public int getSize() {
        return super.getSize() + 1;
    }

    @Override
    public Object getElementAt(int index) {
        if( index == 0) {
            return NULL_ELEMENT;
        }
        return super.getElementAt(index - 1);
    }
}


    ArrayList<String> yourArrayList = new ArrayList<String>();
    yourArrayList.add("Value1");
    yourArrayList.add("Value2");
    Vector<String> v = new Vector<String>(yourArrayList);
    dropdown.setModel(new SpecialComboBoxModel(v));

09-30 14:59