我正在尋找將收藏夾/ MRU類型行爲添加到JComboBox的代碼。在JComboBox中實現最近使用的或收藏夾下拉列表
我可以自己編碼,但它確定好像其他人可能已經做到了。
我發現下面的(這看起來就像我想要什麼,但是源代碼是隔靴搔癢完成):http://java.sys-con.com/node/36658
有什麼建議?我需要保持這種相對較輕的特性,所以我寧願不使用屬於單片小部件庫的組件,並且首選開源。
我正在尋找將收藏夾/ MRU類型行爲添加到JComboBox的代碼。在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
這樣做。否則,您需要指定的外部動作或觀察者/可觀察模式。
這將滿足我的需求(決定何時添加元素將需要焦點更改偵聽器,這很容易)。問題鏈接中描述的組件更有趣,但您的方法足以滿足我所做的。謝謝。 – 2010-04-17 15:56:24