Академический Документы
Профессиональный Документы
Культура Документы
Asignatura
Taller de Computación VI
Módulo IV
AWT, SWING y Eventos
Elaboración
Hugo Sanoguera, Fabián Gentile
Este material pertenece a la materia Taller de Computación VI, de la Carrera de Analista de Sistemas de
Computación del INSTITUTO DE TECNOLOGÍA ORT.
Todos los derechos reservados. No está permitida la reproducción total o parcial de este apunte, ni su
tratamiento informático, ni la transmisión de ninguna forma o por cualquier medio, ya sea electrónico,
mecánico, por fotocopia, por registro u otros métodos, sin el permiso previo de los titulares.
1ra edición Septiembre de 2007.
1
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
UNIDAD DIDÁCTICA IV
ÍNDICE
UNIDAD DIDÁCTICA IV ________________________________________________________ 1
ÍNDICE ____________________________________________________________________________ 1
Introducción y orientaciones para el estudio______________________________________________ 2
Objetivos ___________________________________________________________________________ 2
Aclaraciones previas al estudio _________________________________________________________ 2
AWT ______________________________________________________________________________ 3
Introducción al AWT _______________________________________________________________________ 3
Interfase de Usuario ________________________________________________________________________ 3
Estructura del AWT ________________________________________________________________________ 4
Componentes y Contenedores_________________________________________________________________ 4
Primer ejemplo de una aplicación grafica AWT___________________________________________ 6
Modelo de manejo de eventos __________________________________________________________ 7
Ejemplo de 4 maneras diferentes de manejar de eventos en una aplicación grafica AWT-SWING 10
Clases del AWT __________________________________________________________________________ 14
LAYOUT MANAGERS ___________________________________________________________________ 16
LA CLASE Event___________________________________________________________________ 18
TIPOS DE EVENTOS _______________________________________________________________ 19
Eventos de Ventana ________________________________________________________________________ 19
Eventos de Teclado ________________________________________________________________________ 19
Eventos de Ratón__________________________________________________________________________ 19
Eventos de Barras _________________________________________________________________________ 19
Eventos de Lista __________________________________________________________________________ 19
Eventos Varios ___________________________________________________________________________ 19
CREAR MENUS Y BARRAS DE MENUS______________________________________________ 20
1
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
Awt y Swing.
Contenedores y componentes en java.
Eventos en java.
Creación de un programa en Java con manejo de Interfaz grafica y eventos.
Objetivos
Pretendemos que al finalizar de estudiar esta Unidad, el alumno logre:
Contenidos
Conceptualizaciones centrales
Bibliografía
Referencia de material bibliográfico recomendado
Actividades
2
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
AWT
Introducción al AWT
De la pagina (http://www.cienciasmisticas.com.ar/informatica/programacion/java/index.php)
AWT es el acrónimo del X Window Toolkit para Java, donde X puede ser cualquier cosa:
Abstract, Alternative, Awkward; aunque parece que Sun se decanta por Abstracto,
seriedad por encima de todo. Se trata de una biblioteca de clases Java para el desarrollo
de Interfaces de Usuario Gráficas. La versión del AWT que Sun proporciona con el JDK
se desarrolló en sólo dos meses y es la parte más débil de todo lo que representa Java
como lenguaje. El entorno que ofrece es demasiado simple, no se han tenido en cuenta
las ideas de entornos gráficos novedosos, sino que se ha ahondado en estructuras
orientadas a eventos, llenas de callbacks y sin soporte alguno del entorno para la
construcción gráfica; veremos que la simple acción de colocar un dibujo sobre un botón se
vuelve una tarea complicada. Quizá la presión de tener que lanzar algo al mercado haya
tenido mucho que ver en la pobreza de AWT.
JavaSoft, asegura que esto sólo era el principio y que AWT será multi-idioma, tendrá
herramientas visuales, etc. En fin, al igual que dicen los astrólogos, el futuro nos deparará
muchas sorpresas.
Interfase de Usuario
La interfase de usuario es la parte del programa que permite a éste interactuar con el
usuario. Las interfaces de usuario pueden adoptar muchas formas, que van desde la
simple línea de comandos hasta las interfaces gráficas que proporcionan las aplicaciones
más modernas.
Al nivel más bajo, el sistema operativo transmite información desde el ratón y el teclado
como dispositivos de entrada al programa. El AWT fue diseñado pensando en que el
programador no tuviese que preocuparse de detalles como controlar el movimiento del
ratón o leer el teclado, ni tampoco atender a detalles como la escritura en pantalla. El
AWT constituye una librería de clases orientada a objeto para cubrir estos recursos y
servicios de bajo nivel.
3
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
Debido a que el lenguaje de programación Java es independiente de la plataforma en que
se ejecuten sus aplicaciones, el AWT también es independiente de la plataforma en que
se ejecute. El AWT proporciona un conjunto de herramientas para la construcción de
interfaces gráficas que tienen una apariencia y se comportan de forma semejante en
todas las plataformas en que se ejecute. Los elementos de interface proporcionados por
el AWT están implementados utilizando toolkits nativos de las plataformas, preservando
una apariencia semejante a todas las aplicaciones que se creen para esa plataforma. Este
es un punto fuerte del AWT, pero también tiene la desventaja de que una interface gráfica
diseñada para una plataforma, puede no visualizarse correctamente en otra diferente.
La estructura de la versión actual del AWT podemos resumirla en los puntos que
exponemos a continuación:
Componentes y Contenedores
Una interfase gráfica está construida en base a elementos gráficos básicos, los
Componentes. Típicos ejemplos de estos Componentes son los botones, barras de
desplazamiento, etiquetas, listas, cajas de selección o campos de texto. Los
Componentes permiten al usuario interactuar con la aplicación y proporcionar información
desde el programa al usuario sobre el estado del programa. En el AWT, todos los
Componentes de la interfase de usuario son instancias de la clase Component o uno de
sus subtipos.
Los Componentes deben circunscribirse dentro del Contenedor que los contiene. Esto
hace que el anidamiento de Componentes (incluyendo Contenedores) en Contenedores
crean árboles de elementos, comenzando con un Contenedor en la raíz del árbol y
expandiéndolo en sus ramas.
4
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
5
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
6
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
Para procesar un evento de interfaz grafica de usuario, el programador debe realizar dos tareas
claves:
Un componente que escucha eventos GUI es un objeto de una clase que implementa una o más
interfaces que escuchan eventos correspondientes a los paquetes java.awt.event y
java.swing.event.
7
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
Muchos de los tipos de estos componentes son comunes para AWT y SWING. Estos tipos se
definen en el paquete java.awt.event (ver figura anterior). Los demás (adicionales) están en el
paquete java.swing.event.
Un componente “escucha” tipos específicos de eventos generados en el mismo objeto, o
generados por otros objetos (componentes GUI) en un programa.
Cuando ocurre un evento, el componente GUI que interactuó con el usuario notifica a sus
componentes de escucha registrados por medio de una llamada al método manejador de eventos
apropiado a cada componente de escucha.
Por ejemplo, cuando el usuario oprime la tecla Enter en un objeto TextField, se hace una llamada
al método actionPerformed del componente de escucha registrado.
Para cada categoría de eventos hay una interfase que tiene que ser implementada por la clase de
los objetos que quieren recibir los eventos. Esa interfaz requiere que uno o más métodos estén
bien definidos. Estos métodos son llamados cuando un evento en particular se genera.
8
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
Componentes y eventos
La siguiente tabla nos muestra los componentes del AWT y los eventos de cada uno de ellos, así
como una breve explicación de en qué consiste cada tipo de evento.
Component Eventos generados Significado
Button ActionEvent Hacer click en el botón
Checkbox ItemEvent Seleccionar o deseleccionar un item.
CheckboxMenuItem ItemEvent Seleccionar o deseleccionar un item.
Choice ItemEvent Seleccionar o deseleccionar un item.
Mover, cambiar tamaño, mostrar u ocultar un
Component ComponentEvent
componente.
FocusEvent Obtener o perder el focus.
KeyEvent Pulsar o soltar una tecla.
Pulsar o soltar un botón del ratón; entrar o salir de un
MouseEvent componente; mover o arrastrar el ratón (tener en
cuenta que este evento tiene dos Listener).
Container ContainerEvent Añadir o eliminar un componente de un container.
List ActionEvent Hacer doble click sobre un item de la lista.
ItemEvent Seleccionar o deseleccionar un item de la lista.
MenuItem ActionEvent Seleccionar un item de un menú.
Scrollbar AdjustementEvent Cambiar el valor de la scrollbar.
TextComponent TextEvent Cambiar el texto.
TextField ActionEvent Terminar de editar un texto pulsando intro.
Acciones sobre una ventana: abrir, cerrar, restablecer e
Window WindowEvent
iniciar el cierre.
Se debe tomar en cuenta que los eventos propios de una super-clase pueden afectar también a
los componentes de sus sub-clases. Por ejemplo, la clase TextArea no tiene ningún evento
específico o propio, pero puede recibir los de su super-clase TextComponent.
Eventos que generan los distintos componentes del AWT.
9
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
Ejemplo de 4 maneras diferentes de manejar de eventos en una
aplicación grafica AWT-SWING
package demo.awt;
Este código importa todos los
import java.awt.AWTEvent; componentes que se van a utilizar
import java.awt.Button; junto con el manejo de los eventos que
import java.awt.Color; estos pueden generar de la clase awt
import java.awt.Component;
Podría resumirse en dos instrucciones
import java.awt.Cursor;
import java.awt.*;
import java.awt.Event;
import java.awt.event.*;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
Este código importa el componente
Panel de opción de otra clase grafica
import javax.swing.JOptionPane; que es swing
public Demo() {
super("Ejemplo");
t6Init();
} Se setea a null el Layout para manejar la
disposición de los elementos gráficos en
forma manual con setBounds
private void t6Init() {
setLayout(null);
setBounds(0, 0, 600, 480); Se setea el color de fondo y la letra
setBackground(Color.ORANGE);
setForeground(Color.RED); Este código es una
addWindowListener( new WindowAdapter() { clase interna y se
public void windowClosing(WindowEvent evt) { codifica para poder
System.exit(0); responder al evento
} que se genera al
clickear en una
} ); ventana para
cerrarla.
Button btn;
// Botones que modifican el título de la ventana
// El evento utilizado es Demo.action(); Crea los botones del 0 al 9
for (int i = 0; i < 10; i++) { Observar que se utiliza una
btn = new Button(String.valueOf(i)); sola variable btn para crear
todos los botones
add(btn);
btn.setName("titulo");
btn.setBounds(30 * (i + 1), 50, 25, 25); Los asocia al Frame
}
Les asigna un nombre a
todos llamado “titulo”
Los posiciona en la pantalla
10
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
12
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
13
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
Clase Component
Es una clase abstract de la que derivan todas las clases del AWT. Los métodos de esta clase son
importantes porque son heredados por todos los componentes del AWT. En las declaraciones de los
métodos de dicha clase aparecen las clases Point, Dimension y Rectangle.
Clase ComponentEvent
Se generan cuando un Component de cualquier tipo se muestra, se oculta o cambia de posición o de
tamaño. Los eventos de mostrar u ocultar ocurren cuando se llama al método setVisible(boolean). Otro
método útil es Component getComponent( ) que devuelve el componente que generó el evento. Se puede
utilizan en lugar de getSource( ).
Clase FocusEvent
El Focus está relacionado con la posibilidad de sustituir al ratón por el teclado en ciertas operaciones. De los
componentes que aparecen en pantalla, en un momento dado hay sólo uno que puede recibir las acciones
del teclado y se dice que ese componente tiene el Focus.
Clase Container
Es una clase muy general. Los métodos de esta clase son heredados por las clases Frame y Panel, los
cuales son muy utilizados para crear objetos.
Clase Windows
Los objetos de ésta clase son ventanas de máximo nivel, pero sin bordes ni barras de menú. Las clases que
derivan de ella son: Frame y Dialog.
Clase WindowEvent
Se produce cada vez que se abre, cierra, iconiza, restaura, activa o desactiva una ventana. El uso más
frecuente de está clase es para cerrar ventanas (ctrl+alt+supr). También se utiliza para detener threads y
liberar recursos al iconizar una ventana (por ejemplo animaciones) y comenzar de nuevo al restaurarla.
Clase Frame
Es una ventana con un borde y que puede tener una barra de menús. Si una ventana depende de otra, es
mejor utilizar una Window que un Frame.
Clase Dialog
Es una ventana que depende de otra ventana (Frame). Si un Frame se cierra, se cierran también los Dialog
que dependen de ella. Un Dialog modal requiere atención inmediata del usuario: no se puede hacer otra
cosa hasta haber cerrado el Dialog.
Clase FileDialog
Muestra una ventan de diálogo en la cual se puede seleccionar un fichero. Las constantes enteras LOAD
(abrir fichero para lectura) y SAVE (abrir fichero para escritura) definen el modo de apertura del fichero.
Clase Panel
Un Panel es el Container de propósito general. Se puede utilizar tal cual para contener otros componentes.
Por default, el Layout Manager de Panel es FlowLayout. Los applets son sub-clase de Panel.
14
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
Clase Button
El evento más importante que recibe es que al clicar sobre él se genera un evento de la clase ActionEvent.
Se puede cambiar el aspecto del botón y también se puede establecer si está activado o no.
Clase ActionEvent
Se producen al clicar con el ratón en un botón (Button), al elegir un comando de un menú (MenuItem), al
hacer doble click en un elemento de una lista (List) y al pulsar intro para introducir un texto en una caja de
texto (TextField).
Clase Canvas
Un Canvas es una zona rectangular de pantalla en la que se puede dibujar y en la que se pueden generar
eventos. Las Canvas permiten realizar dibujos, mostrar imágenes y crear componentes a medida, de modo
que se muestre un aspecto similar en todas las plataformas. Constructor: Canvas( ) Método de la clase:
paint (Graphics g);
Clase ItemEvent
Se produce cuando ciertos componentes (Checkbox, CheckboxMenuItem, Choice y List) cambian de estado
(on/off).
Clase Choice
Permite elegir un elemento de la lista desplegable. Constructor Choice( ).
Clase Label
Introduce en un container un texto no seleccionable y no editable, por default se alinea a la izquierda. La
clase Label define las constantesLabel.CENTER , Label.LEFT y Label.RIGHT para determinar la alineación
del texto. Constructores: Label(String lbl) , Label(String lbl, int alineación).
Clase List
Viene definida por una zona de pantalla con varias líneas, de las que se muestran solo algunas, y entre las
cuales se puede hacer una selección simple o múltiple. Constructores: List( ), List(int línea, boolena mult).
Clase Scrollbar
Un Scrollbar es una barra de desplazamiento con un cursor que permite introducir y modificar valores, entre
unos valores mínimo y máximo, con pequeños y grandes incrementos. Esta clase tiene dos constantes,
Scrollbar.HORIZONTAL y Scrollbar.VERTICAL, que indican la posición de la barra. Constructores:
Scrollbar( ), Scrollbar(int pos), Scrollbar(int pos, int val, int vis, int min, int max) donde :
Pos es la posición de la barra vertical u horizontal; el rango es el intervalo entre los valores mínimo min.,
máximo max y por ultimo, vis que es el tamaño de área visible.
Clase ScrollPane
Es una ventana de tamaño limitado en las que se pueden mostrar un componente de mayor tamaño con
dos Scrollbar, uno vertical y otra horizontal. Constructores: ScrollPane(), ScrollPane(int scbs) .
15
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
Clase Menu
Define las opciones que aparecen al seleccionar uno de los menús de la barra de menús. Constructores:
Menu (String).
Clase MenuBar
A una MenuBar solo pueden añadirse objetos Menu. Constructor : MenuBar().
Clase MenuItem
Los objetos de esta clase representan las distintas opciones de un menú.
Clase CheckboxMenuItem
Son elementos de un menú que pueden estar activados o no. Constructores: CheckboxMenuItem(String
lbl), CheckboxMenuItem(String lbl, boolean estado).
Menús pop-up
Son menús que aparecen en cualquier parte de la pantalla al clicar con el botón derecho del ratón.
Constructores : PopupMenu( ), PopupMenu(String titulo).
LAYOUT MANAGERS
Un Layout Managers es un objeto que controla como los componentes se sitúan en un Container.
El AWT define cinco Layout Managers: dos muy sencillos (FlowLayout y GridLayout), dos más
especializados (BorderLayout y CardLayout) y uno muy general (GridBagLayout).
FlowLayout
Los componentes se van añadiendo de izquierda a derecha y de arriba hacia abajo. Se puede
elegir alineación por la izquierda, central o por la derecha, respecto al container. Esta clase tiene
tres constructores:
BorderLayout
El container se divide en 5 zonas: North, South, East, West y Center (que ocupa el resto del
espacio). Si se aumenta el tamaño de la ventana todas las zonas se mantienen en su mínimo
tamaño posible excepto Center, que absorbe casi todo el crecimiento. Por default BroderLayout
no deja espacio entre componentes. Constructores:
16
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
GridLayout
Se utiliza una matriz de celdas que se numeran de izquierda a derecha y de arriba abajo. Todas
las celdas tienen el mismo tamaño. Constructores:
GridLayout(int nfilas, ncol); GridLayout(int nfilas, int ncol, int horizGap, int vertGap);
GridBagLayout
Se utiliza también una matriz de celdas, pero permite que algunos componentes ocupen más de
una celda. La diferencia con GridLayout es que las filas pueden tener distinta altura, las columnas
pueden tener distinta anchura, y además en el GridBagLayout un componente puede ocupar
varias celdas contiguas.
CardLayout
Permite disponer distintos componentes que comparten la misma ventana para ser mostrados
sucesivamente. Son como diapositivas que van apareciendo una detrás de otra. Los siguientes
métodos permiten controlar el orden en que aparecen las diapositivas:
17
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
LA CLASE Event
Material de Tutorial de java (http://www.cica.es/formacion/JavaTut/Cap4/awt.html)
La clase Event es el jugador principal en el juego de los eventos. Intenta capturar las
características fundamentales de todos los eventos que genera el usuario. Los datos miembro de
la clase Event son los que se indican a continuación:
key - Para eventos de teclado, es la tecla que se ha pulsado. Su valor será el valor Unicode del
carácter que representa la tecla. Otros valores que puede tomas son los de las teclas especiales
como INICIO, FIN, F1, F2, etc.
modifiers - La combinación aritmética del estado en que se encuentran las teclas modificadoras
Mays, Alt, Ctrl.
clickCount - El número de clicks de ratón consecutivos. Sólo tiene importancia en los eventos
MOUSE_DOWN
arg - Es un argumento dependiente del evento. Para objetos Button, este objeto arg es un objeto
String que contiene la etiqueta de texto del botón
Una instancia de la clase Event será creada por el sistema Java cada vez que se genere un
evento. Es posible, sin embargo, que un programa cree y envíe eventos a los Componentes a
través de su método postEvent()
18
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
TIPOS DE EVENTOS
Los eventos se catalogan por su naturaleza, que se indicará en el miembro id de su estructura.
Los grandes grupos de eventos son:
Eventos de Ventana
Son los que se generan en respuesta a los cambios de una ventana un frame o un dialogo.
• WINDOW_DESTROY
• WINDOW_EXPOSE
• WINDOW_ICONIFY
• WINDOW_DEICONIFY
• WINDOW_MOVED
Eventos de Teclado
Son generados en respuesta a cuando el usuario pulsa y suelta una tecla mientras un
Componente tiene el foco de entrada.
• KEY_PRESS
• KEY_RELEASE
• KEY_ACTION
• KEY_ACTION_RELEASE
Eventos de Ratón
Son los eventos generados por acciones sobre el ratón dentro de los límites de un Componente.
• MOUSE_DOWN
• MOUSE_UP
• MOUSE_MOVE
• MOUSE_ENTER
• MOUSE_EXIT
• MOUSE_DRAG
Eventos de Barras
Son los eventos generados como respuesta a la manipulación de barras de desplazamiento
(scrollbars).
• SCROLL_LINE_UP
• SCROLL_LINE_DOWN
• SCROLL_PAGE_UP
• SCROLL_PAGE_DOWN
• SCROLL_ABSOLUTE
Eventos de Lista
Son los eventos generados al seleccionar elementos de una lista.
• LIST_SELECT
• LIST_DESELECT
Eventos Varios
Son los eventos generados en función de diversas acciones.
• ACTION_EVENT
• LOAD_FILE
• SAVE_FILE
• GOT_FOCUS
• LOST_FOCUS
19
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
CREAR MENUS Y BARRAS DE MENUS
En la actual versión del AWT que se proporciona con el JDK, sólo se permite crear menús a través
de código, ya que Java todavía no dispone de un formato de recursos y tampoco hay un diseñador
como pueden ser AppStudio, Delphi o X-Designer; aunque terminará habiendo uno, con
seguridad.
No hay ningún método para diseñar una buena interface, todo depende del programador. Los
menús son el centro de la aplicación. La diferencia entre una aplicación útil y otra que es
totalmente frustrante radica en la organización de los menús, pero eso, las reglas del diseño de un
buen árbol de menús, no están claras. Hay un montón de libros acerca de la ergonomía y de cómo
se debe implementar la interacción con el usuario. Lo cierto es que por cada uno que defienda una
idea, seguro que hay otro que defiende la contraria. Todavía no hay un acuerdo para crear un
estándar, con cada Window Manager se publica una guía de estilo diferente. Así que, vamos a
explicar lo básico, sin que se deba tomar como dogma de fe, para que luego cada uno haga lo que
mejor le parezca.
setMenuBar( mbarra );
}
El menú que crea esta función tendrá la apariencia que muestra la figura siguiente:
20
INSTITUTO de TECNOLOGÍA O. R. T. Analista de Sistemas de Computación
Instituto Incorporado a la Enseñanza Oficial (A-763) Taller de Computación VI
Yatay 240 - Buenos Aires - República Argentina
Los eventos generados por las opciones de un menú se manejan del mismo modo que los
Botones, Listas, etc. En el caso de menús, es el evento ACTION_EVENT de la clase
java.awt.MenuItem el que se genera y en evt.target se nos indica la opción seleccionada.
case Event.ACTION_EVENT:
{
if( evt.target instanceof MenuItem )
{
if( "Nuevo".equals( evt.arg ) )
AplicacionAWT aAwt = new AplicacionAWT();
if( "Abrir".equals( evt.arg ) )
System.out.println( "Opcion -Abrir-" );
if( "Guardar".equals( evt.arg ) )
System.out.println( "Opcion -Guardar-" );
if( "Guardar como".equals( evt.arg ) )
System.out.println( "Opcion -Guardar como-" );
if( "Imprimir".equals( evt.arg ) )
System.out.println( "Opcion -Imprimir-" );
if( "Salir".equals( evt.arg ) )
System.exit( 0 );
if( "Ayuda!".equals( evt.arg ) )
System.out.println( "No hay ayuda" );
if( "Acerca de".equals( evt.arg ) )
System.out.println( "Opcion -Acerca de-" );
}
}
En el código anterior hemos tratado los eventos del menú. Para más seguridad, aunque no sea
estrictamente necesario, lo primero que hacemos es asegurarnos de que el objeto evt.target es
realmente un objeto MenuItem, es decir, procede de la barra de menús; y después comprobamos
la opción que se ha seleccionado.
Como todo, también se puede rizar el rizo y conseguir reproducir los sistemas de menús que
estamos acostumbrados a ver en las aplicaciones que manejamos habitualmente. Un ejemplo de
ello son los menús en cascada, semejantes al que muestra la figura y que ha sido generado
mediante la aplicación Cascada.java.
Básicamente se utiliza la técnica ya descrita, pero en vez de crear un nuevo MenuItem se crea un
nuevo Menu, lo que origina el menú en cascada.
No obstante, y volviendo al diseño de interfaces, no debe abusarse de este tipo de menús, porque
pueden crear mucha más confusión al usuario. Siempre se debe tener en mente que los usuarios
tienen que navegar habitualmente por una gran cantidad de menús en las más diversas
aplicaciones, por lo que no debemos esconderles demasiado las opciones que les pueden
interesar.
21