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

Java 在JComboBox中实现最近使用的或收藏夹下拉列表,java,swing,jcombobox,Java,Swing,Jcombobox,我正在寻找将收藏夹/MRU类型行为添加到JComboBox的代码 我可以自己编写代码,但看起来肯定有人已经这么做了 我发现了以下内容(看起来与我想要的一模一样,但源代码还远远不够完整): 有什么建议吗?我需要保持这一点相对较轻,因此我不希望使用作为单片小部件库一部分的组件,而更希望使用开源组件。如何将JComboBox子类化并覆盖 public void addItem(Object anObject) 给它你想要的功能 您只需将项目的内部列表与有效项目保持同步,并且无论何时添加新项目,它都可

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

我可以自己编写代码,但看起来肯定有人已经这么做了

我发现了以下内容(看起来与我想要的一模一样,但源代码还远远不够完整):


有什么建议吗?我需要保持这一点相对较轻,因此我不希望使用作为单片小部件库一部分的组件,而更希望使用开源组件。

如何将
JComboBox子类化并覆盖

public void addItem(Object anObject)
给它你想要的功能

您只需将项目的内部列表与有效项目保持同步,并且无论何时添加新项目,它都可以检查
size()>=maxItems
,并减少最近添加的项目


然后,您应该找到一种方法,在使用项目时刷新它。如果它的选择足够刷新,您可以编写一个
itemstener
来执行此操作。否则,您将需要指定的外部操作或观察者/可观察模式。

如何子类化
JComboBox
并重写

public void addItem(Object anObject)
给它你想要的功能

您只需将项目的内部列表与有效项目保持同步,并且无论何时添加新项目,它都可以检查
size()>=maxItems
,并减少最近添加的项目

然后,您应该找到一种方法,在使用项目时刷新它。如果它的选择足够刷新,您可以编写一个
itemstener
来执行此操作。否则,您将需要指定的外部操作或观察者/可观察模式。

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

附录:这里有一个例子;根据SO,许可证为。我会用它来保存条目

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);
        }
    }
}
考虑扩展:重写
addElement()
insertElementAt()
以在零处插入并删除最后一个元素

附录:这里有一个例子;根据SO,许可证为。我会用它来保存条目

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);
        }
    }
}
这可以满足我的需要(决定何时添加元素需要一个焦点更改侦听器,这很容易)。问题中的链接中描述的组件非常有趣,但您的方法足以满足我的要求。谢谢。这可以满足我的需要(决定何时添加元素需要一个焦点更改侦听器,这很容易)。问题中的链接中描述的组件非常有趣,但您的方法足以满足我的要求。谢谢