1

我正在寻找将收藏夹/MRU 类型行为添加到 JComboBox 的代码。

我可以自己编写代码,但似乎其他人可能已经完成了。

我发现了以下内容(看起来与我想要的完全一样,但源代码远未完成):http: //java.sys-con.com/node/36658

有什么建议么?我需要保持相对轻量级,所以我宁愿不使用作为整体小部件库一部分的组件,并且首选开源。

4

2 回答 2

1

考虑扩展DefaultComboBoxModel: 覆盖addElement()insertElementAt()在零处插入并删除最后一个元素。

附录:这是一个例子;根据 SO,许可证是cc-wiki。我会Preferences用来保留条目。

class MRUComboBoxModel extends DefaultComboBoxModel {

    @Override
    public void addElement(Object element) {
        this.insertElementAt(element, 0);
    }

    @Override
    public void insertElementAt(Object element, int index) {
        super.insertElementAt(element, 0);
        int size = this.getSize();
        if (size > 10) {
            this.removeElementAt(size - 1);
        }
    }
}
于 2010-04-16T22:03:32.930 回答
0

只是子类JComboBox化和覆盖呢?

public void addItem(Object anObject)

给它你想要的功能?

您可以只保留与有效项目同步的内部项目列表,并且每当您添加新项目时,它都可以检查是否size() >= maxItems并删除最近的项目。

然后,您应该找到一种在使用项目时刷新项目的方法。如果它的选择足以刷新你可以写一个ItemListener这样做。否则,您将需要指定的外部操作或观察者/可观察模式..

于 2010-04-16T21:51:09.423 回答