【问题标题】:JComboBox list based model基于 JComboBox 列表的模型
【发布时间】:2014-09-07 15:21:46
【问题描述】:

在我的程序中,我使用了几个 JComboBoxes 和一个简单的列表组合框模型:

public class ListComboBoxModel<T> extends AbstractListModel implements ComboBoxModel {
    protected List<T> list;
    private T selection;

    public ListComboBoxModel(List<T> list) {
        this.list = list;
        this.selection = getDefaultSelection();
    }

    protected T getDefaultSelection() {
        if (list.size() > 0) {
            return list.get(0);
        } else {
            return null;
        }
    }

    @Override
    public Object getSelectedItem() {
        return selection;
    }

    @Override
    public void setSelectedItem(Object anItem) {
        selection = (T) anItem;
    }

    @Override
    public int getSize() {
        return list.size();
    }

    @Override
    public T getElementAt(int index) {
        return list.get(index);
    }
}

问题是,当我将元素添加到组合框正在使用的列表中时,它不再按预期工作。如果我单击组合框,则列表的长度正确,但其中的所有元素都是空的,因此列表全为白色。当我滚动一个元素时,它不会突出显示。当我单击列表中的任意位置时,它总是像我选择了最近添加的元素一样工作。如果我将列表大小减小到原始大小甚至减小,组合框将按应有的方式工作。 为了编辑组合框使用的列表,我使用了 JTables 和我在它们的模型中实现的 add 方法。

public void add(T element) {
    list.add(element);
    fireTableDataChanged();
}

有什么办法可以解决这个问题吗?

【问题讨论】:

    标签: list model add jcombobox


    【解决方案1】:

    如果有人感兴趣,我通过添加解决了问题

    fireContentsChanged(this, 0, getSize());
    

    在使用观察者模式在程序中的任何位置更改表/列表时调用的方法中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 2014-06-29
      相关资源
      最近更新 更多