La razón por la que el applet trae una ventana para demostrar los menús es que el AWT límita donde se pueden utilizar los menús. Los menús sólo pueden existir en las barras de menú, y las barras de menú sólo están disponibles en las ventanas (especificamente, en los Frames).
Si los menús no están disponibles o no son apropiados en tu programa deberías buscar otras formas de presentar opciónes al usuario:checkbox, choice, y list.
La funcionalidad de los menús del AWT la proporcionan varias clases. Estas clases no descienden de la clase Component, ya que muchas plataformas ponen muchos límites a las capacidades de los menús. En su lugar, las clases menu descienden de la clase MenuComponent. El AWT proporciona las siguientes subclases de MenuComponent para soportar los menús:
Para poder contener un MenuComponent, un objeto debe adherirse al interface MenuContainer. Las clases Frame, Menu y MenuBar son las únicas del aWT que actualmente implementan MenuContainer.
Aquí tienes el código para la ventana del applet anterior. Esto código puede ejecutarse como una aplicación solitaria o, con la ayuda de la clase AppletButton, como un applet. Aquí tiene el código que trata con los menús:
public class MenuWindow extends Frame {
. . .
public MenuWindow() {
MenuBar mb;
Menu m1, m2, m3, m4, m4_1, m5;
MenuItem mi1_1, mi1_2, mi3_1, mi3_2, mi3_3, mi3_4,
mi4_1_1, mi5_1, mi5_2;
CheckboxMenuItem mi2_1;
...//Añade la salida mostrada a esta ventana...
//Construye la barra de menú.
mb = new MenuBar();
setMenuBar(mb);
//Construye el primer menú en la barra de menñus.
//Especificando elsegundo argumento como ture
//hace de este un menú de arranque.
m1 = new Menu("Menu 1", true);
mb.add(m1);
mi1_1 = new MenuItem("Menu Item 1_1");
m1.add(mi1_1);
mi1_2 = new MenuItem("Menu Item 1_2");
m1.add(mi1_2);
//Construye el menñu de ayuda.
m5 = new Menu("Menu 5");
mb.add(m5); //Sólo seleccionandolo no funciona, debe añadirlo.
mb.setHelpMenu(m5);
mi5_1 = new MenuItem("Menu Item 5_1");
m5.add(mi5_1);
mi5_2 = new MenuItem("Menu Item 5_2");
m5.add(mi5_2);
//Construye el segundo menú en la barra de menús.
m2 = new Menu("Menu 2");
mb.add(m2);
mi2_1 = new CheckboxMenuItem("Menu Item 2_1");
m2.add(mi2_1);
//Construye el tercer menú en la barra de menús.
m3 = new Menu("Menu 3");
mb.add(m3);
mi3_1 = new MenuItem("Menu Item 3_1");
m3.add(mi3_1);
mi3_2 = new MenuItem("Menu Item 3_2");
m3.add(mi3_2);
m3.addSeparator();
mi3_3 = new MenuItem("Menu Item 3_3");
m3.add(mi3_3);
mi3_4 = new MenuItem("Menu Item 3_4");
mi3_4.disable();
m3.add(mi3_4);
//Construye el cuarto menú en la barra de menús.
m4 = new Menu("Menu 4");
mb.add(m4);
m4_1 = new Menu("Submenu 4_1");
m4.add(m4_1);
mi4_1_1 = new MenuItem("Menu Item 4_1_1");
m4_1.add(mi4_1_1);
}
. . .
public boolean action(Event event, Object arg) {
String str = "Action detected";
if (event.target instanceof MenuItem) {
MenuItem mi=(MenuItem)(event.target);
str += " on " + arg;
if (mi instanceof CheckboxMenuItem) {
str += " (state is "
+ ((CheckboxMenuItem)mi).getState()
+ ")";
}
MenuContainer parent = mi.getParent();
if (parent instanceof Menu) {
str += " in " + ((Menu)parent).getLabel();
} else {
str += " in a container that isn't a Menu";
}
}
str += ".\n";
...//Muestra la Cadena de texto en al área de salida...
return false;
}