【发布时间】:2010-04-16 21:36:18
【问题描述】:
我正在寻找将收藏夹/MRU 类型行为添加到 JComboBox 的代码。
我可以自己编写代码,但似乎其他人可能已经完成了。
我找到了以下内容(看起来和我想要的完全一样,但源代码远未完成):http://java.sys-con.com/node/36658
有什么建议吗?我需要保持相对轻量级,因此我不希望使用作为整体小部件库一部分的组件,并且首选开源。
【问题讨论】:
我正在寻找将收藏夹/MRU 类型行为添加到 JComboBox 的代码。
我可以自己编写代码,但似乎其他人可能已经完成了。
我找到了以下内容(看起来和我想要的完全一样,但源代码远未完成):http://java.sys-con.com/node/36658
有什么建议吗?我需要保持相对轻量级,因此我不希望使用作为整体小部件库一部分的组件,并且首选开源。
【问题讨论】:
考虑扩展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);
}
}
}
【讨论】:
仅仅继承JComboBox 并覆盖
public void addItem(Object anObject)
给它你想要的功能?
您可以只保留与有效项目同步的内部项目列表,并且每当您添加新项目时,它可以检查是否size() >= maxItems 并删除最近的项目。
然后,您应该找到一种在使用项目时刷新项目的方法。如果它的选择足以刷新,您可以编写一个ItemListener 来完成它。否则,您将需要指定的外部操作或观察者/可观察模式..
【讨论】: