Frage

Kann bitte jemand mir erklären, warum dieses Stück Code gibt an die Konsole aus, wenn Sie die Maus über das Kontrollkästchen bewegen? Was ist die „Veränderung“ Ereignis, das stattfindet?

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);
    }

}

Hinweis: Ich habe keine Aktion Hörer verwenden, weil in meinem Programm, das ich zu tun in der Lage sein wollen:

checkBox.setSelected(boolean)

und habe meine Zuhörer mitgeteilt, die mit einer Aktion Hörer getan kann nicht sein. So ist es eine Möglichkeit, um diese „Maus über“ Ereignis zu deaktivieren oder eine andere Art, wie ich meine Zuhörer umsetzen kann?

War es hilfreich?

Lösung

Sie erhalten Ereignisse auf der Maus über als Fokus gewonnen / verloren eine Änderung des Status der Komponente darstellt.

Stattdessen könnten Sie eine ItemListener verwenden, die Sie ItemEvents geben.

  

Das Objekt, das die ItemListener-Schnittstelle implementiert wird dieses ItemEvent, wenn das Ereignis eintritt. Der Hörer wird geschont die Details der Verarbeitung einzelne Mausbewegungen und Mausklicks und kann stattdessen ein „sinnvolles“ (semantisches) Ereignis wie „Element ausgewählt“ oder „Punkt abgewählt“ verarbeiten.

Sie können es mit dem addItemListener () -Methode in der Abstract Klasse zu Ihrem Kontrollkästchen hinzuzufügen. Ersetzen Sie einfach addChangeListener mit diesem:

c.addItemListener(new ItemListener() {

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

Andere Tipps

Mit c.setRolloverEnabled(false) `und Sie keine Veranstaltung für die Mausbewegungen erhalten.

Der Zustand der Kontrollkästchen (auch nur das Kontrollkästchen Modell) ändert sich in Abhängigkeit davon, ob sie mit der Maus über sie hat oder nicht. So soll ein Zustandsänderungsereignis zu erwarten.

So überprüfen Sie nur zurück, um zu sehen, was das Kontrollkästchen angeben, ist in und entsprechend aktualisieren. Es ist besser, gerade für das Modell zu gehen, anstatt die „aufgeblähte“ Komponentenschnittstelle verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top