チェックボックス 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);
			}
		});
	}
}

複数のチェックボックスが似た動作をする場合には、ひとつのアクションリスナーに処理を実装するほうが望ましいので、 後者を選択するとよいでしょう。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門