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.
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
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
En plus de ce qui précède, nous ne savons pas ce que 'node' est (et quelles sont ses fonctions connexes). – user1803551