ボタングループを作成し複数のラジオボタンをグループにまとめる

ラジオボタンは一つ一つ独立して選択したり非選択にするのではなく、複数のラジオボタンをグループ化してその中の一つのラジオボタンが選択されるように使います。グループ化するには ButtonGroup クラスのオブジェクトを作成したあとラジオボタンをオブジェクトを追加していきます。ここではボタングループを作成し複数のラジオボタンをグループにまとめる方法について解説します。

(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)

ButtonGroupクラスのオブジェクトを作成する

ラジオボタンをグループにまとめるには最初に ButtonGroup クラスのオブジェクトを作成し、同じグループにまとめるラジオボタンを追加していきます。 ButtonGroup クラスは次のように定義されています。

java.lang.Object
  javax.swing.ButtonGroup

public class ButtonGroup
extends Object
implements Serializable

コンストラクタは1つだけ用意されており次のように定義されています。

public ButtonGroup()

新しいButtonGroupを作成します。

実際の使い方は次のようになります。

ButtonGroup bgroup = new ButtonGroup();

ボタングループのオブジェクトが作成できました。

ボタングループへラジオボタンの追加と削除

ボタングループが作成できましたら、グループにまとめるラジオボタンをグループに追加していきます。ボタングループにラジオボタンを追加するには ButtonGroup クラスで定義されている add メソッドを使います。

public void add(AbstractButton b)

グループにボタンを追加します。

パラメータ:
b - 追加するボタン

引数には AbstractButton クラスまたはそのサブクラスのオブジェクトを指定します。 JRadioButton クラスだけではなく、 JCheckBox クラスや JButton クラスも AbstractButton クラスのサブクラスですが、 JButton クラスは選択/非選択の状態を持ちませんのでグループに追加しても意味がありません。 JCheckBox クラスはグループにまとめるのではなく主に単独で利用されることが多いです。

実際の使い方は次のようになります。

JRadioButton radio1 = new JRadioButton("Apple");
JRadioButton radio2 = new JRadioButton("Orange");

ButtonGroup bgroup = new ButtonGroup();
bgroup.add(radio1);
bgroup.add(radio2);

同じグループにまとめられたラジオボタンは、いずれか一つのラジオボタンしか選択状態にすることはできなくなります。

-- --

ボタングループに追加したラジオボタンをボタングループから削除するには ButtonGroup クラスで定義されている remove メソッドを使います。

public void remove(AbstractButton b)

グループからボタンを削除します。

パラメータ:
b - 削除するボタン

引数には add メソッドの場合と同じく AbstractButton クラスまたはそのサブクラスのオブジェクトを指定します。

実際の使い方は次のようになります。

JRadioButton radio1 = new JRadioButton("Apple");
JRadioButton radio2 = new JRadioButton("Orange");

ButtonGroup bgroup = new ButtonGroup();
bgroup.add(radio1);
bgroup.add(radio2);

bgroup.remove(radio2);

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample3_1.java という名前で保存します。

import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.JPanel;
import javax.swing.ButtonGroup;
import java.awt.Container;
import java.awt.BorderLayout;

class JSample3_1 extends JFrame{
  public static void main(String args[]){
    JSample3_1 frame = new JSample3_1("MyTitle");
    frame.setVisible(true);
  }

  JSample3_1(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JRadioButton radio1 = new JRadioButton("Apple");
    JRadioButton radio2 = new JRadioButton("Orange");
    JRadioButton radio3 = new JRadioButton("Peach");

    ButtonGroup bgroup = new ButtonGroup();
    bgroup.add(radio1);
    bgroup.add(radio2);
    bgroup.add(radio3);

    JPanel p = new JPanel();
    p.add(radio1);
    p.add(radio2);
    p.add(radio3);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }
}

次のようにコンパイルを行います。

javac JSample3_1.java

ボタングループへラジオボタンの追加と削除(1)

コンパイルが終わりましたら実行します。

java JSample3_1

ラジオボタンを 3 つ追加しました。ラジオボタンはすべて同じグループに追加されています。

ボタングループへラジオボタンの追加と削除(2)

ラジオボタンはクリックすることで選択と非選択を切り替えることができますが、グループにまとめられているのでいずれかのラジオボタンを選択状態にすると、同じグループの他のラジオボタンは自動的に非選択となります。

ボタングループへラジオボタンの追加と削除(3)

ボタングループへラジオボタンの追加と削除(4)

ボタングループへラジオボタンの追加と削除(5)

-- --

ボタングループを作成し複数のラジオボタンをグループにまとめる方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。