Gyakorlati alapok IV.

Végre ablakozunk! (AWT, Swing, JavaFX)

 

Radiobutton


A következő komponensünk a rádiógomb (radiobutton)…

 

www.informatika-programozas.hu - Radiobutton


...amelyet arról neveztek el, hogy némiképp hasonlít a régi rádiók csatornakereső, illetve hangerőgombjaihoz:

 

www.informatika-programozas.hu - Radiobutton


A radiobutton valójában a többszörös választási lehetőség egyik lehetséges objektuma, ebből következően önmagában, azaz egyetlen példányban nem sokat ér. Alább például egy egyszerű metronómnál tanulmányozhatjuk:

 

www.informatika-programozas.hu - Metronóm


Létrehozása a már eddig megtanult eljárások szerint történik…

JRadioButton radioButton = new JRadioButton();

...de nyilvánvalóan érdemes egyszerre több radiobutton-t is létrehoznunk:

JRadioButton radioButton1 = new JRadioButton();
JRadioButton radioButton2 = new JRadioButton();
JRadioButton radioButton3 = new JRadioButton();


Az első különbség az eddigi komponensekhez képest, hogy a létrehozott radiobutton-csoportot további rutinokkal össze is kell kapcsolnunk (group), másként egymástól függetlenül fognak működni (hiszen legtöbbször ez a szándék ezen komponensek használata esetén). Ezt a ButtonGroup() objektum segítségével tehetjük meg:

ButtonGroup radioButtonGroup = new ButtonGroup();
radioButtonGroup.add(radioButton1);
radioButtonGroup.add(radioButton2);
radioButtonGroup.add(radioButton3);


Ettől függetlenül mindegyik radiobutton-t külön-külön kell a frame-hez hozzáadnunk:

frame.add(radioButton1);
frame.add(radioButton2);
frame.add(radioButton3);


Ha a csoportosítást nem tesszük meg, mindegyik radiobutton kijelölhető:

 

www.informatika-programozas.hu - Radiobutton
 

Összekapcsolás után a radiobutton-ok összehangoltan fognak működni, például nem lehetséges egyszerre többet is kijelölni belőlük. A radiobutton-ok kezdőértékeit (jelölt - nem jelölt) a TRUE és FALSE értékekkel állíthatjuk be:

radioButton1.setSelected(true);
radioButton2.setSelected(false);
radioButton3.setSelected(false);


Természetesen a radiobutton, mint “klasszikus” Java-komponensnek számos további, jól konfigurálható tulajdonsága (metódusa) is van; ezek közül sokkal más komponenseknél már találkoztunk, például:

A többszörös választási lehetőség egyúttal új mozzanatot hoz az eseménykezelésbe, hiszen már nem egy, hanem több lehetséges esemény közül kell választanunk. Ez az isSelected() függvény segítségével történik, például:

private void buttonAction() {
    if(radioButton1.isSelected()) {
        label.setText("1. radiobutton was selected");
    }
    if(radioButton2.isSelected()) {
        label.setText("2. radiobutton was selected");
    }
    if(radioButton3.isSelected()) {
        label.setText("3. radiobutton was selected");
        }
    }
}


Az alábbi miniprogram demonstrálja a fenti rutinokat működés közben: a button megnyomására kiírja, hogy előzetesen melyik radiobutton lett kiválasztva:
 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 



 

 

 

 

Main.java

 

public class Main {

public static void main(String[] args) {
    Window window = new Window();
    }
}


Window.java

import java.awt.*;
import javax.swing.*;

class Window extends JFrame {
    JFrame frame = new JFrame();
    JButton button = new JButton("Which one did you choose?");
    JLabel label = new JLabel();
    JRadioButton radioButton1 = new JRadioButton();
    JRadioButton radioButton2 = new JRadioButton();
    JRadioButton radioButton3 = new JRadioButton();

Window() {
    super();
    button.setBounds(100, 100, 200, 20);
    button.addActionListener(event -> buttonAction());

    label.setBounds(100, 150, 200, 25);
    label.setFont(new Font("Serif", Font.PLAIN, 18));
    label.setText("Radio buttons");

    radioButton1.setText("1.button");
    radioButton2.setText("2.button");
    radioButton3.setText("3.button");
    ButtonGroup radioButtonGroup = new ButtonGroup();
    radioButtonGroup.add(radioButton1);
    radioButtonGroup.add(radioButton2);
    radioButtonGroup.add(radioButton3);

    radioButton1.setSelected(true);
    radioButton2.setSelected(false);
    radioButton3.setSelected(false);

    radioButton1.setBounds(100,20,100,20);
    radioButton2.setBounds(100,40,100,20);
    radioButton3.setBounds(100,60,100,20);

    frame.add(button);
    frame.add(label);
    frame.add(radioButton1);
    frame.add(radioButton2);
    frame.add(radioButton3);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Center center = new Center();

    frame.setSize(400, 300);
    frame.setTitle("PJP - Penzes Java Programming");
    center.setCenter(frame);
    frame.setLayout(null);
    frame.setVisible(true);
}

private void buttonAction() {
    if(radioButton1.isSelected()) {
        label.setText("1. radiobutton was selected");
    }
    if(radioButton2.isSelected()) {
        label.setText("2. radiobutton was selected");
    }
    if(radioButton3.isSelected()) {
        label.setText("3. radiobutton was selected");
        }
    }
}
 

Center.java

import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;

public class Center {

void setCenter(JFrame frame) {
    Point center = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
    int x = (int) center.getX() - (frame.getWidth() / 2);
    int y = (int) center.getY() - (frame.getHeight() / 2);
    Point ablakCenter = new Point(x, y);
    frame.setLocation(ablakCenter);
    }
}

 

Végeredmény (a monitor közepén / felbontástól függetlenül/):


www.informatika-programozas.hu - Radiobutton