0

在我的应用程序中,我有 3 个组合框,每个组合框都包含相同的项目列表,但是每个组合框都可以选择不同的项目。还有一个按钮,允许添加一个新项目,当它被添加时,它应该被添加到所有三个组合框,这个新添加的项目也应该成为组合框 3 的选定项目,但组合框 1 和 2 的选定项目不应该改变。

我正在尝试确定所有三个组合框是否应该共享相同的DefaultComboBoxModel. 这将使新添加的项目很容易出现在每个组合中,但与 JList 不同的是,没有单独的列表选择模型似乎会破坏它。

但是 JComboBoxModel 的 Javadocs 说:

所选项目不一定由基础 ListModel 管理。这种不相交的行为允许临时存储和检索模型中的选定项目。

那么这是否意味着我可以对所选项目使用不同的机制,我不清楚上述句子的含义。

4

1 回答 1

1

介绍的唯一方法JComoboBoxModelgetSelectedItem()and setSelectedItem(Object anItem),所以我会说不。

基本上,您可以将每个模型的数据放入一个共享列表中。DefaultComboBoxModel然后,您可以创建使用此数据列表的组合框模型的三个新实例(使用您自己的实现或播种 a )。然后这些将分别应用于每个组合框,以便每个组合框都有自己的模型。

List sharedData = //... Create a list of data...
JComboBox box1 = new JComboBox(new MyComboBoxModel(list));
JComboBox box2 = new JComboBox(new MyComboBoxModel(list));
JComboBox box3 = new JComboBox(new MyComboBoxModel(list));

我的组合框模型

public class MyComboBoxModel extends AbstractListModel implements ComboBoxModel {

    private List data;
    private Object selectedItem;
    public MyComboBoxModel(List dat) {
        this.data = data;
    }

    @Override
    public int getSize() {
        return data.size();
    }

    @Override
    public Object getElementAt(int index) {
        return data.get(index);
    }

    @Override
    public void setSelectedItem(Object anItem) {
        selectedItem = anItem;
    }

    @Override
    public Object getSelectedItem() {
        return selectedItem;
    }

}

如果这就是你所拥有的,你可以很容易地使用一个数组

于 2012-11-03T19:55:40.700 回答