Question

Quelqu'un peut s'il vous plaît me expliquer pourquoi ce morceau de code imprime à la console lorsque vous déplacez votre souris sur la case à cocher? Quel est l'événement « changement » qui a lieu?

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        JCheckBox c = new JCheckBox("Print HELLO");
        c.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                System.out.println("HELLO");
            }
        });
        f.getContentPane().add(c);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }

}

NOTE: Je n'utilise un écouteur d'action parce que dans mon programme, je veux être en mesure de le faire:

checkBox.setSelected(boolean)

et avoir mon auditeur averti, qui ne peut être fait avec un écouteur d'action. Alors, est-il possible de désactiver cet événement « souris sur » ou d'une autre manière que je peux mettre en œuvre mon auditeur?

Était-ce utile?

La solution

Vous obtenez des événements sur la souris sur que l'accent a gagné / perdu représente un changement de l'état du composant.

vous pouvez plutôt utiliser un ItemListener qui vous donnera ItemEvents.

  

L'objet qui implémente l'interface ItemListener reçoit ce ItemEvent lorsque l'événement se produit. L'écouteur est épargné les détails de la transformation des mouvements de souris individuelles et les clics de souris, et peut traiter au lieu d'un « significatif » événement (sémantique) comme « élément sélectionné » ou « élément désélectionné ».

Vous pouvez l'ajouter à votre case avec la méthode addItemListener () dans la classe AbstractButton. Il suffit de remplacer addChangeListener par ceci:

c.addItemListener(new ItemListener() {

    public void itemStateChanged(ItemEvent e) {
        System.err.println(e.getStateChange());
    }
});

Autres conseils

Utilisez c.setRolloverEnabled(false) `et vous ne recevrez pas d'événement pour les mouvements de la souris.

L'état de la case à cocher (même juste le modèle de case à cocher) change en fonction si elle a la souris dessus ou non. Ainsi, un événement de changement d'état doit être prévu.

Alors, il suffit de vérifier en arrière pour voir dans quel état la case à cocher est et mise à jour en conséquence. Il est préférable d'aller directement pour le modèle, plutôt que d'utiliser l'interface du composant « pléthorique ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top