ラジオボタン JRadioButton
ここでは GUI の基本コンポーネントであるラジオボタンの使い方を説明します。
ラジオボタンというのは一般的に、選択肢が複数ある時に、ひとつを選択すると他の選択肢が非選択状態になるようなユーザーインターフェイスを指します。 例えば自動車のカーステレオについている実際のラジオでは、聴きたい放送局をひとつだけ選ぶことができますよね。 そうしたところからこの名前がついています。
Swing の GUI コンポーネントとしては、JRadioButton という名前でラジオボタンが使えます。
さっそく JRadioButton を使ってみましょう。ここで作るサンプルコードは次のようになります。
ロサンゼルス (Los Angeles) かホノルル (Honolulu) か、という選択肢があって、どちらか一つが選べます。
初期状態では Los Angeles が選択された状態になっていて、選択を切り替える度にコンソールにどちらを選んだのか、その都度表示します。
JRadioButton の使い方
JRadioButton は、グループ化して使います。 どれかを選択したら「その他」を非選択にする必要があるので、複数の選択肢をまとめ上げる必要があるからです。
グループ化するには、ButtonGroup というオブジェクトを使います。
同じ ButtonGroup に追加されているラジオボタン同士はグループ化され、どれかが選択されると残りは非選択状態になります。
アクションリスナーでどのラジオボタンが選択されたのか識別するために、ここではラジオボタンに名前を設定しています。 ラジオボタンの setName メソッドで名前を設定し、getName メソッドで名前を取得できます。
package com.keicode.java.testapp;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
@SuppressWarnings("serial")
public class JRadioButtonTest extends JFrame {
public JRadioButtonTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setSize(300, 100);
ButtonGroup vacationGroup = new ButtonGroup();
JRadioButton rad1 = new JRadioButton("Los Angeles", true);
JRadioButton rad2 = new JRadioButton("Honolulu");
rad1.addActionListener(new CheckActionListener());
rad1.setName("LA");
vacationGroup.add(rad1);
rad2.addActionListener(new CheckActionListener());
rad2.setName("Honolulu");
vacationGroup.add(rad2);
add(rad1);
add(rad2);
}
class CheckActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JRadioButton s = (JRadioButton) e.getSource();
System.out.println("Selected: " + s.isSelected());
System.out.println("Name: "+ s.getName());
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JRadioButtonTest app = new JRadioButtonTest();
app.setVisible(true);
}
});
}
}
上記のコードで、上のスクリーンショットのようなプログラムが出来上がります。