我有一个完全正常的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));