カスケードメニュー


メニューのネスト

Javaのメニュー項目は、カスケードメニューをサポートしています
カスケードメニューとは、メニュー項目からさらにメニューが表示されるものです

これを再現するためには、Menuクラスのadd()メソッドに着目します
Menuクラスのadd()メソッドは、MenuItem()のオブジェクトを受け取ります
重要なのはMenuクラスはMenuItemを継承しているということです
すなわち、Menuクラスのadd()メソッドはMenu()クラスのオブジェクトを受け取ることも可能なのです
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class test extends Frame {
	public static void main(String args[]) {
		test win = new test();
		win.appRun();
	}
	public void appRun() {
		Frame frm = new Frame("Kitty on your lap");
		frm.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		MenuBar mb = new MenuBar();
		Menu m = mb.add(new Menu("LOVE"));
		for (int i = 0 ; i < 10 ; i++) m.add(new MenuItem("Kitty on your lap " + i));
		Menu km = (Menu)m.add(new Menu("SAKURA"));
		for (int i = 0 ; i < 5 ; i++) km.add(new MenuItem("Card Captor Sakura " + i));

		frm.setMenuBar(mb);
		frm.setSize(400 ,300);
		frm.setVisible(true);
	}
}
Menuクラスのadd()メソッドにメニュー項目(アイテム)として
Menuオブジェクトを渡すことで、カスケードメニューになります

メニュークラスに関する基本的な動作を以下のアプレットにまとめます
このアプレットでは、まだ説明していない「選択できないメニュー項目」もあります
何らかの動作で、一時的に項目を選択できないようにしたり
または、選択できるようにしたりという切り替えは、MenuItemクラスのsetEnabled()を使います
現在、項目が選択できるかどうかはisEnable()で調べられます

public synchronized void setEnabled( boolean b )
public boolean isEnabled()

bには、メニュー項目が選択できるようにする場合はtrue
選択できないようにするにはfalseを指定します
isEnabled()は、メニュー項目の選択の可不可をブール値で返します
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

/*	<applet code="App57.class" width="300"height="300">
 	</applet>
*/

public class App57 extends Applet implements WindowListener , ActionListener {
	private Frame frm;

	public void init() {
		setBackground(Color.white);
		setLayout(new BorderLayout());
		Button but = new Button("フレーム");
		but.addActionListener(this);
		add(but , BorderLayout.CENTER);
	}

	public void actionPerformed(ActionEvent e) {
		if (frm != null) return;
		frm = new Frame("Kitty on your lap");
		frm.addWindowListener(this);

		MenuBar mbar = new MenuBar();

		/***カスケード***/
		Menu menu1 = mbar.add(new Menu("カスケード"));
		Menu menu1_k = (Menu)menu1.add(new Menu("SAKURA"));
		for (int i = 0 ; i < 5 ; i++) menu1_k.add(new MenuItem("Card Captor Sakura " + i));

		/***チェックボックスメニューアイテム***/
		Menu menu2 = mbar.add(new Menu("チェック"));
		for (int i = 0 ; i < 5 ; i++) 
			menu2.add(new CheckboxMenuItem("Kitty on your lap " + i));

		/***セパレータ : 追加と指定位置に挿入の二つの例***/
		Menu menu3 = mbar.add(new Menu("セパレータ"));
		for (int i = 0 ; i < 5 ; i++) {
			menu3.add(new MenuItem("Di Gi Charat " + i));
			if ( i == 0 ) menu3.addSeparator();
		}
		menu3.insertSeparator(4);

		/***選択できない項目***/
		Menu menu4 = mbar.add(new Menu("非選択"));
		MenuItem menu4_It = menu4.add(new MenuItem("LOVE HINA"));
		menu4_It.setEnabled(false);

		/***ヘルプメニュー***/
		Menu help = new Menu("help");
		help.add(new MenuItem("バージョン情報"));
		mbar.setHelpMenu(help);

		frm.setMenuBar(mbar);
		frm.setSize(400 ,300);
		frm.setVisible(true);
	}

	public void windowClosing(WindowEvent e) {
		frm.dispose();
		frm = null;
	}
	public void windowActivated(WindowEvent e) { }
	public void windowClosed(WindowEvent e) { }
	public void windowDeactivated(WindowEvent e) { }
	public void windowDeiconified(WindowEvent e) { }
	public void windowIconified(WindowEvent e) { }
	public void windowOpened(WindowEvent e) { }
}
アプレット

実行すると、メニューバーが付いたアプレットウィンドウが作成されます
各機能のメニューやメニューアイテムに注目してください



前のページへ戻る次のページへ