カスケードメニュー
メニューのネスト
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) { }
}
実行すると、メニューバーが付いたアプレットウィンドウが作成されます
各機能のメニューやメニューアイテムに注目してください