我有問題,我正在使用帶有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相同。
1.渲染器被指定爲裝飾,突出顯示,看起來像if(value instanceof AddressNode){與API中實現的這個想法相沖突的每個代碼行2. value [email protected]是關於錯誤的在Java中使用數組/ Swing對象 – mKorbel
組合框不用於編輯對象。它僅用於編輯簡單的字符串。您在編輯器中看到的是對象的'toString()'表示。 – camickr
除了上面的內容,我們不知道'node'是什麼(以及它的相關函數是什麼)。 – user1803551