【问题标题】:Implementing a recently used or favorites dropdown in JComboBox在 JComboBox 中实现最近使用或收藏夹下拉菜单
【发布时间】:2010-04-16 21:36:18
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java swing jcombobox


    【解决方案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);
            }
        }
    }
    

    【讨论】:

    • 这可以满足我的需要(决定何时添加元素将需要一个焦点更改监听器,这很容易)。问题链接中描述的组件要好得多,但是您的方法对于我正在做的事情已经足够了。谢谢。
    【解决方案2】:

    仅仅继承JComboBox 并覆盖

    public void addItem(Object anObject)
    

    给它你想要的功能?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多