2010-04-16 52 views
1

我正在尋找將收藏夾/ MRU類型行爲添加到JComboBox的代碼。在JComboBox中實現最近使用的或收藏夾下拉列表

我可以自己編碼,但它確定好像其他人可能已經做到了。

我發現下面的(這看起來就像我想要什麼,但是源代碼是隔靴搔癢完成):http://java.sys-con.com/node/36658

有什麼建議?我需要保持這種相對較輕的特性,所以我寧願不使用屬於單片小部件庫的組件,並且首選開源。

回答

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); 
     } 
    } 
} 
+0

這將滿足我的需求(決定何時添加元素將需要焦點更改偵聽器,這很容易)。問題鏈接中描述的組件更有趣,但您的方法足以滿足我所做的。謝謝。 – 2010-04-17 15:56:24

0

什麼只是繼承JComboBox和重寫

public void addItem(Object anObject) 

給你想要的功能?

您可以只保留與有效項目同步的項目的內部列表,只要您添加新項目,它就可以檢查size() >= maxItems並修剪最近的項目。

然後你應該找到一種方法來刷新一個項目,只要它被使用。如果它的選擇足以刷新,你可以寫一個ItemListener這樣做。否則,您需要指定的外部動作或觀察者/可觀察模式。

相關問題