2009-12-27 61 views
0

作爲一個JComboBox,ListCellRenderer,我有這樣一個類:JComboBox中,編輯器和渲染器相關

class ZComboBoxRenderer extends JPanel implements ListCellRenderer{ 
private ZGrid grid; 
public ZComboBoxRenderer(ZGrid grid) { 
    setLayout(new BorderLayout()); 
    this.grid = grid; 
    add(new JScrollPane(grid), BorderLayout.CENTER); 
} 
public ZGrid getGrid(){ 
    return grid; 
} 
@Override 
public Component getListCellRendererComponent(JList list, Object value, 
     int index, boolean isSelected, boolean cellHasFocus) { 
    grid.fetchSQL(); 
    return this; 
} 
} 

ZGrid這裏,延伸JTable

作爲ListCellRendererComponent,我提供了一個內部爲ZGrid的JPanel,內部爲JCombobox。問題是,在它的列表中,這個ZGrid繪畫得當。但它也在JCombobox的編輯中被繪製。我上傳了一張圖片以更好地展示這一點。

有沒有辦法將編輯器與列表分開?


alt text http://img444.imageshack.us/img444/564/soex.jpg

回答

1

從我的理解,要實現一個自定義渲染爲您JComboBox,雖然它正確地呈現你的下拉列表中的內容,這完全打亂了組合框的當前值。

我看到在您的處置兩個選項:

  1. 您可以擴展UI組件您JComboBox並覆蓋paint方法讓你的網格的自定義表示您當前的價值觀。這將是一個非常快速的概念證明,但它會帶來問題,因爲您需要擴展您希望應用程序運行的每個UI(金屬,Windows,Mac等)。

  2. 您可以推出自己的下拉菜單,並使其看起來像JComboBox。這並不像POC那樣困難,但其複雜性在於處理影響組合框周圍選擇和導航的不同鍵盤輸入。

+0

自從我問這個問題已經有一段時間了,我已經改變了我對這個問題的設計。儘管謝謝你的回答。 –