wake-up-neo.com

Erkennen einer JRadioButton-Zustandsänderung

Wie kann ich feststellen, wenn ein JRadioButton beim Klicken mit der Maus von "nicht ausgewählt" auf "ausgewählt" geändert wird? Ich habe versucht, einen ActionListener für die Schaltfläche zu verwenden, der jedoch jedes Mal ausgelöst wird, wenn der Radiobutton angeklickt wird, nicht nur, wenn der Status in "ausgewählt" geändert wird.

Ich habe daran gedacht, eine boolesche Variable beizubehalten, die den Status der Schaltfläche speichert, und im ActionListener zu testen, ob sie ihren Status ändern soll, aber ich frage mich, ob es eine viel bessere oder sauberere Lösung gibt.

28
cgull

Siehe JRadioButton. addItemListener ()

BEARBEITEN: Es ist unwahrscheinlich, dass Sie einen changeListener verwenden möchten, da er mehrmals pro Klick ausgelöst wird. Ein itemListener wird nur einmal pro Klick ausgelöst. Siehe hier

EDIT2: Um dies zu erweitern, wird ein actionListener auf einem jradioButton jedes Mal ausgelöst, wenn ein Benutzer darauf klickt, auch wenn er bereits ausgewählt ist. wenn es das ist, was du willst, in Ordnung, aber ich finde es nervig. Ich möchte nur benachrichtigt werden, wenn es ausgewählt oder deaktiviert ist.

Ein ChangeListener wird für alle möglichen Zwecke ausgelöst, dh der Listener erhält pro Klick 5 oder mehr Ereignisse. Nicht gut.

Ein Itemlistener löst only aus, wenn sich der ausgewählte oder nicht ausgewählte Zustand ändert. Dies bedeutet, dass ein Benutzer mehrmals darauf klicken kann und es nicht ausgelöst wird, wenn es sich nicht ändert. In Ihrer Handler-Methode müssen Sie einen if-Block auf SELECTED- oder DESELECTED-Status prüfen lassen und alles tun, was sich dort befindet:

@Override
public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        // Your selected code here.
    }
    else if (e.getStateChange() == ItemEvent.DESELECTED) {
        // Your deselected code here.
    }
}

Es funktioniert einfach besser, weil Sie wissen, dass, wenn Sie sich in der Methode befinden, der Radioknopf entweder gerade ausgewählt oder abgewählt wurde, nicht dass der Benutzer aus unbekannten Gründen nur an der Schnittstelle knallt. 

47
Nemi

Ich glaube, Sie möchten eine ChangeListener-Implementierung hinzufügen.

0
Rob Di Marco