web-dev-qa-db-fra.com

Supprimer tous les éléments d'une liste déroulante en Java

Je dois supprimer tous les éléments de la liste déroulante 

    int itemCount = combo.getItemCount();

    for(int i=0;i<itemCount;i++){
        combo.removeItemAt(0);
     }

Ce code supprimera tous les éléments sauf le dernier. Cela donne une exception NullPointerException. Comment résoudre ce problème?

5
chathura

Le code dans la question fonctionnerait normalement. Cependant, cela ressemble à un problème de thread. Un autre fil peut être jouer avec les éléments.

Cependant, je pense que vous devriez mieux utiliser la méthode removeAllItems();:

combo.removeAllItems();
26
Dan D.

Que diriez-vous JComboBox.removeAllItems () ?

3
Shivan Dragon

En deuxième ligne: 

combo.removeItemAt(0);

Je pense qu'au lieu de 0 il devrait être i.

faites-le dans l'ordre inverse comme:

for(int i=combo.getItemCount()-1;i>=0;i--){
    combo.removeItemAt(i);
}

Mais dans mon cas, combo.removeAllItems() fonctionne bien

1
Asad

utilisez les méthodes .removeAllItems () pour supprimer tous les éléments de la liste déroulante.

1
Kumar

removeAllItems (), il supprime tout, mais après l'ajout de données à la liste déroulante, il ne s'affichera pas là, la nullPointException montrera

0
user2694996

Cela se produit généralement parce que vous avez un événement associé à JComboBox. Le problème est résolu si vous avez un élément de contrôle dans JComboBox à agir, par exemple:

jComboBoxExample.addActionListener (new ActionListener () {
   public void actionPerformed (ActionEvent e) {
     do_run ();
   }
});



public void do_run() {
  int n=jComboBoxPerfilDocumentos.getItemCount(); <--THIS IS THE SOLUTION
  if (n> 0) { 
    String x = jComboBoxPerfilDocumentos.getSelectedItem (). ToString ();
  }
}
0
jose

Utilisez cette option pour supprimer tous les éléments de la liste déroulante:

DefaultComboBoxModel model = (DefaultComboBoxModel) ComboBox.getModel();
model.removeAllElements();
0
SBS

L'hypothèse selon laquelle il est lié à un autre thread n'est pas toujours vraie. Ce peut être le fil lui-même qui cause le problème. 

Cette exception peut se produire car un événement est déclenché lorsqu'un élément combiné est supprimé et que, dans cette méthode de gestion des événements, vous faites toujours référence aux éléments de la liste déroulante.

Par exemple, lorsque vous supprimez un élément (autre que dans actionPeformed ()) dans votre code, le dernier élément d'une liste déroulante avec combo.removeItemAt (0) ou removeAllItems () est toujours déclenché/exécuté. Mais très souvent, la méthode actionPerformed () contient du code pour réagir aux actions de l'utilisateur (l'utilisateur a cliqué quelque part sur la liste déroulante). Ainsi, lorsque le dernier élément a été supprimé, il n'y a plus d'élément dans la liste déroulante et toute référence à un élément ou à un index dans actionPerformed () provoquera une exception.

La solution à cela est de déplacer le code de actionPerformed () vers ex. mouseClicked () ou un autre gestionnaire d'événements en fonction de ce que vous voulez faire.

0
Guido