WisdomSoft - for your serial experiences.

10.2 チェックメニュー

チェックボックスを表示する、チェック機能付きのメニュー項目を表示します。

10.2.1 選択可能なメニュー項目

AbstractButton は setSelected() メソッドを使ってボタンを選択状態に設定することができます。しかし、MenuItem メニュー項目は 2 状態ボタンではないので、選択状態を維持することができません。JCheckBox クラスのような働きをするメニュー項目を実現するには javax.swing.JCheckBoxMenuItem クラスを使います。

javax.swing.JCheckBoxMenuItem クラス
java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--javax.swing.JComponent
                    |
                    +--javax.swing.AbstractButton
                          |
                          +--javax.swing.JMenuItem
                                |
                                +--javax.swing.JCheckBoxMenuItem
public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants, Accessible

JCheckBoxMenuItem クラスは、チェックボックスがメニュー項目に付属し、項目を選択すると選択状態が反転します。選択状態は AbstractButton クラスのメソッドから制御することができます。

表1 JCheckBoxMenuItem クラスのコンストラクタ
コンストラクタ 解説
public JCheckBoxMenuItem() テキストおよびアイコンなしの JCheckBoxMenuItem を生成する。
public JCheckBoxMenuItem(Icon icon) アイコン付きの JCheckBoxMenuItem を生成する。
public JCheckBoxMenuItem(String text) テキスト付きの JCheckBoxMenuItem を生成する。
public JCheckBoxMenuItem(Action a) Action からプロパティを取得する JCheckBoxMenuItem を生成する。
public JCheckBoxMenuItem(String text, Icon icon) テキストおよびアイコン付きの JCheckBoxMenuItem を生成する。
public JCheckBoxMenuItem(String text, boolean b) テキストおよび選択状態を持つ JCheckBoxMenuItem を生成する。
public JCheckBoxMenuItem(String text, Icon icon, boolean b) テキスト、アイコン、選択状態を持つ JCheckBoxMenuItem を生成する。

JCheckBoxMenuItem クラスのコンストラクタは、アイコンと文字列、そして初期の選択状態を設定することができます。このクラスでは、選択状態を設定、または取得する新しいアクセッサメソッド setState() メソッドgetState() メソッドが宣言されています。

JCheckBoxMenuItem クラス setState() メソッド
public void setState(boolean b)
JCheckBoxMenuItem クラス getState() メソッド
public boolean getState()

これらのメソッドの働きは、AbstractButton クラスの setSelected() と isSelected() メソッドと同じです。setState() と getState() メソッドは、他のコンポーネントセットとの互換性のために用意されたもので、通常は AbstractButton クラスのメソッドを使うことが推奨されています。

コード1
import javax.swing.*;

public class Test {
	public static void main(String args[]) {
		JMenuBar menuBar = new JMenuBar();
		JMenu menu = new JMenu("JMenu");			
		menu.add(new JCheckBoxMenuItem("JCheckBoxMenuItem 1"));
		menu.addSeparator();

		ButtonGroup group = new ButtonGroup();
		for(int i = 2 ; i < 5 ; i++) {
			String text = "JCheckBoxMenuItem " +  i;
			group.add(menu.add(new JCheckBoxMenuItem(text)));
		}

		menuBar.add(menu);

		JFrame win = new JFrame();
		win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		win.setBounds(10 , 10 , 400 , 300);
		win.getRootPane().setJMenuBar(menuBar);
		win.show();
	}
}
実行結果
コード1 実行結果

コード1は、チェックボックスに対応したメニュー項目をメニューに追加して表示してます。JCheckBoxMenuItem 1 は、単独のチェックメニューとして追加していますが、セパレータ以降の 3 つのチェックメニューは、グループとして管理されています。JCHeckBoxMenuItem クラスは AbstractButton クラスを継承しているため、ButtonGroup クラスで管理することができるのです。