2010-09-24 1 views
0

Cette JComboBox Java Swing est modifiée en fonction des modifications apportées à la configuration du système. Dans l'image d'exemple, "Appuyer pour sélectionner" est le cas où rien n'est sélectionné et qu'il y a une "Unité de test" dans la configuration, mais "Appuyer pour sélectionner" s'affiche deux fois dans la liste déroulante. L'élément supplémentaire "Press to Select" se comporte comme l'élément 0, donc il est fonctionnel, mais il a l'air de merde de cette façon. Des idées?Résolu: Pourquoi JComboBox semble-t-il ajouter plusieurs instances d'éléments?

public class Controller extends javax.swing.JFrame implements Observer { 
    ... 
    public void update(Observable o, Object arg) { 
     jComboBox.removeAllItems(); 
     jComboBox.addItem("Press to Select"); 
     String[] names = Configuration.getNames(); 
     for (String n : names) { 
      jComboBox.addItem(n); 
     } 
     ... 

alt text

+1

Etes-vous sûr de ne pas l'avoir ajouté deux fois par accident, en mettant un point d'arrêt dans 'JComboBox # addItem'? Avez-vous un rendu personnalisé ou quelque chose comme ça? –

+0

F! Oui. J'ai tapé sur le débogueur essayant de le trouver pendant un certain temps, mais oui, il était là. J'apprends toujours mon chemin autour de l'EDI NetBeans. Merci. – jacknad

Répondre

0

Erreur grave. L'ajouter deux fois (@Geoffrey). Prendre trop de temps pour trouver le 2e ajout dans une autre classe. Ma grand-mère m'a prévenu de ne pas vieillir.

0

La méthode est-update appelé par le thread de répartition des événements ou par un autre thread? (notez SwingUtilities.isEventDispatchThread() si vous n'êtes pas sûr). S'il s'agit d'un autre thread, déplacez votre mise à jour dans un Runnable et utilisez SwingUtilities.invokeLater() pour planifier son exécution sur l'EDT. Essayez la setSelectedItem(null) dans le cadre de votre mise à jour.