2015-04-21 3 views
0

J'ai le problème que j'utilise un JComboBox avec CellRenderer pour afficher les valeurs de ma classe AddressNode. Toutefois, lorsque je sélectionne un élément dans DropDown, il insère la valeur de l'objet dans le composant Editor au lieu de la valeur Rendu. Le code pour mon CellRenderer est la suivante:JComboBox sélection des objets à l'aide d'un 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; 
} 

Quand je par exemple sélectionner un élément dans ma liste déroulante, il y aura ensuite la valeur de la EditorComponent à quelque chose comme: [email protected] Attendu que je voulais qu'il mette la valeur à la même chaîne que mon CellRenderer affichée.

+2

1. Renderer est désigné pour décorer, mettre en surbrillance, ressemble à toutes les lignes de code à l'intérieur si (value instanceof AddressNode) {est en conflit avec cette idée implémentée dans API, 2. value [email protected] est à peu près faux utilisation d'un tableau dans des objets Java/Swing – mKorbel

+1

Une zone de liste modifiable n'est pas conçue pour modifier un objet. Il est uniquement conçu pour éditer une chaîne simple. Ce que vous voyez dans l'éditeur est la représentation 'toString()' de votre objet. – camickr

+0

En plus de ce qui précède, nous ne savons pas ce que 'node' est (et quelles sont ses fonctions connexes). – user1803551

Répondre

0

Pouvez-vous essayer le code ci-dessous publique Component getListCellRendererComponent (liste JList, la valeur de l'objet, int index, booléen isSelected, cellHasFocus Boolean) {

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 retour (liste, displayString, index, isSelected , cellHasFocus); }

+0

Hey, merci pour la réponse, mais il définit toujours la valeur de l'EditorComponent à la valeur de l'objet lors de la sélection avec votre code. –