Java JCombox可以共享模型但不能共享选定项状态吗?
在我的应用程序中,我有3个组合框,每个组合框包含相同的项目列表,但是每个组合框可以选择不同的项目。还有一个按钮,允许添加新项目,添加时应将其添加到所有三个组合框中,此新添加的项目也应成为组合框3的选定项目,但组合框1和2的选定项目不应更改 我正在尝试决定是否所有三个组合框都应该共享相同的Java JCombox可以共享模型但不能共享选定项状态吗?,java,swing,jcombobox,Java,Swing,Jcombobox,在我的应用程序中,我有3个组合框,每个组合框包含相同的项目列表,但是每个组合框可以选择不同的项目。还有一个按钮,允许添加新项目,添加时应将其添加到所有三个组合框中,此新添加的项目也应成为组合框3的选定项目,但组合框1和2的选定项目不应更改 我正在尝试决定是否所有三个组合框都应该共享相同的defaultcomboxmodel。这将使新添加的项目很容易出现在每个组合中,但与JList不同的是,没有一个单独的列表选择模型似乎会破坏它 但是,JComboxModel的Javadocs表示: 所选项目不一
defaultcomboxmodel
。这将使新添加的项目很容易出现在每个组合中,但与JList不同的是,没有一个单独的列表选择模型似乎会破坏它
但是,JComboxModel的Javadocs表示:
所选项目不一定由基础项目管理
列表模型。这种不相交的行为允许临时存储和
检索模型中的选定项
这是否意味着我可以对所选项目使用不同的机制,我不清楚上面这句话的意思。JComoboxModel引入的唯一方法是
getSelectedItem()
和setSelectedItem(Object anItem)
,所以我会说不
基本上,您可以将每个模型的数据放在一个单独的共享列表中。然后,您可以创建使用此数据列表的组合框模型的三个新实例(使用您自己的实现或为defaultcomboxmodel
)设定种子。这些将分别应用于每个组合框,这样每个组合框都有自己的模型
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));
MyComboxModel
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;
}
}
如果你有一个数组,那么你也可以很容易地使用它。我想你最好的办法是用相同的数据创建三个独立的模型。Thx,如果我有三个独立的模型都是用相同的向量初始化的,然后我想添加一个新的项,我使用什么机制来添加它,通过一个模型,或者直接添加到向量,或者我必须向每个模型添加项才能添加一个新元素,您需要让模型发出模型已更新的通知。有两种方法可以做到这一点。您可以在模型上创建一个方法,该方法允许您触发受保护的方法。这将允许您向
向量添加一个值
,但您需要对每个模型分别调用“update”方法,以便更新视图。或者,您可以进行一些欺骗。您使用ListModel
作为主要共享容器(实现DefaultListModel
。然后每个组合框将向该模型附加一个ListDataListener
)(当您通过构造器传递它时,`并简单地传递更新事件,这将允许组合框充当代理,但现在考虑可能更容易,只需保持组合完全独立,并简单地调用每个组合上的addElement,无论如何都标记为正确,因为您已经提供了一个全面的答案。)