我已经实现了自己的 ComboBoxModel:
public class MyComboBoxModel extends AbstractListModel<MyType>
implements ComboBoxModel<MyType> {}
现在我显然需要覆盖public void setSelectedItem(Object item)
,但文档说明如下:
此方法的实现应通知所有已注册
ListDataListeners
的内容已更改。
为此,我想我需要使用方法AbstractListModel.fireContentsChanged(Object, int, int)
。问题JComboBox
是,可以设置选定的项目而不必在列表中,所以当setSelectedItem(Object)
被调用时,我不一定能确定相关项目的索引,因为它不需要在底层模型中。
我找到了在这种情况下使用的另一个问题(https://stackoverflow.com/a/7077192)的答案fireContentsChanged(item, -1, -1)
,但该人没有提供该部分代码的任何详细信息。现在我想知道,这是否是处理更改的选定项目的正确方法?
我应该总是使用 -1 作为两个索引吗?如果它实际上在模型中,我是否应该尝试获取项目的真实索引?还是我应该做一些完全不同的事情?