37 votes

Pourquoi itemStateChanged sur JComboBox est appelé deux fois lorsqu'il est modifié ?

J'utilise une JComboBox avec un ItemListener sur celle-ci. Lorsque la valeur est modifiée, l'événement itemStateChanged est appelé deux fois. Au premier appel, l'événement ItemEvent montre l'élément sélectionné à l'origine. Au deuxième appel, il affiche l'élément qui vient d'être sélectionné par l'utilisateur. Voici un peu de code de test :

public Tester(){

    JComboBox box = new JComboBox();
    box.addItem("One");
    box.addItem("Two");
    box.addItem("Three");
    box.addItem("Four");

    box.addItemListener(new ItemListener(){
        public void itemStateChanged(ItemEvent e){
            System.out.println(e.getItem());
        }
    });

    JFrame frame = new JFrame();
    frame.getContentPane().add(box);
    frame.pack();
    frame.setVisible(true);
}

Ainsi, lorsque j'ai modifié la boîte combo une fois de "Un" à "Trois", la console s'affiche :

One
Three

Y a-t-il un moyen de savoir, en utilisant l'ItemEvent, qu'il s'agit du deuxième élément (c'est-à-dire l'élément sélectionné par l'utilisateur) ? Et si quelqu'un peut expliquer pourquoi il est appelé deux fois, ce serait bien aussi !

Merci

3voto

Hussain Points 21

Le code est :

public class Tester {

    private JComboBox box;

    public Tester() {

        box = new JComboBox();
        box.addItem("One");
        box.addItem("Two");
        box.addItem("Three");
        box.addItem("Four");

        box.addItemListener(new ItemListener() {

            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == 1) {

                    JOptionPane.showMessageDialog(box, e.getItem());
                    System.out.println(e.getItem());
                }
            }
        });

        JFrame frame = new JFrame();
        frame.getContentPane().add(box);
        frame.pack();
        frame.setVisible(true);
    }
}

-4voto

Abdullah Points 19

JComboBox.setFocusable(false) fera l'affaire.

0 votes

Cela ne répond pas à la question. IT obtient toujours le même résultat : deux événements se sont produits.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X