Lernpfad GUI-Programmierung mit dem Java-Editor

3.2 RadioButton erstellen

Zunächst müssen die Buttons, die Checkbox und falls noch vorhanden, das Label, mit dem wir eine Meldung bei mehrfachem Klicken des gleichen Buttons ausgegeben haben, gelöscht werden. Dies ist über das Formularfenster einfach möglich: entsprechende Komponente markieren und löschen. Wie bei vielen Automatismen kann es jedoch sein, dass nicht alle betreffenden Stellen im Quelltext gelöscht werden (Beispielsweise die actionPerformed-Methoden der Butttons). Also nach dem Löschen übersetzen. Sollten Fehlermeldungen auftreten, insbesondere mit "symbol not found" , dann sind noch Methodenaufrufe von gelöschten Komponenten übrig geblieben. Diese bitte entferenn.

Danach erzeugt man einen zwei RadioButtons über die AWT-Symbolleiste mit Hilfe des Symbols und gibt Ihnen geeignete Namen (z. B. radioButtonSommerzeit und radioButtonWinterzeit) und Beschriftungen. Da über die Buttons eine Eingabe erfolgen soll, muss der Wert von Enabled auf true gesetzt werden.

Die Attribute und die Setter- und Getter-Methoden sind identisch zu denen der Checkbox. Hier sind die wichtigsten Attribute nochmal im Überblick

  • Background: Die Hintergrundfarbe
  • Enabled: Falls auf true gesetzt, sind Eingaben durch den Benutzer möglich
  • Font: Hier öffnet sich ein Fenster, über das die Werte der Attribute Schriftart, Schriftgröße, Schriftfarbe etc. gesetzt werden können.
  • Label: Die Beschriftung bei der Erzeugung des Objekts
  • State: Information, ob die Checkbox gesetzt ist oder nicht

Wer nun den Zwischenstand testet wird sich über zwei Dinge wundern:

  • Die Form der Radiobuttons ist nicht gewohnt rund, sondern quadratisch wie die Checkbox.
  • Durch Klicks kann man erreichen, dass entweder beide (siehe Abbildung oben) oder keiner der beiden Radiobuttons gesetzt ist. Das darf nicht sein, denn entweder es ist Sommer- oder Winterzeit.

Dieses unpassende Verhalten/Aussehen lässt sich dadurch abschaffen, indem man ein Objekt der Klasse CheckboxGroup erzeugt und die beiden Radiobuttons dieser Checkbox-Gruppe zuordnet. Innerhalb einer Checkbox-Gruppe darf nur ein einziger Radiobutton ausgewählt sein.

Der Java-Editor unterstützt das Vorgehen wie folgt:

  1. Über den Button in der AWT-Symbolleiste lässt sich ein Objekt der CheckboxGroup erzeugen. Achtung nicht wundern, dieses Objekt ist im Formular-Fenster nicht sichtbar. Bitte im Quelltext überprüfen, ob eine neues Referenzattribut hinzugekommen ist und welchen Namen es hat. Der Java-Editor müsste eine Zeile der folgenden Art ergänzt haben
    Z. B. private CheckboxGroup checkboxGroup1 = new CheckboxGroup();
  2. Um nun unsere Radiobuttons dieser Checkbox-Gruppe zuzuordnen, kann man entweder im Konstruktor die Zeilen
    radioButtonSommerzeit.setCheckboxGroup(checkboxGroup1);
    radioButtonWinterzeit.setCheckboxGroup(checkboxGroup1);
    hinzufügen oder beim Objektinspektor unter CheckboxGroup den Namen der Checkbox-Gruppe eingeben (siehe Abbildung rechts).

Die Klasse CheckboxGroup stellt folgende wichtige Methoden zur Verfügung:

  • Checkbox getSelectedCheckbox()
    gibt das aktuell ausgewählte Checkbox-Objekt zurück
  • void setSelectedCheckbox(Checkbox c)
    wählt das angegebene Checkbox-Objekt aus in der CheckboxGroup
  • Hat man die Checkboxgroup mit dem JavaEditor erzeugt, wurde in der GUI-Klasse noch die Methode
    String getSelectedRadioButton(CheckboxGroup cg)
    generiert, mit der man den Label des ausgewählten Radiobuttons abfragen kann.

Jetzt müssen die Radiobuttons nur noch ins Projekt eingebunden werden. Dies bedeutet im Konstruktor muss der Wert der Sommerzeit abgefragt und entsprechend der passende Radiobutton gesetzt werden. Und bei einem Mausereignis auf den Sommer- bzw. Winterzeit-Radiobuttton muss die entsprechende Zeitumstellung erfolgen. Zuständig dafür ist die itemStateChanged-Methode (vgl. auch Erläuterung bei der Checkbox)

Das ergebnis sollte folgende funktioniernde graphische Benutzeroberfläche geben: