チェックボックス JCheckBox
チェックボックスを実装しているのは JCheckBox クラスです。
JCheckBox オブジェクトを作成して、コンテナに add すれば GUI に表示されます。
ラベルは下の例のようにコンストラクタに文字列を渡すか、あるいはオブジェクトを作成してから setText メソッドを呼ぶことで設定できます。
チェックボックスのチェックの状態は isSelected メソッドで取得できます。チェックされているときは true を返し、チェックされていない場合は false を返します。
チェックのアクションリスナーは、JButton などと同様に addActionListener メソッドで ActionListener インターフェイスを実装したクラスのインスタンスをセットします。
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.JCheckBox;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class JCheckBoxTest1 extends JFrame {
JCheckBox chk1;
public JCheckBoxTest1() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setSize(300, 100);
chk1 = new JCheckBox("Checkbox 1");
chk1.addActionListener(new CheckAction());
add(chk1);
}
class CheckAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Checked: " + chk1.isSelected());
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JCheckBoxTest1 app = new JCheckBoxTest1();
app.setVisible(true);
}
});
}
}
アクションリスナーで、チェック状態の有無によって直ちに反応したい場合の方法として、一つ目の方法として上の方法です。 JCheckBox のクラスフィールドを作成し、そこにチェックボックスのインスタンスを設定し、アクションリスナの actionPerformed メソッドでフィールドから参照する方法です。
もうひとつは、インスタンスに名前を割り当て、アクションリスナーにてその名前を参照する方法です。
名前は setName メソッドで割り当てることができます。
ちなみに setName メソッドは、javax.swing.JComponent の親の java.awt.Component のメソッドなので JComponent 全てに共通して利用可能です。
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.JCheckBox;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class JCheckBoxTest1 extends JFrame {
public JCheckBoxTest1() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setSize(300, 100);
JCheckBox chk1 = new JCheckBox("Checkbox 1");
chk1.addActionListener(new CheckAction());
chk1.setName("Foo");
add(chk1);
}
class CheckAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JCheckBox s = (JCheckBox) 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() {
JCheckBoxTest1 app = new JCheckBoxTest1();
app.setVisible(true);
}
});
}
}
複数のチェックボックスが似た動作をする場合には、ひとつのアクションリスナーに処理を実装するほうが望ましいので、 後者を選択するとよいでしょう。