チェックボックス型メニューアイテムの追加

広告

メニューアイテムの一つとしてチェックボックス型のメニューアイテムの使い方を確認していきます。チェックボックス型メニューアイテムを作成するにはJCheckBoxMenuItemクラスを使用します。JCheckBoxMenuItemクラスは次のように定義されています。

public class JCheckBoxMenuItem
extends JMenuItem implements SwingConstants, Accessible
java.lang.Object
 L java.awt.Component
     L java.awt.Container
         L javax.swing.JComponent
             L javax.swing.AbstractButton
                 L javax.swing.JMenuItem
                     L javax.swing.JCheckBoxMenuItem

チェックボックス型のメニューアイテムはJMenuItemクラスのサブクラスとなっています。

JCheckBoxMenuItemクラスを利用するにはコンストラクタを使ってJCheckBoxMenuItemクラスのオブジェクトを作成します。どのようなコンストラクタが用意されているか確認してみます。

コンストラクタの概要
JCheckBoxMenuItem()
初期状態で選択されていない、テキストおよびアイコンなしのチェックボックスメニュー項目を生成します。
JCheckBoxMenuItem(Action a)
指定された Action からプロパティーを取得するメニュー項目を生成します。
JCheckBoxMenuItem(Icon icon)
初期状態で選択されていない、アイコン付きのチェックボックスメニュー項目を生成します。
JCheckBoxMenuItem(String text)
初期状態で選択されていない、テキスト付きのチェックボックスメニュー項目を生成します。
JCheckBoxMenuItem(String text, boolean b)
指定されたテキストおよび選択状態を持つチェックボックスメニュー項目を生成します。
JCheckBoxMenuItem(String text, Icon icon)
初期状態で選択されていない、指定されたテキストおよびアイコン付きのチェックボックスメニュー項目を生成します。
JCheckBoxMenuItem(String text, Icon icon, boolean b)
指定されたテキスト、アイコン、および選択状態を持つチェックボックスメニュー項目を生成します。

多くのコンストラクタが用意されていますが、基本的な考え方はJCheckBoxクラスと同じです。詳しくは「チェックボックスの作成(JCheckBoxクラス)」を参照して下さい。

ここでは基本となる4番目のコンストラクタを確認してみます。

初期状態で選択されていない、テキスト付きのチェックボックスメニュー項目を生成します。

パラメータ:
  text - CheckBoxMenuItem のテキスト

引数にはチェックボックス型のメニューアイテムに表示される文字列を設定します。

実際の使い方は次のようになります。

JMenu submenu = new JMenu("Encode");

JMenu menu = new JMenu("File");

JMenuItem menuitem1 = new JMenuItem("New");
JMenuItem menuitem2 = new JMenuItem("Open");

JCheckBoxMenuItem checkmenuitem1 = new JCheckBoxMenuItem("Auto Save");
JCheckBoxMenuItem checkmenuitem2 = new JCheckBoxMenuItem("Auto Check");

menu.add(menuitem1);
menu.add(menuitem2);
menu.add(checkmenuitem1);
menu.add(checkmenuitem2);

チェックボックス型のメニューアイテムも通常のメニューアイテムと同じようにメニューに追加して利用します。

選択/非選択の設定

チェックボックス型のメニューアイテムは、選択と非選択の2つの状態を持ちます。ユーザーがメニューアイテム上でクリックすることにより選択/非選択を切り替えることができますが、メソッドを使ってプログラムから状態を設定することができます。

設定するにはJCheckBoxMenuItemクラスの親クラスであるAbstractButtonクラスで用意されているsetSelectedメソッドを使います。

ボタンの状態を設定します。このメソッドは actionEvent をトリガーしない点に注意してください。
プログラム上で動作を変更するには、doClick を呼び出します。

パラメータ:
  b - ボタンが選択されている場合は true、そうでない場合は false

引数にチェックボックスを選択した状態にするか非選択の状態にするかを表すboolean型の値を指定します。trueを指定すれば選択状態となりfalseを指定すれば非選択の状態となります。

また現在の状態を取得するにはJCheckBoxMenuItemクラスの親クラスであるAbstractButtonクラスで用意されているisSelectedメソッドを使います。

ボタンの状態を返します。トグルボタンが選択されている場合は true、そうでない場合は false を
返します。

戻り値:
  トグルボタンが選択されている場合は true、そうでない場合は false

メソッドを実行すると、現在選択されている場合はtrue、選択されていない場合はfalseを返します。

実際の使い方は次のようになります。

JMenu submenu = new JMenu("Encode");

JMenu menu = new JMenu("File");

JMenuItem menuitem1 = new JMenuItem("New");
JMenuItem menuitem2 = new JMenuItem("Open");

JCheckBoxMenuItem checkmenuitem1 = new JCheckBoxMenuItem("Auto Save");
JCheckBoxMenuItem checkmenuitem2 = new JCheckBoxMenuItem("Auto Check");

menu.add(menuitem1);
menu.add(menuitem2);
menu.add(checkmenuitem1);
menu.add(checkmenuitem2);

checkmenuitem1.setSelected(true);

サンプルプログラム

では実際に試してみます。

SSample20_1.java

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import java.awt.Container;
import java.awt.BorderLayout;

class SSample20_1 extends JFrame{
  JLabel label;

  public static void main(String args[]){
    SSample20_1 frame = new SSample20_1("タイトル");
    frame.setVisible(true);
  }

  SSample20_1(String title){
    setTitle(title);
    setBounds(100, 100, 300, 250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuBar menubar = new JMenuBar();
    JMenu menu1 = new JMenu("File");
    JMenu menu2 = new JMenu("Edit");
    JMenu menu3 = new JMenu("Tool");
    JMenu menu4 = new JMenu("Help");

    menubar.add(menu1);
    menubar.add(menu2);
    menubar.add(menu3);
    menubar.add(menu4);

    JMenuItem menuitem1_1 = new JMenuItem("New");
    JMenuItem menuitem1_2 = new JMenuItem("Open");
    JMenuItem menuitem1_3 = new JMenuItem("Save");
    JMenuItem menuitem1_4 = new JMenuItem("Close");

    JCheckBoxMenuItem checkmenuitem1 = new JCheckBoxMenuItem("Auto Save");
    JCheckBoxMenuItem checkmenuitem2 = new JCheckBoxMenuItem("Auto Check");
    checkmenuitem1.setSelected(true);

    menu1.add(menuitem1_1);
    menu1.add(menuitem1_2);

    menu1.addSeparator();

    menu1.add(checkmenuitem1);
    menu1.add(checkmenuitem2);

    menu1.addSeparator();

    menu1.add(menuitem1_3);
    menu1.add(menuitem1_4);

    setJMenuBar(menubar);

    JPanel p = new JPanel();

    label = new JLabel();
    p.add(label);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }
}

ではコンパイルを行った上で実行してみます。

チェックボックス型メニューアイテムの追加

では「File」メニューをクリックして下さい。

チェックボックス型メニューアイテムの追加

メニューの中にチェックボックス型のメニューアイテムが表示されています。今回は分かりやすいようにチェックボックス型メニューアイテムの前後にセパレータを表示してあります。

チェックボックス型のメニューアイテムは通常のチェックボックスと同じようにクリックすることで選択/非選択を切り替えることができます。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。