JCombox可以共享模型但不能选择项目状态吗?

时间:2012-11-03 19:47:15

标签: java swing jcombobox

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

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

然而,JComboBoxModel的Javadocs说:

  

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

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

1 个答案:

答案 0 :(得分:1)

JComoboBoxModel引入的唯一方法是getSelectedItem()setSelectedItem(Object anItem),所以我会说不。

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

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));

<强> MyComboBoxModel

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;
    }

}

如果这就是你所拥有的那样,你就可以轻松使用数组