トップJava > メニュー

メニュー

1.基本メニュー

基本的なメニューの例を Menu01.java に示す。

動作画面例を下に示す。左図は、マウス操作で、メニュー"menu 2.2(E)"をクリックする前を表す。 クリックすると、右図のメッセージボックスがポップアップ表示される。

"Menu 1(X)"における X はショートカット・キーと呼ばれるものである。 メニューはマウスで操作するのが基本であるが、プログラムで

  menu1.setMnemonic(KeyEvent.VK_X); // Alt + Xで呼び出し
とすれば、menu1 に Xキーがショートカットキーとして登録される。 Altキー(メニュー・キーと呼ばれることもある)と X キーを同時に押すと、 マウスでクリックしたのと同じ働きをする。

メニューへの表示文字列は "Menu 1" でも動作するが、 ユーザーにショートカット・キーの存在を知らせるために、末尾に "(X)" を付加するのが慣例である。

メニュー項目をクリックしたとき、何らかの動作をさせるわけであるが、 このために、まず、implements ActionListener の追加が必要である。

import java.awt.event.*;
public class Menu01 extends JFrame implements ActionListener {

個々のメニュー項目に mi11.addActionListener(this); といった登録が必要となる。 そして、イベントが起きたときの処理を次のように記述しておく。 イベントの発生源は引数eから知ることができる。

public void actionPerformed(ActionEvent e) {
    JOptionPane.showMessageDialog(null, "[" + e.getActionCommand() + "]が選択されました");
}

2.階層メニュー

上の例で、"menu 1.2(B)" は末端項目ではなく、 子メニュー"menu 1.2.1(F)"、"menu 1.2.2(G)" を持つものに変えてみよう。 プログラムを Menu02.java に示す。

動作画面例を下に示す。

ポイントは、"menu 1.2(B)"をJMenuItemからJMenuに格上げし、そこに 子メニュー"menu 1.2.1(F)"、"menu 1.2.2(G)" を登録することである。 この二つの子メニューも、アクションリスナーに登録し、ショートカットキーもつけて置く。

    JMenu mi12 = new JMenu("menu 1.2(B)");
    JMenuItem mi121 = new JMenuItem("menu 1.2.1(F)");
    JMenuItem mi122 = new JMenuItem("menu 1.2.2(G)");
    mi12.add(mi121);
    mi12.add(mi122);
    mi121.addActionListener(this);
    mi122.addActionListener(this);
    mi121.setMnemonic('F');
    mi122.setMnemonic('G');

英数字記号など通常の印字可能なキーについてはMenu02.javaのように KeyEvent.VK_A というような書き方の代わりに 'A' としてもよい。

4.チェックボックス付きメニュー

メニュー文字列の前にチェックボックスを付けるのは簡単である。 JMenuItem の代わりに JCheckBoxItem とすればよい。

   JCheckBoxMenuItem mi11 = new JCheckBoxMenuItem("menu 1.1(A)");
とした場合、最初はチェックは付かず、クリックすると、チェックが付き、 もう一度クリックすると、チェックがとれる。すなわち、トグル・スイッチとなっている。

   JCheckBoxMenuItem mi11 = new JCheckBoxMenuItem("menu 1.1(A)");
とした場合、チェックが付いた状態が初期値となる。

プログラムで mi11のチェックボックスをオン(選択状態=チェックが付いた状態)にするには mi11.setSelected(true) とし、オフ(非選択状態)にするには mi11.setSelected(false) とすればよい。

また、選択状態かどうか知るには mi11.isSelected() のようにisSelectedメソッドを使う。 選択状態ならば true が返され、そうでなければ false が返される。

プログラム例およびその画面は次の節でアイコン付きのメニューと合わせて紹介する。

4.アイコン付きメニュー

メニュー項目にアイコンを付けるのは、C# や Windows C よりも簡単である。

アイコン付きメニューのプログラム例を Menu04.java に示す。

実行画面を下に示す。


メニュー作成のポイントは次の通りである。 まず、イメージを読み込む。ファイル形式は png、gif、jpg に対応する。

チェックボックスなしの場合 JMenuItem で、 チェックボックス付きの場合 JCheckBoxMenuItem でメニュー項目を生成する。

イメージを付ける場合には、コンストラクタの引数にアイコンを加える。

  ImageIcon iconBus = new ImageIcon("bus.png");
  ImageIcon iconCalendar = new ImageIcon("calendar.png");

  JCheckBoxMenuItem mi1 = new JCheckBoxMenuItem("バス時刻表(B)", iconBus);
  JMenuItem mi2 = new JMenuItem("カレンダー(C)", iconCalendar);
  JCheckBoxMenuItem mi3 = new JCheckBoxMenuItem("チェックボックステスト(T)", true);

メニュー項目に、アイコンとチェックオンのチェックボックスを付けるときには、 次のコンストラクタを使用する。

JCheckBoxMenuItem(String text, Icon icon, boolean b) 
 Creates a check box menu item with the specified text, icon, and selection state.