2012-12-16 1 views
1

J'ai un HashMap qui ressemble à ceci:Reliure deux JComboBoxes

HashMap<CauseCategory, ArrayList<Cause>> data; 

CauseCategory et la cause ne sont que des classes avec un champs d'instance de chaîne en eux, fixés par leurs constructeurs ou méthodes setter (le cas échéant). Maintenant, le système récupère un tas de catégories de causes de la base de données, et pour chaque catégorie de causes, il y a un certain nombre de causes qui y sont associées. Supposons que nous ayons une catégorie de cause «technique», plusieurs causes y sont associées, telles que «problème d'encapsulation», «erreur de traitement», «erreur de calcul erroné», etc.

Je nourris ma classe GUI cette HashMap, qui a deux JComboBoxes (Cause Categories + Cause Descriptions).

Comment lier la première liste déroulante (catégories) de sorte que lorsque je sélectionne un élément de cette liste, il affiche uniquement les causes qui lui sont associées dans la deuxième liste déroulante (descriptions de cause)?

EDIT: Il peut être plus simple de penser à l'hashmap comme ceci:

HashMap<String, ArrayList<String>> data; 

Répondre

3

Ajouter un ActionListener à la première zone de liste déroulante. Chaque fois que la sélection change, un ActionEvent sera déclenché et le ActionListener sera ainsi appelé. À partir de l'écouteur, récupérez la catégorie nouvellement sélectionnée dans la zone de liste déroulante, puis récupérez les causes associées dans la carte et modifiez les éléments affichés dans la deuxième zone de liste déroulante. Comme d'habitude: link to the swing tutorial.

+0

Oh mon Dieu, pourquoi n'y ai-je pas pensé? Merci beaucoup. – Volatile

+1

Il existe un exemple connexe [ici] (http://stackoverflow.com/a/3191882/230513). – trashgod