Tipos de programas en Java ! Interfaces gráficas de usuario (1): Abstract Windowing Toolkit (AWT) Aplicaciones ! ! Se pueden ejecutar directamente en un entorno Java Tipos • Modo de consola • Interacción mediante teclado • Interfaz basado en texto Programación Orientada a Objetos Facultad de Informática • Aplicaciones con interfaz gráfica (GUI) • • • • ! Juan Pavón Mestras Dep. Sistemas Informáticos y Programación Universidad Complutense Madrid Ventanas graficas para entrada y salida de datos Iconos Dispositivos de entrada (e.g. ratón, teclado) Interacción directa Applets ! Pequeñas aplicaciones que se ejecutan dentro de un navegador (o en el visualizador de applets - Appletviewer) • Interfaz gráfica • Limitaciones por motivos de seguridad Juan Pavón Mestras Facultad de Informática UCM, 2004 Bibliotecas de componentes para GUI ! ! “Look & Feel” dependiente de la plataforma ! ! ! ! Funcionalidad independiente de la plataforma Básico y experimental Estándar hasta la versión JDK 1.1.5 ! ! ! ! Java AWT Administradores de diseño o disposición (layout managers) ! Look & Feel y funcionalidad independiente de la plataforma Desarrollado 100% en Java Portable: si se elige un look&feel soportado por Swing (o se programa uno) puede asegurarse que la GUI se verá igual en cualquier plataforma Mucho más completo que AWT (pero también mas complejo de usar: aprender bien Swing es mucho más difícil que aprender el lenguaje Java en sí) Juan Pavón Mestras Facultad de Informática UCM, 2004 Objetos visuales del interfaz Un programa gráfico es un conjunto de componentes anidados • ventanas, contenedores, menús, barras, botones, campos de texto, etc. Swing / Java Foundation Classes ( desde JDK 1.1.5) ! Componentes GUI (widgets) ! • La apariencia de ventanas, menúes, etc. es distinta en Windows, Mac, Motif, y otros sistemas ! 2 Elementos básicos del AWT Abstract Windowing Toolkit (AWT) ! Java AWT ! Gestionan la organización de los componentes gráficos de la interfaz Creación de gráficos y texto - Clase Graphics • Define fuentes, pinta textos, • Para dibujo de líneas, figuras, coloreado,... ! Interactividad: manejo de eventos • Ratón • Teclado 3 Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 4 Componentes del AWT ! Jerarquía de componentes del AWT Contenedores ! Object Contienen otros componentes (u otros contenedores) • Estos componentes se tienen que añadir al contenedor y para ciertas operaciones se pueden tratar como un todo • Mediante un gestor de diseño controlan la disposición (layout) de estos componentes en la pantalla • Ejemplo: Panel, Frame, Applet ! ! Container Checkbox Superficie simple de dibujo Choice TextField botones, listas, menús, casillas de verificación, campos de texto, etc. TextArea Panel Window Label ScrollPane Componentes de construcción de ventanas ! Button Canvas Componentes de interfaz de usuario ! Component TextComponent Lienzo (clase Canvas) ! ! Graphics Frame Dialog java.applet. Applet ventanas, marcos, barras de menús, cuadros de diálogo List Scrollbar FileDialog Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 5 Contenedores ! ! ! ! ! ! 6 import import java.awt.*; java.awt.*; public public class class GUISimple GUISimple extends extends Frame Frame {{ public public GUISimple GUISimple (){ (){ setSize(200, setSize(200, 100); 100); setVisible(true); setVisible(true); }} public public static static void void main(String main(String args[]) args[]) {{ GUISimple GUISimple ventana ventana == new new GUISimple(); GUISimple(); ventana.setTitle("ventana ventana.setTitle("ventana tipo tipo frame"); frame"); }} }} Sirve para colocar botones, etiquetas, etc. No existe sin una ventana que lo albergue Un applet es un panel Window ! Java AWT Ejemplo - GUI simple con un frame Panel ! Juan Pavón Mestras Facultad de Informática UCM, 2004 Sirve para crear nuevas ventanas independientes Ventanas gestionadas por el administrador de ventanas de la plataforma (Windows, Motif, Mac, etc.) Normalmente se usan dos tipos de ventanas: • Frame: ventana donde se pueden colocar menús • Dialog: ventana para comunicarse con el usuario • Se usan para colocar botones, etiquetas, etc. • Cumple la misma función que un panel, pero en una ventana independiente Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 7 Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 8 Componentes: Etiquetas, Botones, Campos ! Botón - Clase Button ! Etiqueta - Clase Label ! ! Uso de componentes ! Botón de interacción que puede tener una etiqueta ! Muestra una cadena de sólo lectura ! • Normalmente para asociar el texto con otro componente ! Campo de texto - Clase TextField ! Area de texto - Clase TextArea ! ! ! 1) Crear el componente 2) Añadirlo al contenedor ! Campo de una línea que permite introducir y editar texto Campo de texto de varias líneas Mayor funcionalidad ! • Añadir, reemplazar e insertar texto • Barras de desplazamiento ! usando new: Button b = new Button(“Correcto”); usando add: add(b); // añadir en el contenedor actual // crear y añadir el componente en una sóla operación add(new Label(“Etiqueta 1”)); add(new Label(“Etiqueta 2”)); Si luego se quiere quitar, usar remove(componente) 3) Invocar métodos sobre el componente y manejar eventos System.out.println(b.getLabel()); b.setLabel(“etiqueta modificada”); Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 9 Ejemplo - Paneles, etiquetas y botones Java AWT Java AWT 10 Ejemplo - Campos y áreas de texto import importjava.awt.*; java.awt.*; public publicclass classGUISimple GUISimpleextends extendsFrame Frame{{ public publicGUISimple GUISimple(){ (){ setSize(200, setSize(200,100); 100); Panel Panelpanel; panel;////contenedor contenedorque queno nocrea creauna unaventana ventanaseparada separada panel = new Panel(); panel = new Panel(); Label Labeletiqueta etiqueta==new newLabel("Etiqueta Label("Etiqueta1"); 1"); panel.add(etiqueta); panel.add(etiqueta); Button boton= new Button(”Correcto"); Button boton= new Button(”Correcto"); panel.add(boton); panel.add(boton); panel.add(new panel.add(newLabel(“Etiqueta Label(“Etiqueta2”)); 2”)); add(panel); add(panel);////añade añadeelelpanel panelalalframe frame setVisible(true); setVisible(true); }} public publicstatic staticvoid voidmain(String main(Stringargs[]) args[]){{ GUISimple GUISimpleventana ventana==new newGUISimple(); GUISimple(); ventana.setTitle("ventana ventana.setTitle("ventanatipo tipoframe");}} frame");}} Juan Pavón Mestras Facultad de Informática UCM, 2004 Juan Pavón Mestras Facultad de Informática UCM, 2004 import importjava.awt.*; java.awt.*; public publicclass classGUISimple GUISimpleextends extendsFrame Frame{{ public publicGUISimple GUISimple(){ (){ setSize(350, setSize(350,200); 200); Panel Panelpanel panel==new newPanel(); Panel(); panel.add(new panel.add(newLabel("Campo Label("CampoTexto: Texto:")); ")); TextField TextFieldcampo campo==new newTextField("Texto TextField("Textoinicial", inicial",25); 25); panel.add(campo); panel.add(campo); panel.add(new panel.add(newLabel("Area Label("AreaTexto: Texto:")); ")); TextArea TextAreaarea area==new newTextArea("area TextArea("areaeditable", editable",4,4,20); 20); panel.add(area); panel.add(area); add(panel); add(panel);////añade añadeelelpanel panelalalframe frame setVisible(true); setVisible(true); }} public publicstatic staticvoid voidmain(String main(Stringargs[]) args[]){{ GUISimple GUISimpleventana ventana==new newGUISimple(); GUISimple(); ventana.setTitle("ventana ventana.setTitle("ventanatipo tipoframe");}} frame");}} 11 Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 12 Cuadros de comprobación y botones radio ! Ejemplo - Cuadro de comprobación y radio Cuadro de comprobación - Clase Checkbox ! import importjava.awt.*; java.awt.*; public publicclass classGUISimple2 GUISimple2extends extendsFrame Frame{{ public publicGUISimple2 GUISimple2(){ (){ setSize(200, setSize(200,100); 100); Panel Panelpanel panel==new newPanel(); Panel(); panel.add(new panel.add(newCheckbox Checkbox("Seleccionar")); ("Seleccionar")); CheckboxGroup CheckboxGroupradio radio==new newCheckboxGroup(); CheckboxGroup(); Checkbox CheckboxbotonR1 botonR1==new newCheckbox("Uno", Checkbox("Uno",radio, radio,false); false); Checkbox CheckboxbotonR2 botonR2==new newCheckbox("Dos", Checkbox("Dos",radio, radio,true); true); Checkbox CheckboxbotonR3 botonR3==new newCheckbox("Tres", Checkbox("Tres",radio, radio,false); false); panel.add(botonR1); panel.add(botonR1); panel.add(botonR2); panel.add(botonR2); panel.add(botonR3); panel.add(botonR3); add(panel);// add(panel);//añade añadeelelpanel panelalalframe frame setVisible(true); setVisible(true); }} ////...... Casilla que permite realizar una elección simple (si-no) • Incluye una etiqueta y una pequeña casilla a marcar • Tiene un campo booleano estado (true - marcado) ! Botones de radio - Clase CheckboxGroup ! ! Proporciona una elección única y excluyente entre un grupo de cuadros de comprobación Agrupa a un conjunto de cuadros de comprobación • Cambia su aspecto y comportamiento Cuadro de comprobación marcado Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 13 Listas y alternativas ! ! ! ! Permite seleccionar sólo un elemento de la lista desplegable La etiqueta muestra la selección actual Ocupa un número fijo de líneas Permite la selección de una o múltiples opciones Juan Pavón Mestras Facultad de Informática UCM, 2004 Botón de radio seleccionado 14 public publicclass classGUISimple2 GUISimple2extends extendsFrame Frame{{ public publicGUISimple2 GUISimple2(){ (){ setSize(200, setSize(200,100); 100); Panel Panelpanel= panel=new newPanel(); Panel(); panel.add(new panel.add(newLabel("Lista Label("Listade dealternativas: alternativas:")); ")); Choice Choicealternativa= alternativa=new newChoice();;// Choice();;//crea creauna unalista listade dealternativas alternativas alternativa.addItem("Blanco"); alternativa.addItem("Blanco"); alternativa.addItem("Rojo"); alternativa.addItem("Rojo"); alternativa.addItem("Amarillo"); alternativa.addItem("Amarillo"); panel.add(alternativa); panel.add(alternativa); panel.add(new panel.add(newLabel("Lista Label("Listade deseleccion seleccionmultiple: multiple:")); ")); List Listlista lista==new newList(4, List(4,true); true); lista.add lista.add("White"); ("White"); lista.add("Red"); lista.add("Red"); lista.add("Yellow"); lista.add("Yellow"); panel.add(lista); panel.add(lista); add(panel); add(panel); setVisible(true); setVisible(true); }} ////...... Listas de elección - Clase List ! Java AWT Ejemplo - listas y alternativas Alternativas o listas desplegables - Clase Choice ! Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 15 Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 16 Ventanas y menús ! Ejemplos - Dialog y Menu Cuadro de diálogo - Clase Dialog • Produce una nueva ventana que normalmente se utiliza para obtener entradas del usuario • Si es modal bloquea el resto de ventanas (para exigir una respuesta) • No pueden existir de forma independiente sino asociadas a un frame ! Ventana Dialog Componente desplegable del menú Ventana de selección de fichero - Clase FileDialog • Ventana desde la cual el usuario puede seleccionar un fichero • Hay dos opciones: abrir y guardar el fichero ! Elemento del menú Barra de menú (Asociada al frame) Barra de menú - Clase MenuBar Separador • Encapsula el concepto de barra de menú asociada a un frame ! Componente desplegable del menú - Clase Menu ! Elemento de un menú - Clase MenuItem • Componente desplegable de una barra de menú Elemento marcable • Cada uno de los elementos de un componente desplegable de menú • Otros elementos: Submenús, Separadores y Elementos marcables Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 17 Componentes gráficos en applets import java.awt.*; import java.applet.Applet; // crea una etiqueta etiqueta = new Label(“Una etiqueta"); add(etiqueta); // crea un campo de texto texto = new TextField(10); add(texto); Juan Pavón Mestras Facultad de Informática UCM, 2004 ! Cómo se colocan los componentes (usando el método add) depende del gestor de disposición del contenedor (layout manager) ! Tipos de disposiciones: ! 18 FlowLayout • Los componentes se ponen de izquierda a derecha hasta llenar la línea, y se pasa a la siguiente. Cada línea se centra // crea 3 cajas de elección exclusiva grupo = new CheckboxGroup(); public void init() { // crea una lista de alternativas alternativa = new Choice(); alternativa.addItem("Blanco"); alternativa.addItem("Colorado"); alternativa.addItem("Amarillo"); add(alternativa); Java AWT Disposición de los componentes (layout manager) // crea un botón boton = new Button("Púlsame"); add(boton); public class AppletConGUI extends Applet { Button boton; Choice alternativa; TextField texto; Checkbox checkbox; CheckboxGroup grupo; Label etiqueta; Juan Pavón Mestras Facultad de Informática UCM, 2004 • ! Por defecto, en paneles y applets BorderLayout • Se ponen los componentes en un lateral o en el centro • se indica con una dirección:“East”, “West”, “North”, “South”, “Center” checkbox = new Checkbox("Sí", grupo, false); add(checkbox); checkbox = new Checkbox("No", grupo, false); add(checkbox); checkbox = new Checkbox("Tal vez", grupo, false); add(checkbox); } • ! Por defecto, en marcos GridLayout • Se colocan los componentes en una rejilla rectangular (filas x cols) • Se añaden en orden izquierda-derecha y arriba-abajo ! Para poner una disposición se utiliza el método setLayout(): GridLayout nuevolayout = new GridLayout(3,2); setLayout(nuevolayout); } Java AWT 19 Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 20 Disposición de los componentes (layout manager) Disposición de componentes en un applet contenedor ! componente1 componente2 componente3 componente4 Un applet puede tener varios contenedores, cada uno con su propia gestión de disposición applet FlowLayout componente5 contenedor componente6 componente1 componente2 contenedor componente1 componente2 componente3 componente4 componente5 Juan Pavón Mestras Facultad de Informática UCM, 2004 contenedor GridLayout(3,2) componente4 componente5 componente6 Java AWT 21 Disposición de los componentes (layout manager) ! componente3 Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 22 Java AWT 24 Administradores de diseño GridBagLayout ! ! Similar al GridLayout pero mas versátil Presenta los componentes en una rejilla, pero: • Un componente puede ocupar más de una fila y más de una columna • Las filas y las columnas pueden tener tamaños diferentes • No se tiene que rellenar en un orden predeterminado ! Utiliza GridBagConstraints para especificar como deben colocarse, distribuirse, alinearse, etc., los componentes Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 23 Juan Pavón Mestras Facultad de Informática UCM, 2004 La clase Graphics ! ! ! La clase Graphics Clase abstracta que es la base para los contextos gráficos que permiten a una aplicación dibujar los componentes independientemente del dispositivo de salida Un contexto gráfico es un objeto que funciona junto con las ventanas para mostrar los objetos gráficos Habitualmente no hay que crear ningún contexto gráfico ya que esto es parte del framework de AWT Proporciona métodos para dibujar, rellenar, pintar imágenes, copiar áreas y pegar gráficos en pantalla ! ! ! ! ! ! • Se obtiene mediante el método getGraphics() ! ! Mediante el método paint(Graphics contexto) se determina que es lo que se debe mostrar en dicho contexto drawLine drawRect y fillRect drawPolygon drawPolyline drawOval y fillOval drawArc y fillArc x (100,0) (0,0) y para escribir texto ! ! ! drawString setFont y (0,100) Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 25 Ejemplo gráfico con Canvas Java AWT Java AWT 26 Ejemplo gráfico con un applet public publicclass classEjemploCanvas EjemploCanvasextends extendsCanvas Canvas{{ ////sesepuede puedeañadir añadiraaun unframe framepara paravisualizarlo visualizarlo String Stringcad cad=="Escrito "Escritoen encanvas"; canvas"; ////este estemetodo metodoseseejecuta ejecutaautomaticamente automaticamentecuando cuandoJava Javanecesita necesitamostrar mostrarlalaventana ventana public publicvoid voidpaint(Graphics paint(Graphicsg)g){{ ////obtener obtenerelelcolor colororiginal original Color ColorcolorOriginal colorOriginal==g.getColor(); g.getColor(); ////escribir escribirtexto textografico graficoen enlalaventana ventanayyrecuadrarlo recuadrarlo g.drawString(cad, g.drawString(cad,40, 40,20); 20); g.drawRect(35, g.drawRect(35,8,8,(cad.length()*7), (cad.length()*7),14); 14); ////dibujo dibujode dealgunas algunaslineas lineas for for(int (inti=20; i=20;i<i<50; 50;i=i=i+3) i+3){{ ifif((i g.setColor(Color.blue); ((i%%2)2)== ==0)0) g.setColor(Color.blue); else g.setColor(Color.red); else g.setColor(Color.red); g.drawLine(40, g.drawLine(40,(90-i), (90-i),120, 120,25+i); 25+i); }} ////dibujo dibujoyyrelleno rellenode deun unóvalo óvalo g.drawOval(40, g.drawOval(40,95, 95,120, 120,20); 20); g.fillOval(40, g.fillOval(40,95, 95,120, 120,20); 20); g.setColor(colorOriginal); g.setColor(colorOriginal); }} }} Juan Pavón Mestras Facultad de Informática UCM, 2004 Juan Pavón Mestras Facultad de Informática UCM, 2004 (width-1,height-1) import java.awt.*; public class Lámpara extends java.applet.Applet { public void paint(Graphics g) { g.fillRect(0,250,290,290); // la mesa donde se pone la lámpara g.drawLine(125,250,125,160); // la base de la lámpara g.drawLine(175,250,175,160); g.drawArc(85,157,130,50,-65,312); // parte superior e inferior g.drawArc(85,87,130,50,62,58); g.drawLine(85,177,119,89); // laterales g.drawLine(215,177,181,89); g.fillArc(78,120,40,40,63,-174); // adornos g.fillOval(120,96,40,40); g.fillArc(173,100,40,40,110,180); } } 27 Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 28 Eventos en AWT ! ! Tratamiento de eventos Las acciones de usuario en un componente disparan eventos Un evento es un objeto de la clase AWTEvent que indica: ! ! ! ! ! ! El tipo de evento, por ejemplo, pulsar el ratón El objeto sobre el que se produjo el evento, con el método getSource(), por ejemplo, un botón Dependiendo del tipo, información adicional: ! Tratar el evento ! Interrumpir el proceso del evento • Al pulsar RETURN el usuario se puede procesar el texto • Si se considerara el texto inválido no se procesaría ni se pasaría el evento a contenedores superiores Ambas están definidas en el paquete java.awt De AWTEvent hay especializaciones: WindowEvent, FocusEvent, InputEvent (KeyEvent y MouseEvent), etc. Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 29 Tratamiento de eventos ! ! Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 30 Tratamiento de eventos El mecanismo de tratamiento de eventos en Swing/AWT se basa en delegación: ! ! ! NOTA: La clase AWTEvent ha reemplazado la clase Event (desde 1.1) ! ! Ignorarlo y pasárselo al componente que le contiene Modificar el evento antes de pasárselo al contenedor superior • Por ejemplo, un componente TextField podría convertir el texto introducido por el usuario a mayúsculas antes de pasarlo • La posición (x, y) donde se produjo el evento • La tecla que se pulsó (para eventos de teclado) • El estado de las teclas modificadoras (CTRL, SHIFT, ...) presionadas o no por el usuario cuando sucedió el evento • ... ! Al llegar un evento, un componente puede: ! Para tratar un evento hay que registrar un oyente de tipo adecuado en el componente que genera dicho evento) Más flexible que el modelo basado en herencia presente en el antiguo Java 1.0 Pueden tenerse múltiples oyentes para un mismo evento, cambiar dinámicamente de oyentes según convenga, o tener un mismo oyente para tratar eventos semánticamente relacionados: p.ej. un item de menú y un botón que permite invocar la misma acción pueden tener asociado el mismo actionListener Dos categorías de eventos: ! Eventos de bajo nivel • Están relacionados con la interacción física con la interfaz (por ejemplo, ¿qué botón del ratón se ha pulsado?) • Ejemplos: MouseInputEvent, WindowEvent y KeyEvent ! Eventos de alto nivel, o semánticos • Representan operaciones lógicas realizadas sobre los elementos (por ejemplo, se ha pulsado el botón “Salir” en la interfaz) • ActionEvent Se sigue un patrón de nombrado común, que facilita el uso del modelo: ! Si un componente c notifica un evento XXXEvent, existirá una clase para los oyentes de este evento llamada XXXListener, y en c existirá un método addXXXListener, que permite registrar oyentes de dicha clase para tratar el evento Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 31 Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 32 Tratamiento de eventos ! Tratamiento de eventos Un evento se puede procesar: ! ! En el marco (Frame) o panel (Applet): • action() (Evento ACTION_EVENT) • Por medio del método handleEvent(Event), para cualquier evento, por ejemplo para gestionar el evento de destrucción de ventana • Por medio del método action(Event, Object), orientado a gestionar eventos de los componentes Button, Checkbox, Choice, List, MenuItem, y TextField • Por medio de métodos específicos para elementos de entrada específicos como el teclado o el ratón • mouseEnter() (Evento MOUSE_ENTER) • mouseExit() (Evento MOUSE_EXIT) • mouseMove() (Evento MOUSE_MOVE) • mouseDown() (Evento MOUSE_DOWN) • mouseDrag() (Evento MOUSE_DRAG) • mouseUp() (Evento MOUSE_UP) • keyDown() (Evento KEY_PRESS o Event.KEY_ACTION) • mouseDown, mouseDrag, keyDown, keyUp, ... ! La clase Component define los siguientes métodos para tratar distintos tipos de eventos (ComponentEvent): • keyUp() (Evento KEY_RELEASE o Evento KEY_ACTION_RELEASE) En la componente particular • gotFocus() (Evento GOT_FOCUS) • Redefiniendo el método action(Event, Object) • lostFocus() (Evento LOST_FOCUS) • handleEvent() (todo tipo de eventos) Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 33 Tratamiento de eventos ! ! ! Java AWT 34 Eventos Cuando ocurre un evento se llama al método de gestión del evento correspondiente: ! Juan Pavón Mestras Facultad de Informática UCM, 2004 ! Ejemplo: Gestión del uso de botones con action() import java.awt.*; Primero se pasa a handleEvent() que en su implementación por defecto llama al método apropiado al tipo de evento En general utilizaremos los métodos de eventos particulares: mouseDown, action, keyDown,... public class DemoBotón extends java.applet.Applet { Button b1, b2, b3; public void init() { b1 = new Button(); b1.setLabel("Inhibe el botón central"); b2 = new Button("Botón central"); b3 = new Button("Activa botón central"); b3.setEnabled(false); Es importante que el tratamiento de un evento sea rápido para evitar la degradación de la eficiencia del sistema add(b1); add(b2); add(b3); // Para añadir componentes a un contenedor ya visible hay que hacer: validate(); } // ... Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 35 Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 36 Eventos Tratamiento de eventos // ... public boolean action(Event e, Object arg) { Object target = e.target; ! El método que procesa un evento devuelve: ! true: si el evento ha sido gestionado ! false: el evento no ha sido gestionado • El evento no se propaga if (target == b1) { //Se pulsó “Inhibir botón central” b2.setEnabled(false); b1.setEnabled(false); b3.setEnabled(true); return true; } if (target == b3) { // Se pulsó “Activar botón central” b2.setEnabled(true); b1.setEnabled(true); b3.setEnabled(false); return true; } return false; • Se propaga al contendor del componente actual • Por ejemplo, un botón puede delegar en el panel que lo contiene el procesamiento de un evento ! Lo normal es que si se trata el evento se devuelva true, a menos que se quiera hacer un tratamiento adicional en algún contenedor de nivel superior } } Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 37 Juan Pavón Mestras Facultad de Informática UCM, 2004 Java AWT 38