我有一个完全正常的ArrayList<MyObject>
我需要编辑并从中选择一个对象。
在应用程序窗口中,我有一个 JComboBox
从列表中选择适当的选项。我正在为这些对象编写一个编辑器对话框,其中只包含 JList
这些对象和编辑器字段。这很容易做到;我只要 ListModel
某种形式的实现。坚持ArrayList
在中,通过常用字段访问它。 GUI 列表中的内容是实际列表中内容的 1:1 表示。简单。
但是主应用程序窗口中的组合框让我有点头疼,因为我需要一个特殊的值。理想情况下,列表中的第一项应该是“(无)”,并返回 null
.
我只需要写一些奇怪的ComboBoxModel
实现这个,或者有一个更简单的,已经实现的方法来做到这一点?我绝对可以想象这种情况以前曾出现过。
最佳答案
实现您自己的ComboBoxModel
应该很容易。
由于此解决方案从您的 ArrayList
创建了一个新的 Vector
,因此在创建 Vector
后对 yourArrayList
的更改将不会发生”在您的 JComboBox
中不可见。如果您需要这个,那么您必须实现自己的 ComboBoxModel
(请参阅 DefaultComboBoxModel
实现)。
无论如何,您都必须执行此操作,因为没有采用 List
的 DefaultComboBoxModel
构造函数。
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));
关于java - Swing ComboBox,选择 "none of the below",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175600/