java - Swing ComboBox,选择 "none of the below"

标签 java swing

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

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

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

我只需要写一些奇怪的ComboBoxModel实现这个,或者有一个更简单的,已经实现的方法来做到这一点?我绝对可以想象这种情况以前曾出现过。

最佳答案

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

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

无论如何,您都必须执行此操作,因为没有采用 ListDefaultComboBoxModel 构造函数。

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/

相关文章:

java - 使用 Java 8 : Map<String, 基于对象的属性从 Map<String, Set<Object>> 中设置 <Object>> 进行过滤

java - 为我正在创建的 GUI 中的 JMenuItem "Copy"提供低级功能

java - 多个 JPanel 未打印在背景前面

java - 调用数据库时应用程序卡住

java - 没有链接的gradle项目

java - 无法使用 Jackson 创建内部类列表

java - 如何防止掷骰子的重复语句

java - 将自定义页码标签保存在书签中

java - 更新 JFrame 大小和扩展状态

java - 如何设置一个鼠标监听器使得表格只能点击一次?