2017-05-19 1 views
0

Je suis assez nouveau pour Java, donc s'il vous plaît garder cela à l'esprit ...Comment afficher des objets personnalisés (avec toString) dans un JComboBox

J'ai une interface graphique swing qui contient un JComboBox. Je veux que l'utilisateur sélectionne une option d'un ArrayList<Person>. S'il vous plaît noter que je pourrais également utiliser un tableau. J'ai utilisé JComboBox avant. Mais seulement avec des cordes. La classe Person possède une méthode toString() que je souhaite utiliser pour obtenir le texte devant représenter l'objet dans JComboBox.

Lorsqu'un bouton JButton est poussé plus tard, l'objet Personne sélectionné (le même) doit être ajouté à un autre ArrayList pour d'autres opérations.

Je veux que le bouton pour faire quelque chose comme ceci:

Person selectedPerson = (Person) myComboBox.getselectedItem(); 

Cependant, je dois en quelque sorte d'obtenir ces objets personne dans cette chose en quelque sorte. Je essayé d'utiliser:

myComboBox.setModel(new DefaultComboBoxModel<>(aListOfStuff); 

J'ai même essayé de faire mon propre modèle:

public class DropDownModel extends DefaultComboBoxModel<Person> implementsMutableComboBoxModel<Person> 

mais la méthode de setModel veut rien de tout cela. J'ai vu d'autres types de questions similaires sur Stackoverflow, mais aucun d'entre eux ne répond à ma question. J'ai aussi remarqué que quelqu'un mentionne une classe de rendu ou quelque chose comme ça.

Encore une fois: Je veux qu'un ArrayList ait ses objets Person sélectionnables dans un JComboBox afin que je puisse accéder à celui sélectionné avec Person tempPerson = (Person) myComboBox.getSelectedObject();.

Dois-je créer mon propre cours de modèle? J'ai retiré les affichant dans un JList. Utilisation d'un modèle personnalisé

public class ListBoxModel extends AbstractListModel<Person> implements Iterable<Person> 

Ai-je besoin de quelque chose de semblable à cela?

Est-ce possible?

Soit dit en passant: tout mon code est GutHub (si vous avez trop de temps et que vous voulez jeter un coup d'oeil): https://github.com/Bernd-L/PersonenManager2/tree/Teacher-selection

Quelques exemples:

myComboBox.setModel(new DefaultComboBoxModel<>(s.getPersonListAsArray())); 
cbRemoveClass.setModel(new DefaultComboBoxModel<>(t.getClasses().toArray(new String[t.getClasses().size()]))); 
someOtherComboBox.setModel(new DropDownModel(dlModel.getList())); // trying to use my custom model 
+0

Compte tenu des [ 'DefaultComboBoxModel' constructeurs] (https: // docs.oracle.com/javase/8/docs/api/javax/swing/DefaultComboBoxModel.html#constructor.summary) accepte a) aucun argument b) un tableau (c.-à-d. '[]') ou c) un 'vecteur' - pourquoi voudriez-vous en construire un en utilisant un 'ArrayList'? * "mais la méthode setModel ne veut rien de tout cela." * Toujours copier/coller une erreur et une sortie d'exception! Il semble que vous essayez de «programmer par magie» et cela ne fonctionne jamais. Essayez de comprendre les messages fournis par le compilateur ou l'exécution. Consultez la documentation de l'API pour connaître les méthodes et les constructeurs utilisés. –

+0

@AndrewThompson Désolé, j'ai oublié de mentionner cela. J'ai déjà fait un montage. Merci pour votre commentaire. Je ne reçois pas d'exception, il ne compilera pas (comme je m'y attendais). Merci pour votre commentaire, cependant. –

+0

* "Tout mon code est sur GutHub" * Peu de gens suivront les liens externes, moins de gens navigueront à travers une base de code complète à la recherche de problèmes. Poster un [mcve] ** ici ** en tant que [edit] à la question. L'édition n'inclut pas le message d'erreur de compilation/collé. –

Répondre

1

Encore une fois: Je veux un ArrayList pour avoir ses objets Person sélectionnables dans un JComboBox

Ce n'est pas comment cela fonctionne. Le ArrayList ne signifie rien à la zone de liste déroulante. Les données doivent être stockées dans le ComboBoxModel.

Vous devez donc ajouter les données de ArrayList au modèle.

Vous écrivez une boucle simple à parcourir la liste de tableaux et vous utilisez une méthode pratique de zone de liste déroulante pour ajouter un élément au modèle:

for (each item in the ArrayList) 
    comboBox.addItem(theItem);