Donc, mon problème est avec JComboBoxs et ActionListeners. Je vais faire un nouveau code simplifié pour essayer de représenter le problème de mon code original. Je veux un JComboBox pour ajouter un JComboBox qui ajoutera alors un troisième JComboBox et ainsi de suite. Chaque fois que je clique dessus, je veux qu'ils changent le contenu en fonction de ce que montre le JComboBox précédent.JComboBox engageant d'autres JComboBoxes ActionListeners
De toute façon mon plus gros problème pour l'instant est que quand je sélectionne quelque chose dans la première "boîte de course" JComboBox. Il ajoute non seulement "infantrybox" au panneau, il ajoute aussi toutes les autres JComboBox que j'ai, au lieu de les ajouter seulement une fois que je sélectionne quelque chose dans JComboBox respectif. C'est comme quand je sélectionne quelque chose dans Racebox, il commence à lire le code de toutes les actions exécutées. Une chose bizarre est que les JComboBoxes sont ajoutés à l'envers après avoir ajouté "racebox". Première: Racebox Deuxième: infantrynmrbox Troisième: infantrybox
...
public void Attacker(){
racebox = new JComboBox(array);
infantrybox = new JComboBox();
infantrynmrbox = new JComboBox();
panel.add(racebox);
panel.revalidate();
panel.repaint();
racebox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JComboBox cb = (JComboBox)e.getSource();
race = (String)cb.getSelectedItem();
infantrybox.removeAllItems();
for(String s : otherarray){
infantrybox.addItem(s);
}
panel.add(infantrybox);
panel.revalidate();
panel.repaint();
}
});
infantrybox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JComboBox cb = (JComboBox)e.getSource();
infantry = (String)cb.getSelectedItem();
infantrynmrbox.removeAllItems();
for(String s : nmr){
infantrynmrbox.addItem(s);
System.out.println(s + " ");
}
panel.add(infantrynmrbox);
panel.revalidate();
panel.repaint();
}
});
infantrynmrbox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JComboBox cb = (JComboBox)e.getSource();
infantrynmr = Integer.parseInt((String)cb.getSelectedItem());
}
});
...
}
Merci pour votre réponse. Une partie de ce code je ne comprends pas du tout. Désolé, mon code est un peu flou. Les boîtes ne sont ajoutées qu'une seule fois dans le code d'origine. Mais le problème est qu'ils sont ajoutés tout à la fois. Je veux qu'ils soient tous ajoutés mais pas tous en même temps. – Richovic
@Richovic, 'Mais le problème est qu'ils sont ajoutés tous en même temps. '- ajouter le ActionListener à la zone de liste déroulante APRÈS que vous ajoutez les données à la zone de liste déroulante. Si vous avez besoin de plus d'aide, postez un [mcve] approprié qui démontre le problème. – camickr
Peu importe, je l'ai maintenant. J'ai utilisé le "setModel (new DefaultComboBoxModel());" à certains égards et je l'ai fait fonctionner. Je vous remercie. – Richovic