0

我有一个带有自定义模型的 JComboBox,它扩展了 DefaultComboBoxModel。

当我想将一个项目添加到我的组合框时,我将它添加到模型并重新绘制 JComboBox。但是,这将离开内部字段:

selectedItemReminder

不变。我应该怎么做。

4

1 回答 1

2

我不确定我是否理解您想要实现的目标,但我可能会想修改该方法以使其更像...

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检查组合框模型中contentsChangedJComboBox选定值是否已更改,如果已更改,它会调用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);
}
于 2013-08-05T02:12:21.333 回答