Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
Radiobutton
A következő komponensünk a rádiógomb (radiobutton)…
...amelyet arról neveztek el, hogy némiképp hasonlít a régi rádiók
csatornakereső, illetve hangerőgombjaihoz:
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:
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ő:
Ö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:
-
setText() - a radiobutton felirata,
-
setBounds() - a radiobutton pozíciója a frame-en belül,
-
stb.
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:
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/):