~Java4Beginners~
~Java4Beginners~

JRadioButtonMenuItem

Das JRadioButtonMenuItem wird verwendet, wenn wir in unserem Menü eine Auswahl treffen möchten. Im Falle der bisherigen Anwendungen, welche im Bereich Menü hier verwendet wird, wäre dies bei den Einstellungen des Spielfeldes.
Ein JRadioButtonMenuItem kann zwei Zustände annehmen. Aktiviert oder nicht Aktiviert. Bei JRadioButtonMenuItem wird es häufig der Fall sein, dass aus einer Anzahl vor vorgegebenen Auswahlmöglichkeiten nur eine Möglichkeit aktiviert sein soll. Dies erreichen wir dann mit der Klasse ButtonGroup.

Notwendige Imports


import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;

Deklaration


    private JRadioButtonMenuItem jrbmi_gpKlein, jrbmi_gpMittel, jrbmi_gpGross, 
            jrbmi_gpBenutzer, jrbmi_bcKlein, jrbmi_bcMittel, jrbmi_bcGross,
            jrbmi_bcBenutzer;
    private ButtonGroup bg_Gp, bg_Bc;
Für die JRadioButtonMenuItem verwende ich die Präfix jrbmi und für die ButtonGroups die Präfix bg.

Beispiel für das Verwenden von JRadioButtonMenuItem

Ein JRadioButtonMenuItem wird mit new JRadioButtonMenuItem("Bezeichnung") initialisiert. Wenn wir bereits eine Vorauswahl treffen möchten, bzw. müssen, dann können wir einen anderen Konstruktor verwenden, in welchem wir hinter der Bezeichnung mit true sagen, dass dieser Radio-Button bereits ausgewählt sein soll (new JRadioButtonMenuItem("Bezeichnung",true)). Die einzelnen JRadioButtonMenuItem werden dann unserem JMenu hinzugefügt. Soll nur eine Auswahl zugelassen sein, so erzeugen wir mit new ButtonGroup() eine Gruppe, in welcher wir die einzelnen JRadioButtonMenuItem hinzufügen. Für alle in dieser Gruppe dann befindlichen Radio_Buttons gilt: Sollte ein Radio-Button aus dieser Gruppe auf true gesetzt werden (markiert), werden alle anderen auf false (nicht markiert) gesetzt.

        jrbmi_gpKlein = new JRadioButtonMenuItem("Klein (10 x 10 Felder)",true);
        jrbmi_gpMittel = new JRadioButtonMenuItem("Mittel (15 x 15 Felder)");
        jrbmi_gpGross = new JRadioButtonMenuItem("Groß (20 x 20 Felder)");
        jrbmi_gpBenutzer = new JRadioButtonMenuItem("Benutzerdefiniert");
        jrbmi_gpBenutzer.addActionListener(this);
        bg_Gp = new ButtonGroup();
        bg_Gp.add(jrbmi_gpKlein);
        bg_Gp.add(jrbmi_gpMittel);
        bg_Gp.add(jrbmi_gpGross);
        bg_Gp.add(jrbmi_gpBenutzer);

Event-Handling

Wie Sie aus obigen Code-Beispiel ersehen können, wurde jrbmi_gpBenutzer einem ActionListener hinzugefügt. Aus der ButtonGruppe ist dies die einzige Auswahl,, welche einer weitere Aktion erfordert, nämlich das öffnen eines Dialogfensters, um die benutzerdefinierte Spielfeldgröße einzugeben.
Bei den anderen 3 Auswahlmöglichkeiten wird später mit der Mehtode isSelected() ermittelt, ob Sie ausgewählt sind, oder nicht. Für den ActionListener benötigen wir wieder einen implement der Interface-Klasse, sowie den override der einzelnen abstrakten Klassen.

public class mbsweeper extends JFrame implements ActionListener, KeyListener
{
Somit implementieren wir neben den KeyListener auch den Actionlistener.

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        if (e.getSource() == jrbmi_gpBenutzer)
        {
            // Benutzerdeinierte Größe GamePanel
        }
        if (e.getSource() == jrbmi_bcBenutzer)
        {
            // Benutzerdeinierte Größe Bombenanzahl
        }        
    }
Auch hier wird der Methode actionPerormed ein ActionEvent e übergeben. Dies ist der Auslöser des Events. Mit e.getSource() ermitteln wir sozusagen, ob das betreffende Element der Aufrufer des Eventhandlings war. Weiter oben hab ich erwähnt, dass nur 1 RadioButton von den 4en in jeder Gruppe dem ActionEvent hinzugefügt wird, da nur bei einem eine dynamische Eingabe erwartet wird. Abschliessend zeige ich noch den Quellcode, mit welchem wir die restlichen Radio-Buttons verarbeiten.

    private void selectedOptions()
    {
        if(jrbmi_gpKlein.isSelected() == true) gp_x = gp_y = 10;
        if(jrbmi_gpMittel.isSelected() == true)gp_x = gp_y = 15;
        if(jrbmi_gpGross.isSelected() == true) gp_x = gp_y = 20;
        if(jrbmi_bcKlein.isSelected() == true) bc_count = 0.2;
        if(jrbmi_bcMittel.isSelected() == true) bc_count = 0.35;
        if(jrbmi_bcGross.isSelected() == true) bc_count = 0.5;
    }
Diese Methode wird aufgerufen, wenn ein neues Spiel gestartet werden soll.
Um nun die vorgegebenen Bereiche Klein, Mittel und Groß etwas von der Auswahl Benutzerdefiniert optisch zu trennen, verwenden wir einen JSeparator.

        jm_gamePanel.add(jrbmi_gpKlein);
        jm_gamePanel.add(jrbmi_gpMittel);
        jm_gamePanel.add(jrbmi_gpGross);
        jm_gamePanel.add(new JSeparator());
        jm_gamePanel.add(jrbmi_gpBenutzer);
An der Stelle, an welcher wir in unserem JMenu jm_gamePanel nun den Separator setzen (.add.new JSeparator()), erscheint ein Trennstrich.

nach oben Java4Beginners -- Seitenversion 1.01 -- Stand: 2017-05-01