14. Menu

メニューの作り方です。ここでは基本的な使い方のみ紹介します。そのほかのコンストラクタやメソッド、フィールドについては API ドキュメントを参照してください。

(1) 3つの部品でメニューをつくります

 メニューは Frame にしか付けることができません。アプレットなどには付けることができないので注意してください。その理由はもう少し下の方でわかります。

 さて、メニューを作るには最低3つのクラスを知っていれば大丈夫です。1つは java.awt.MenuBar です。これは下の図でフレームタイトルの直下にある1本の横棒です。これが無いとメニューが付けられません。MenuBar の作り方は
MenuBar bar = new MenuBar( );

 のように引数無しのコンストラクタを使います。

 そして、このメニューバーに java.awt.Menu クラスを使って最上位のメニューを作ります。Menu の作り方は表示したいメニュー名をラベルとし次のコンストラクタを使います。

Menu file = new Menu("ファイル");

 最後にサブメニューを作ります。サブメニューは java.awt.MenuItem クラスを使います。サブメニューもメニューと同じように表示するサブメニュー名をラベルとし次のように作ります。

MenuItem load = new MenuItem("開く");

 これで表示する部品ができたので、どのメニューがどのメニューアイテムを持つかという関連づけをします。これはコンテナにコンポーネントを追加するのと同じイメージで add() メソッドを使います。フレームにメニューを追加するときは以下のような手順になります。


1.メニューアイテムをメニューに追加
 Menu クラスの add( ) を使います。file.add(load) のようにします。

2.メニューをメニューバーに追加
 MenuBar クラスの add( ) を使います。bar.add(file) のようにします。

3.フレームにメニューバーを追加
 Frame クラスの setMenuBar( ) を使います。setMenuBar(bar) のように使います。

 この手順の3番目でわかるように、メニューバーを追加するには Frame クラスのメソッドを使わなければいけないので、メニューはフレームにしか付けることができないわけです。


(2) メニューの選択にはイベント処理が必要です

 これでメニューが表示できるようになりました。ここまででもいろんな手順がありましたが、実際にメニューから選択して次の処理をするには、メニューにイベント処理を書いてやらなければいけません。メニューを作っただけでは動かないのです。

 メニューではサブメニューを選択したときに最終決定になるので、MenuItemオブジェクトにイベント処理を追加します。処理するイベントは ActionEvent です。もうお馴染みですね。このとき、すべてのメニューアイテムにリスナを登録しておくのを忘れないでください。

  MenuTest.java

// MenuTest.java

import java.awt.*;
import java.awt.event.*;

public class MenuTest extends Frame implements ActionListener {
    MenuTest() {
        setSize(300,200);
        
        // メニューバー作成
        MenuBar bar = new MenuBar();
        // メニュー作成
        Menu file = new Menu("ファイル");
        // メニューアイテム作成
        MenuItem load = new MenuItem("開く");
        MenuItem save = new MenuItem("保存");
        MenuItem quit = new MenuItem("終了");

        // メニューアイテムをメニューに追加
        file.add(load);
        file.add(save);
        file.add(quit);
        
        // メニューをメニューバーに追加
        bar.add(file);
        
        // メニューバーをフレームに追加
        setMenuBar(bar);

        // リスナ登録
        load.addActionListener(this);
        save.addActionListener(this);
        quit.addActionListener(this);
    
        setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e) {
        FileDialog dialog = null;
        String action = e.getActionCommand();
        if (action.equals("開く")) {
            dialog = new FileDialog(this,"開く",FileDialog.LOAD);
            dialog.setVisible(true);
        } else if (action.equals("保存") ) {
            dialog = new FileDialog(this,"保存",FileDialog.SAVE);
            dialog.setVisible(true);
        } else {
            System.exit(0);
        }
        System.out.println( dialog.getFile() + "を選択しました。" );
    }
    
    public static void main(String args[]) {
        MenuTest obj = new MenuTest();
    }

}


 実行方法 (終了で閉じます)

C:\java_test>java MenuTest


 実行例




このほかにもチェックボックス付きのメニューアイテム(CheckboxMenuItem)やメニューショートカット(MenuShortcut)なども可能です。API ドキュメントで研究してみてください。

前の章(13.Dialog / FileDialog)   次の章(15.ストリーム)