在我的应用程序中,我有3个组合框,每个组合框包含相同的项目列表,但每个组合框都可以选择不同的项目。还有一个允许添加新项目的按钮,当添加它时,它应该被添加到所有三个组合框中,这个新添加的项目也应该成为combox 3的选定项目,但为组合框1和2选择的项目不应该改变。
我正在尝试确定所有三个组合框是否应共享相同的DefaultComboBoxModel
。这将使新添加的项目很容易出现在每个组合中,但与JList不同的是,没有一个单独的列表选择模型似乎会破坏它。
然而,JComboBoxModel的Javadocs说:
所选项目可能不一定由基础管理 ListModel的。这种不相交的行为允许临时存储和 检索模型中的选定项目。
这是否意味着我可以对所选项目使用不同的机制,我不清楚上述句子的含义。
答案 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;
}
}
如果这就是你所拥有的那样,你就可以轻松使用数组