こんにちは。「Javaを復習する初心者」です。
SwingでJToggleButton、JCheckBox、JRadioButtonを扱ってみました。
SwingにはJButtonクラスの他もボタンを扱うクラスがあります。ここではJToggleButton、JCheckBox、JRadioButtonの基本的な使い方を紹介します。
以下のプログラムを雛形として使います。
import javax.swing.JFrame;
public class Test extends JFrame {
public static void main(String[] args) {
new Test();
}
public Test() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(350, 250);
init();
setVisible(true);
}
private void init() {
// 設置処理
}
}
JToggleButton
JToggleButtonはJButtonと似ていますが、ボタンの押下で以下の2つの状態にすることができます。
- 押下された状態
- 押下されていない状態
JButtonの場合はマウスでボタンを押下すると押下状態になり、自動的に押下されてない状態になります。JToggleButtonではON/OFFのスイッチのような使い方ができます。
JToggleButton#isSelectedメソッドでボタンが押下状態か取得することができます。以下のプログラムではJToggleButtonとJButtonをJFrameに追加しています。JButtonを押下するとコンソールにJToggleButtonの押下状態を出力します。
private void init() {
// 設置処理
setLayout(new FlowLayout());
JToggleButton toggleButton = new JToggleButton("Test ToggleButton");
add(toggleButton);
JButton button = new JButton("JButton");
add(button);
button.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println(toggleButton.isSelected());
}
});
}
キャプチャ | isSelected |
---|---|
![]() | false |
![]() | true |
isSelectedメソッドはボタンが押下されている場合、trueを返却します。このメソッドはAbstractButtonから継承されたメソッドです。
JCheckBox
JCheckBoxはJToggleButtonを継承したクラスです。レ点用の四角が表示されます。
以下が使用例です。JCheckBoxオブジェクトを2つ生成し、JFrameに追加しています。JButtonオブジェクトをを追加し、ボタン押下時にコンソールにJCheckBoxそれぞれの押下状態を表示します。
JCheckBox checkBox1 = new JCheckBox("JCheckBox1");
add(checkBox1);
JCheckBox checkBox2 = new JCheckBox("JCheckBox2");
add(checkBox2);
JButton button = new JButton("JButton");
add(button);
button.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println("checkBox1 is Selected: " + checkBox1.isSelected());
System.out.println("checkBox2 is Selected: " + checkBox2.isSelected());
}
});
初期状態ではチェックはついていません。以下はcheckBox2にチェックをいれた場合でJButtonを押下したときの実行結果です。
checkBox1 is Selected: false
checkBox2 is Selected: true
JRadioButton
JRadioButtonはJToggleButtonを継承しています。ボタン押下用の○が表示されます。複数のボタンを排他的なラジオボタンのグループとして扱うためにはButtonGroupクラスを使います。選択されているボタンはButtonModel#getSelectionメソッドで取得できます。ただし、このメソッドの戻り値はButtonModelインターフェースです。ButtonModel#getActionCommandメソッドでボタンのアクション・コマンド文字列を取得することができます。
以下の例ではJRadioButtonオブジェクトを2つ生成し、アクションコマンドをそれぞれに設定しています。また、それぞれをひとつのグループに追加しています。JButtonオブジェクトを生成し、押下時に選択されているJRadioButtonのアクション・コマンドをコンソールに出力します。初期状態ではJRadioButtonは未選択なのでnullチェックをしています。
private void init() {
// 設置処理
setLayout(new FlowLayout());
JRadioButton radioButton1 = new JRadioButton("JRadioButton1");
radioButton1.setActionCommand("R1");
add(radioButton1);
JRadioButton radioButton2 = new JRadioButton("JRadioButton1");
radioButton2.setActionCommand("R2");
add(radioButton2);
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(radioButton1);
buttonGroup.add(radioButton2);
JButton button = new JButton("JButton");
add(button);
button.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
ButtonModel buttonModel = buttonGroup.getSelection();
System.out.println(buttonModel == null ? "未選択" : buttonModel.getActionCommand());
}
});
}
キャプチャ | 出力 |
---|---|
![]() | 未選択 |
![]() | R1 |
![]() | R2 |
JRadioButtonをグループに追加すると排他的なボタンになるため、一度どれかを選択するとどれか一つが選択された状態にすることになります。つまり、すべてを未選択の状態に戻すことができません。JRadioButtonをグループに追加しない状態で使うとチェックボックスと同じように使えます。ボタン押下で未選択状態にすることが可能です。