>>
Lección 08

Ventanas y menús.


Ventanas, marcos y cuadros de diálogo.


La programación gráfica de aplicaciones Java que no son applets, requiere de una clase especial llamada Window y de dos extensiones suyas que se usan con mayor frecuencia que Window: Frame y Dialog, que en español se llaman marco y cuadro de diálogo respectivamente. Los objetos de la clase Window se llaman ventanas.

Pulsando el botón de este applet aparece un marco desde el cual se pueden lanzar: una ventana, un cuadro de diálogo y otro marco.

El alumno debe pulsar el botón "ventanas" y aparecerá un pequeño marco con tres botones: ventana, dialogo y marco, que al pulsarlos harán aparecer un objeto de cada clase.

Podrá observar que la ventana no tiene orilla ni título ni botón de salida, el cuadro de diálogo sí tiene orilla, título y botón de salida, pero no tiene botones de minimizar y maximizar ni un menú. Finalmente el marco tiene todo: orilla, título, botones de minimizar y maximizar y una barra de menú. Estas son precisamente las características que más distinguen entre sí a las ventanas, cuadros de diálogo y marcos.

El marco ofrece más funcionalidad que el cuadro de diálogo y éste más que una ventana. Por este motivo los marcos se utilizan con mayor frecuencia y las ventanas puras sólo de vez en cuando.

Abajo aparecen los contenidos de "ventana.java", "dialogo.java" y "marco.java" que son las clases construídas para crear los objetos del ejemplo. El alumno debe estudiarlos cuidadosamente. El archivo "ventanas,java" responsable de crear el marco que lanza los otros tres, así como el applet que lanza las tres ventanas, se estudiarán como ejemplos de la lección 5. Por ahora el alumno debe prestar particular atención a la creación, configuración y despliegue de la ventana, el cuadro de diálogo y el marco del ejemplo.

El alumno observará los siguientes pasos en la construcción de todas las ventanas (y cuadros de diálogo y marcos):

(Se repite el applet junto a cada texto para que el alumno pueda mirar simultáneamente el código y las ventanas.)

El alumno observará que a pesar de que dialogo tiene botón para destruirlo, éste no funciona. Esto se debe a que lo único que ocurre cuando se pulsa ese botón es que se genera un evento de tipo WindowEvent. Para que el botón funcione es necesario hacer que la ventana "escuche" estos eventos y para ello hay que implementar la interfaz WindowListener que tiene seis métodos abstractos. Esto puede verse en "marco.java" donde sí se programó que el marco se destruyera.

El alumno debe observar que cada marco que se crea aparece en la barra de tareas de Windows95/98. Esto es porque los marcos son auténticas ventanas de Windows95/98. En cambio las ventanas y los cuadros de diálogo son siempre dependientes de un marco. Esto se refleja en que sus constructores de Window y Dialog requieren de un Frame que actúe como padre, mientras que el constructor de Frame no pide nada o tan sólo el título.

En los ejemplos se mantuvo siempre el despliegue por defecto, que es BorderLayout (recuerde que Panel tiene por defecto un despliegue de tipo FlowLayout) y sólo se agregaron tres botones a "ventanas" y una etiqueta a "ventana", a "dialogo" y a "marco", pero no hay que olvidar que las ventanas son contenedores y por lo tanto se pueden utilizar en ellas todos los tipos de despliegues y agregarles todos los contenedores y componentes que se desee.

En "Marco.java" el alumno puede ver cómo se agrega una barra de menú a un marco y cómo se configura un menú. Éste es el tema de la última parte de esta larga lección.


Menús.


Las barras de menús sólo pueden aparecer en un marco (Frame) y cada marco sólo puede tener una barra de menús. Para agregar una barra de menús a un marco basta crearla y asignarla al marco mediante la función setMenuBar. Es decir, basta escribir estas dos líneas:

dentro de la construcción del marco. setMenuBar es un método de Frame.

A una barra de menús se le pueden agregar menús. Para ello hay que construir cada menú dándole un nombre. Por ejemplo:

crea dos menús de nombre "archivo" y "edición" respectivamente. Estos dos menús pueden agregarse a la barra de menús mb de esta manera:

Finalmente, a los menús se les pueden agregar elementos de menú (MenuItem) que se crean también asignándoles un nombre a cada uno. Por ejemplo:

crea tres elementos de menú, los cuales pueden agregarse, por ejemplo, a archivo de esta manera:

Para crear una línea de separación dentro de un menú se agrega un elemento de menú de nombre "-" así;

o simplemente:

pues el método Menu.add(String cadena) crea un elemento de menú con nombre cadena y lo agrega al menú.

La instrucción

haría que la opción "nuevo" apareciera deshabilitada.

A un menú se le puede agregar otro menú así:

y también un CheckboxMenuItem que es una versión del interruptor (Checkbox) especial para incluirse en un menú.

Todas estas operaciones para construir un menú aparecen en el ejemplo siguiente. Al pulsar el botón "menú" aparece un marco con un menú completo para un programa. El alumno debe estudiar cuidadosamente el ejemplo y su código que aparece a continuación.



Índice

Ejercicios de la Lección 08.


José Luis Abreu y Marta Oliveró