JPopup

Résolu
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 24 avril 2007 à 18:20
cs_Yenapa Messages postés 67 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 26 juin 2009 - 26 avril 2007 à 11:50
Salut tous:

J'ai un objet JPopupMenu dans lequel j'affiche des objets instance de la classe JMenuItem je veux faire le ménage de ce JPopupMenu donc je fais:

JPopupMenu popup = new JPopupMenu ();

// AJOUTER DES JMENUITEM ICI

int count;
if ((cout = popup.getComponentsCount ()) > 0) {
    for (int i = 0; i < count; ++i) {
        popup.remove (i);
    }
}

Ceci déclenche toujours une exception IndexOutOfBoundsException, ceci ne doit pas se produire car quand je fais la trace de mon programme je trouve que ce popup a  4 éléments mais dès l'indice 2 cette exception est levée.

8 réponses

gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
24 avril 2007 à 18:57
Salut,

A tout hasard, es ce que le remove(0) n'a pas pour effetde bord de tout décaler ?

Ainsi, pour ton exemple 4/2

0,1,2,3 => supression de 0
0,1,2 => supression de 1
0,1 => supression de 2 => ArrayIndexOutOfBounds

J'ai jamais utiliser de JPopupMenu, mais le matheux qui dort en moi à tilter ça ^^

Essaie de faire un popup.remove(0); dans ta boucle, pour voir

gmi19oj19
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
24 avril 2007 à 19:06
Les indices se décalent.
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
24 avril 2007 à 19:22
c'est pour cette raison que pour une suppression par index, il faut toujours le faire dans le sens inverse :

for (int i = count; i > 0; --i) {
        popup.remove (i);
    }

C'est pas forcément un bug de java, c'est pareil dans n'importe quel autre langage (logique d'ailleurs !), c'est un problème de programmation bien connu dont tout le monde se trouve confronté un jour.
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
24 avril 2007 à 21:05
Petite rectification:


for (int i = count-1; i > 0; --i) {
        popup.remove (i);
}
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
24 avril 2007 à 18:34
La raison pour laquelle je fais ce ménage (clear) et que j'affiche le résultat de ma recherche dans ce popup, donc je dois effacer les traces des opérations antérieures.
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
24 avril 2007 à 18:49
Donc si je ne me trompe pas c'est une bug au niveau de la méthode JPopuMenu.remove
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
24 avril 2007 à 18:53
0
cs_Yenapa Messages postés 67 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 26 juin 2009
26 avril 2007 à 11:50
ou alors

while (count > 0) popup.remove (0);
0
Rejoignez-nous