2015-04-21 105 views
0

我有問題,我正在使用帶有CellRenderer的JComboBox來顯示我的類AddressNode的值。但是,當我從DropDown中選擇一個項目時,它會將對象值插入EditorComponent而不是渲染值。我的CellRenderer的代碼如下:JComboBox使用CellRenderer選擇對象項目

public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
    super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
    if (value instanceof AddressNode) { 
     AddressNode node = (AddressNode) value; 
     String displayString = ""; 

     displayString += node.getStreet() + " " + node.getHouse(); 
     if (node.getCity() != null) 
      displayString += (", " + node.getCity()); 
     if (node.getPostCode() != null) 
      displayString += (" " + node.getPostCode()); 

     setText(displayString); 
    } 
    return this; 
} 

當我如選擇我的下拉列表中的項目,它會那麼EditorComponent的值設置爲類似:[email protected]。 雖然我希望它將值設置爲與我的CellRenderer顯示的String相同。

+2

1.渲染器被指定爲裝飾,突出顯示,看起來像if(value instanceof AddressNode){與API中實現的這個想法相沖突的每個代碼行2. value [email protected]是關於錯誤的在Java中使用數組/ Swing對象 – mKorbel

+1

組合框不用於編輯對象。它僅用於編輯簡單的字符串。您在編輯器中看到的是對象的'toString()'表示。 – camickr

+0

除了上面的內容,我們不知道'node'是什麼(以及它的相關函數是什麼)。 – user1803551

回答

0

你可以試試下面的代碼 公共組件getListCellRendererComponent(JList的列表,對象的值,INT指數,布爾isSelected,布爾cellHasFocus){

if (value instanceof AddressNode) { 
    AddressNode node = (AddressNode) value; 
    String displayString = ""; 

    displayString += node.getStreet() + " " + node.getHouse(); 
    if (node.getCity() != null) 
     displayString += (", " + node.getCity()); 
    if (node.getPostCode() != null) 
     displayString += (" " + node.getPostCode()); 

    //setText(displayString); 
} 

回報super.getListCellRendererComponent(列表,displayString,索引,isSelected ,cellHasFocus); }

+0

嘿,謝謝你的回答,但它仍然在選擇你的代碼時將EditorComponent的值設置爲Object Value。 –