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

広告

複数のラジオボタンを作成した場合、個々のラジオボタン毎に選択/非選択の状態を持つことができます。つまり複数のラジオボタンを同時に選択状態にすることができます。これはチェックボックスと同じです。ただラジオボタンの主な利用方法は複数の選択肢がある中で一つを選択するために使われます。

そこで複数のラジオボタンをグループにまとめ、グループ内のいずれかのラジオボタンが選択状態になった時は他のラジオボタンを非選択状態にする必要があります。その為に用いられるのがButtonGroupクラスです。

ButtonGroupクラス

ButtonGroupクラスは次のように定義されています。

public class ButtonGroup
extends Object implements Serializable
java.lang.Object
 L javax.swing.ButtonGroup

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

新しい ButtonGroup を作成します。 

まずはButtonGroupクラスのオブジェクトを作成します。次のようになります。

ButtonGroup group = new ButtonGroup();

ボタングループにラジオボタンを追加する

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

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

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

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

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

JRadioButton radio1 = new JRadioButton("既婚");
JRadioButton radio2 = new JRadioButton("独身");

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

上記の場合、2つのラジオボタンが同じグループに含まれることになり、いずれか一つしか選択状態にすることはできなくなります。

ボタングループからラジオボタンを削除する

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

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

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

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

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

JRadioButton radio1 = new JRadioButton("既婚");
JRadioButton radio2 = new JRadioButton("独身");
JRadioButton radio3 = new JRadioButton("不明");

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

group.remove(radio3);

なおremoveメソッドを使っても対象のラジオボタンのオブジェクトが削除されるわけではありません。グループから削除するだけです。

サンプルプログラム

では実際に試してみます。

SSample3_1.java

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

class SSample3_1 extends JFrame{
  public static void main(String args[]){
    SSample3_1 frame = new SSample3_1("タイトル");
    frame.setVisible(true);
  }

  SSample3_1(String title){
    setTitle(title);
    setBounds(100, 100, 300, 250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel p = new JPanel();

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

    JRadioButton radio5 = new JRadioButton("Peach");
    JRadioButton radio6 = new JRadioButton("Apple");
    JRadioButton radio7 = new JRadioButton("Orange");
    JRadioButton radio8 = new JRadioButton("Grape");

    ButtonGroup group = new ButtonGroup();
    group.add(radio5);
    group.add(radio6);
    group.add(radio7);
    group.add(radio8);

    p.add(radio1);
    p.add(radio2);
    p.add(radio3);
    p.add(radio4);
    p.add(radio5);
    p.add(radio6);
    p.add(radio7);
    p.add(radio8);

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

ではコンパイルを行った上で実行してみます。

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

上段と下段にそれぞれ4つのラジオボタンが表示されています。この中で下段の4つのラジオボタンは同じグループに追加されています。

まず上段のラジオボタンをクリックしてみます。上段のラジオボタンはグループに含まれていない為、個々のラジオボタン毎に選択/非選択を設定でき、結果的に複数のラジオボタンで同時に選択することができます。

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

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

それに対して下段のラジオボタンは同じグループに含まれている為、4つのラジオボタンは一つしか選択状態にすることができません。既にいずれかのラジオボタンが選択されている状態で他のラジオボタンを選択状態にすると、自動的に他のラジオボタンは非選択の状態となります。

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

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

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

( Written by Tatsuo Ikura )