Java SwingのJCheckBoxで一度に1つの項目だけを選択する方法(ButtonGroupの使い方)
JCheckBoxとは
JCheckBoxはJToggleButtonを継承したSwingコンポーネントで、チェック済みか未チェックのいずれかの状態を持つ小さなボックスとして画面に表示されます。
- ユーザーがJCheckBoxをクリックすると、チェック状態と未チェック状態が自動的に切り替わります。
- チェックボックスの状態が変化すると、ActionListenerやItemListenerが発生し、イベント処理を行うことができます。
- isSelected()メソッドを使うと、そのチェックボックスが選択されているかどうかを判定できます。
- デフォルトの状態では、複数のチェックボックスを同時に選択することが可能です。しかし、ButtonGroupクラスを利用すると、ラジオボタンのように「一度に1つの項目だけ」を選択できるようになります。
ButtonGroupで排他選択を実現する仕組み
複数のJCheckBoxを同じButtonGroupオブジェクトに追加すると、グループ内のチェックボックスは互いに排他的な動作をするようになります。つまり、あるチェックボックスを選択すると、それまで選択されていた他のチェックボックスは自動的に解除されます。これにより、チェックボックスでありながらラジオボタンと同じ選択挙動を実現できます。
コード例
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JCheckBoxGroupTest extends JFrame {
private ButtonGroup checkBoxGroup;
private JCheckBox jcb1, jcb2, jcb3;
private JPanel panel;
public JCheckBoxGroupTest() {
super("JCheckBoxGroup Test");
panel = new JPanel(new GridLayout(3, 0));
jcb1 = new JCheckBox("India", true);
jcb2 = new JCheckBox("England", false);
jcb3 = new JCheckBox("Australia", false);
checkBoxGroup = new ButtonGroup();
// チェックボックスをButtonGroupに追加
checkBoxGroup.add(jcb1);
checkBoxGroup.add(jcb2);
checkBoxGroup.add(jcb3);
panel.add(jcb1);
panel.add(jcb2);
panel.add(jcb3);
add(panel);
setSize(375, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[]) {
new JCheckBoxGroupTest();
}
}
コードのポイント
- 3つのJCheckBox(India / England / Australia)を作成し、初期状態として「India」のみを選択済み(true)にしています。
checkBoxGroup.add()メソッドで各チェックボックスを同一のButtonGroupに登録することで、排他選択が有効になります。- レイアウトには
GridLayout(3, 0)を使用し、チェックボックスを縦方向に3行で並べています。
実行結果

このプログラムを実行すると、3つのチェックボックスが表示され、どれか1つを選択すると、それ以外の選択が自動的に解除されることが確認できます。このように、ButtonGroupクラスを組み合わせるだけで、JCheckBoxでも簡単に「単一選択」のUIを実装できます。
-
JavaのJCheckBoxに境界線(ボーダー)を設定する方法
JCheckBoxとは JCheckBoxはJToggleButtonを拡張したSwingコンポーネントの一つで、チェック済み(ON)と未チェック(OFF)の2つの状態を持つ選択肢を表します。複数のチェックボックスを配置した場合、それぞれが独立して動作するため、任意の組み合わせで同時に選択することが可能です。 境界線を設定する手順 JCheckBoxに境界線(ボーダー)を設定するには、次の2つのメソッドを使用します。 setBorder():コンポーネントに境界線を設定するメソッド。BorderFactoryクラスのファクトリメソッドを使って、さまざまな種類のボーダーを簡単に生成できます。
-
JavaのJMenuからJTabbedPaneに新しいタブを追加する方法
JTabbedPaneとはJTabbedPaneは、JComponentクラスを継承したSwingコンポーネントの一つで、複数のパネルをタブ形式で簡単に切り替えられるようにするUI部品です。各タブには1つのコンポーネントが関連付けられており、そのタブが選択されると対応するコンポーネントが表示されます。JTabbedPaneは、タブが選択されたタイミングでChangeListenerインターフェースを通じてイベントを発生させることができます。JTabbedPaneの主なメソッドには、add()、addTab()、fireStateChanged()、createChangeListener()、