我有一个带有自定义模型的 JComboBox,它扩展了 DefaultComboBoxModel。
当我想将一个项目添加到我的组合框时,我将它添加到模型并重新绘制 JComboBox。但是,这将离开内部字段:
selectedItemReminder
不变。我应该怎么做。
我有一个带有自定义模型的 JComboBox,它扩展了 DefaultComboBoxModel。
当我想将一个项目添加到我的组合框时,我将它添加到模型并重新绘制 JComboBox。但是,这将离开内部字段:
selectedItemReminder
不变。我应该怎么做。
我不确定我是否理解您想要实现的目标,但我可能会想修改该方法以使其更像...
private void setChildren(Collection<BoundedArea> children) {
int oldSize = getSize();
// Notify the listeners that the all the values have begin removed
fireIntervalRemoved(this, 0, oldSize - 1);
this.children.clear();
for (BoundedArea boundedArea : children) {
if (boundedArea.getBoundedAreaType() == childType) {
this.children.add(boundedArea);
}
}
int size = getSize();
// Notify the listeners that a bunch of new values have begin added...
fireIntervalAdded(this, 0, size - 1);
setSelectedItem(null);
}
我能看到的另一个问题是你似乎认为列表是1
基于的,它不是,它是0
基于的,也就是说,第一个元素是0
根据对问题的更改进行更新
据我所知,intervalAdded
检查组合框模型中contentsChanged
的JComboBox
选定值是否已更改,如果已更改,它会调用selectedItemChanged
哪个触发适当的事件以发出选定项目更改的信号...
null
当您更改模型时,我会在您触发任何事件通知之前将当前选定的项目值设置为类似...
所以,使用前面的例子,我会做一些更像......
private void setChildren(Collection<BoundedArea> children) {
setSelectedItem(null);
int oldSize = getSize();
// Notify the listeners that the all the values have begin removed
fireIntervalRemoved(this, 0, oldSize - 1);
this.children.clear();
for (BoundedArea boundedArea : children) {
if (boundedArea.getBoundedAreaType() == childType) {
this.children.add(boundedArea);
}
}
int size = getSize();
// Notify the listeners that a bunch of new values have begin added...
fireIntervalAdded(this, 0, size - 1);
}