在JComboBox中实现最近使用或收藏的下拉列表

时间:2010-04-16 21:36:19

标签: java swing jcombobox

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

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

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

有什么建议吗?我需要保持相对较轻,所以我宁愿不使用单片小部件库中的组件,而开源是首选。

2 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分:0)

如何只是继承JComboBox并覆盖

public void addItem(Object anObject)

给它你想要的功能吗?

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

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