Capitulo 14 Programando GUI y Eventos The Mc

































































- Slides: 65
Capitulo 14 Programando GUI y Eventos ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 1
Objetivos – Definir una subclase de JFrame para implementar una ventana marco a medida – Escribir programas manejados por eventos usando el modelo de delegación de Java – Disponer objetos GUI (interfase de usuario gráfica) sobre una ventana usando manejadores de diseño (layout managers) y paneles anidados – Escribir aplicaciones GUI usando objetos JButton, JLabel, Image. Icon, JText. Field, JText. Area, JCheck. Box, JRadio. Button, JCombo. Box, Jlist y JSlider del paquete javax. swing – Escribir aplicaciones GUI con menúes – Escribir aplicaciones GUI que procese eventos de ratón
Interfase Gráfica de Usuarios GUI • Una aplicación normalmente consta de una o más ventanas con las q’ el usuario puede interactuar. • Las ventanas y los objetos con los que interactua el usuario se conocen como GUI • En Java, programas basados en GUI se implementan usando clases de los paquetes javax. swing y java. awt. • Las clases Swing dan mayor compatibilidad entre los distintos SO. Están totalmente implementadas en Java, y se comportan de la misma forma, independientemente del SO. • Swing livianas totalmente en java lightweight • awt pesadas usan los GUI nativos heavyweight • Ej el botón se implementa usando los botones de windows en windows, el botón Macintosh en Mac, etc ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 3
Ej Objetos GUI • Varios objetos GUI del paquete javax. swing. ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 4
Prog orientada a eventos • Para crear una aplicación efectiva usando GUI se usa un nuevo estilo de control de operación llamado programación manejada por eventos. • Ocurre un evento cuando: se mueve el cursor, se presiona un botón, se elige una opción de menú, etc • Los objetos se programan para que respondan a los eventos diseñando métodos de manejo de eventos. • La mayoría de las aplicaciones actuales GUI se maneja por eventos. ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 5
Herencia de JFrame Object java. lang Component * def un obj q’ pde mostrarse ej botón Container * def un componente q’ pde contener otro componente Windows * def una ventana básica sin título ni borde, eventos Frame * def un ventana con título y bordes JFrame ** Paquetes ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. def un frame con capacidades extendidas * java. awt ** javax. swing 6
Subclase de JFrame • Para crear una marco de ventana a medida, definimos una subclase de la clase JFrame. • La clase JFrame contiene la funcionalidad rudimentaria para soportar las características encontradas en cualquier marco de ventana. ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 7
Creando un JFrame import javax. swing. *; class Ch 7 Default. JFrame { public static void main( String[] args ) { JFrame default. JFrame; default. JFrame = new JFrame(); default. JFrame. set. Visible(true); } } ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 8
Creando una Subclase de JFrame • Para definir una subclase de otra, declaramos a la subclase con la palabra reservada extends. import javax. swing. *; class Ch 7 JFrame. Subclass 1 extends JFrame {. . . } ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 9
Customizing Ch 14 JFrame. Subclass 1 • Una instancia de Ch 14 JFrame. Subclass 1 tendrá las sig características: – – El título se pone a My First Subclass. El programa termina cuando se presiona en el cuadro de cerrar El tamaño del marco es de 300 pixeles de ancho por 200 de alto. Se posiciona el marco en las coordenadas (150, 250). • Estas propiedades están incluidas en el constructor por defecto.
JFrame. Subclass 1. class import javax. swing. *; class JFrame. Subclass 1 extends JFrame{ private static final int ANCHO= 300; private static final int ALTO= 200; private static final int ORIGEN_X= 150; private static final int ORIGEN_Y= 250; public JFrame. Subclass 1 (){ set. Title (“My First Subclass”); set. Size (ANCHO, ALTO); set. Location (ORIGEN_X, ORIGEN_Y); set. Default. Close. Operation(EXIT_ON_CLOSE); } ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 11
Mostrando JFrame. Subclass 1 • La ventana marco JFrame. Subclass 1 sobre la pantalla ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 12
Set. Default. Close. Operation() Determina lo que ocurre cuando se cierra la ventana desde el ícono EXIT_ON_CLOSE Cierra la ventana y libera la ventana y todas las componentes y cierra la aplicación DISPOSE_ON_CLOSE El marco y sus componentes se eliminan pero la aplicación no termina DO_NOTHING_ON_CLOSE Hace inefectiva la operación del cierre de ventana HIDE_ON_CLOSE Sólo oculta la ventana llamando a set. Visible() false, se puede volver a mostrar ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 13
El panel de contenido (Content Pane) de un JFrame • El panel de contenido es donde ponemos los objetos GUI tales como botones, títulos, barras de desplazamiento, etc • Accedemos al panel de contenido llamando al método get. Content. Pane de su marco. El área gris es el panel de contenido de este marco ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 14
JRoot. Pane • Los contenedor de 1 er plano (JFrame, JApplet, JDialog, etc) delegan sus operaciones a JRoot. Pane • Este panel raíz maneja el panel de contenidos y la barra de menú a través de otros contenedores • Los GUI se agregan a panel de contenidos ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 15
JRoot. Pane • El JRoot. Pane está compuesto por un glass. Pane, un content. Pane y una barra de menú opcional. • El content. Pane y la barra de menú, si existen, son manejados por un objeto JLayered. Pane Referencia: java. sun. com Understanding Containers ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 16
Cambiando el color de fondo • Cambio del color de fondo a azul del panel de contenidos Container content. Pane = get. Content. Pane(); content. Pane. set. Background(Color. BLUE); Arch fuente: Ch 14 JFrame. Subclass 2. java ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 17
Poniendo objetos GUI sobre un marco • Hay dos maneras de poner objetos GUI sobre el panel de contenidos del marco: – Usar un manejador de diseño (layout manager) • Flow. Layout (por defecto) • Border. Layout • Grid. Layout – Usar un posicionamiento absoluto • Poner un manejador de diseño null (null layout manager) ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 18
Poniendo un Botón • Un objeto JButton es un componente GUI que representa un Botón de selección (pushbutton). • Ej de como poner un botón usando Flow. Layout. content. Pane. set. Layout( new Flow. Layout()); ok. Button = new JButton("OK"); cancel. Button = new JButton("CANCEL"); content. Pane. add(ok. Button); content. Pane. add(cancel. Button); ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 19
Ajustar el tamaño de los botones • El tamaño de los botones se ajusta al texto que contiene, el botón Cancel es mayor que el Ok. • Usar el método set. Size() para especificar el tamaño hay que llamarlo antes que al método add() • . . . JButton ok. Button = new JButton(“OK”); ok. Button. set. Size(80, 30); content. Pane. add(ok. Button); JButton cancel. Button = new JButton(“CANCEL”); cancel. Button. set. Size(80, 30); content. Pane. add(cancel. Button); . . ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 20
Eventos y SO • Las acciones sobre los GUI son identificadas por el SO • El SO determina a cual de los programas que se están ejecutando debe notificar • Un click del mouse es registrado por el SO determinando la posición sobre la pantalla, det que aplicación controla esa ventana y coumunica la accción al programa • La señal que recibe el programa desde el SO se llama evento ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 21
Definiciones • Una acción sobre un objeto GUI, como presionar un botón se llama evento. • El mecanismo para procesar los eventos se llama manejar eventos (event handling). • El modelo de Java de manejo de eventos se basa en el concepto conocido como delegación (delegation-based event model). • Con este modelo, el manejo de eventos se implementa por dos tipos de objetos : – Objetos fuente de eventos (event source objects) – Objetos escuchadores de eventos (event listener objects) ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 22
Objetos Fuentes de Eventos • Un objeto fuente de eventos es el objeto GUI en el que ocurre el evento. • Decimos que una fuente de eventos genera un evento. • Botones, cajas de texto, listas menús son fuentes de eventos comunes en las aplicaciones basadas en interfase gráfica del usuario. • Aunque es posible, en general no definimos nuestras propias fuentes de eventos cuando se escriben aplicaciones basadas en GUI ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 23
Objetos oyentes de eventos • Un oyente de eventos es un objeto que incluye un método que se ejecutará en respuesta a un evento generado • El oyente debe asociarse, o registrarse a una fuente, de manera que se notifique cuando la fuente genera el evento. ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 24
Conectando Fuentes y escuchadores Fuente de evento JButton notify Oyente de evento Handler register Un oyente debe registrarse a la fuente. Una vez registrado él será notificado cuando la fuente genere un evento. ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 25
Tipos de eventos • La registración y notificación es específica del tipo de eventos • Escuchador del ratón maneja eventos de ratón • Escuchador de items maneja eventos de selección de items , etc • Entre los diferentes tipos de eventos, el evento de acción (action event) es el más común. – Elegir un botón genera un evento de acción – Elegir un item de menú genera un evento de acción, etc • Eventos de acción son generados por fuentes de eventos de acción (action event sources) y manejados por escuchadores de eventos de acción (action event listeners). ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 26
Manejando Eventos de Acción action event source action. Performed JButton action event listener Button Handler add. Action. Listener JButton button = new JButton("OK"); Button. Handler handler = new Button. Handler( ); // esta clase se muestra a continuación button. add. Action. Listener(handler); ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 27
Registro del listener class Mi. Manejador. Boton implements Action. Listener Presion . . button. add. Action. Listener(this); OK . . . . Crea Objeto Action. Event ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. Pasado a void action. Performed(Action. Event)); // cod a ejecutar cuando se aprieta boton 28
Interfase Action. Listener • Cuando llamamos al método add. Action. Listener de una fuente de eventos, debemos pasarle una instancia de la clase que implementa la interfase Action. Listener. button. add. Action. Listener(handler) o button. add. Action. Listener(this) • La interfase Action. Listener incluye un método llamado action. Performed. Una clase que implemente la interfase Action. Listener debe proveer el cuerpo del método de action. Performed. • Ya que action. Performed es el método que se invoca cuando se genera un evento aquí es donde se coloca el código que deseamos se ejecute en respuesta al evento ocurrido ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 29
La clase Button. Handler import javax. swing. *; import java. awt. event. *; class Button. Handler implements Action. Listener { // implementación del mét busca la fuente del evento public void action. Performed(Action. Event event) { JButton clicked. Button = (JButton) event. get. Source(); JRoot. Pane root. Pane Frame frame = clicked. Button. get. Root. Pane( ); = (JFrame) root. Pane. get. Parent(); frame. set. Title(“Ud Eligió " + clicked. Button. get. Text()); } } ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 30
Container como Oyente de Evento • En vez de definir un oyente de eventos separado, tal como Button. Handler, es más común tener un objeto que contiene las fuentes de eventos a ser escuchadas • Ej: Este marco es el oyente de los eventos de acción de los botones que contiene event listener event source Oyente de eventos Fuente de eventos ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 31
Ch 14 JButton. Frame. Handler. . . class Ch 14 JButton. Frame. Handler extends JFrame implements Action. Listener {. . . cancel. Button. add. Action. Listener(this); // el objeto de la subclase JFrame es el oyente ok. Button. add. Action. Listener(this); . . . public void action. Performed(Action. Event event) { JButton clicked. Button = (JButton) event. get. Source(); String button. Text = clicked. Button. get. Text(); set. Title("You clicked " + button. Text); } } ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 32
Clases GUI de Texto • Las clases JLabel, JText. Field y JText. Area se usan para campos de texto • Un obj JLabel muestra objetos no editables (o imágenes) • Un obj JText. Field permite que el usuario ingrese una línea de texto • Un obj. JText. Area permite que el usuario entre múltiples líneas de texto. Puede usarse para texto no editable taa ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 33
Jerarquia de clases GUI texto ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. Ref: java. sun. com 34
Ej Uso de GUI Texto ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. Ref: java. sun. com 35
JText. Field • Se genera un evento de acción, al igual que con JButton, cuando se presiona ENTER sobre el GUI • El mét get. Text de JText. Field permite obtener el texto ingresado JText. Field input = new JText. Field( ); input. add. Action. Listener(event. Listener); content. Pane. add(input); ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 36
Modif para que maneje el evento la subclase de JFrame. . . . JText. Field input. Line = new JText. Field( ); input. Line. set. Columns(22); // nro de caracteres visibles content. Pane. add (input. Line) input. Line. add. Action. Listener(this); . . . public void action. Performed(Action. Event event){ if (event. get. Source() intanceof JButton ){ JButton elegido = (JButton) event. get. Source(); String texto = elegido. get. Text(); set. Title (“Ha elegido “ + texto); } else { // la fuente del evento es inputline //set. Title (“Ha ingresado ‘ “ + input. Line. get. Line() + “ ’ ’”); }. . . } JText. Field text. Field = (JText. Field) event. get. Source(); set. Title(“Ha ingresado ‘ “ + text. Field. get. Text() + “ ’ ’”); }. . . . } ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. o 37
JLabel • JLabel se usa para mostrar una etiqueta • Puede ser texto o imágen. No genera eventos • Cuando creamos una imágen, se le pasa un objeto Image. Icon en vez de un String JLabel text. Label = new JLabel("Please enter your name"); content. Pane. add(text. Label); // imagen JLabel img. Label = new JLabel(new Image. Icon("cat. gif")); content. Pane. add(img. Label); ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 38
Ch 14 Text. Frame 2 JLabel (con un texto) (con una imágen) JText. Field ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 39
JText. Area • JText. Area para mostrar o permitir el ingreso de múltiples líneas de texto • El mét set. Text() asigna el texto a JText. Area, reemplazando el contenido • El mét append() agrega el texto al actual JText. Area text. Area = new JText. Area( ); . . . Hello the lost world text. Area. set. Text("Hellon"); text. Area. append("the lost "); text. Area. append("world"); ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. JText. Area 40
Ch 14 Text. Frame 3 • El estado de Ch 14 Text. Frame 3 después de ingresar 6 palabras ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 41
Cuadro del JText. Area. . . JText. Area area. Texto = new JText. Area(); area. Texto. set. Columns(22); area. Texto. set. Rows(8); // idem new JText. Area(22, 8) area. Texto. set. Border(Border. Factory. create. Line. Border(Color. RED)); area. Texto. set. Editable=(false); // por defecto es editable content. Pane. add(area. Texto); . . . String texto. Ingresado = input. get. Text(); //area. Texto. append(texto. Ingresado + “n”); // dde de la plataf area. Texto. append(texto. Ingresado + System. get. Property(“line. separator”); ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 42
Agregar una barra de desplazamiento • Por defecto JText. Area no tiene una barra. • Para que la tenga hay que colocar al JText. Area en un panel con desplazamiento (JScroll. Pane). JText. Area text. Area = new JText. Area(); . . . JScroll. Pane scroll. Text = new JScroll. Pane(text. Area); scroll. Text. set. Size(200, 135); scroll. Text. set. BOrder(Border. Factory. create. Line. Border(Colo r. red)); // se agrega a la barra content. Pane. add(scroll. Text); . . . ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 43
Ch 14 Text. Frame 3 con barra desplazam • Ej ventana Ch 14 Text. Frame 3 usando JScroll. Pane ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 44
Manejadores de Presentación (Layout Managers) • Los manejadores de presentación determinan como se agregan los objetos GUI al contenedor (content pane o un frame) • Entre otros los mas comunes son: - Flow. Layout (Ch 14 Flow. Layout. Sample. java) – Border. Layout (Ch 14 Border. Layout. Sample. java) – Grid. Layout (Ch 14 Grid. Layout. Sample. java) – Taa: Card. Layout y Grid. Bag. Layout. ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 45
Flow. Layout • Los componentes se ubican de izquierda a derecha y de arriba a abajo • Por defecto los componentes en cada línea se centran. • Cuando el marco que contiene un componente se modifica de tamaño, los componentes se ajustan de acuerdo al nuevo espacio ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 46
Ej Flow. Layout Cinco botones usando Flow. Layout. ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 47
Border. Layout • Este divide al contenedor en 5 regiones: centro, norte, sur, este y oeste Las regiones norte y sur se expanden o contraen sólo en altura Las regiones este y oeste sólo en ancho La central en ambas ancho y alto. No es necesario que se ocupen todas las regiones • Para poner una componente sobre el layout se especifica la región empleando las constantes • ej. content. Pane. add(boton 1, Border. Layout. North); ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 48
Border. Layout Sample ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 49
Grid. Layout • Coloca los componentes en una grilla igualmente espaciada de N x M • Los componentes se colocan de arriba a abajo y de izquierda a derecha. • El número de filas y columnas permanece sin cambios despues de que se modifica tamaño pero el ancho y alto de cada región se adapta • Se puede crear una grilla de sólo una columna o sólo una fila poniendo columna en 0 o fila en 0 set. Layout(new Grid. Layout(0, 6, 10); 1 fila set. Layout(new Grid. Layout(6, 0, 10); 1 columna ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 50
Grid. Layout Sample ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 51
Paneles Anidados • Es posible pero díficil poner a todos los componentes GUI en un sólo contenedor. • Es más fácil usar varios paneles, colocando uno dentro de otro. • Crearemos dos marcos que contengan paneles anidados. • Ch 14 Nested. Panels 1. java tablero para el juego del Ta Te Ti • Ch 14 Nested. Panels 2. java interfase para el juego Alto. Bajo ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 52
Paneles de Alto Bajo (Hi. Lo). . public Ch 14 Nested. Panels 2( ) { JPanel guess. Panel, hint. Panel, control. Panel, button. Panel; JButton enter. Btn, cancel. Btn; . . Container content. Pane; content. Pane = get. Content. Pane( ); content. Pane. set. Layout(new Grid. Layout(3, 1)); //grilla 3 // 1 er panel de la grilla guess. Panel = new JPanel(); guess. Panel. set. Border(Border. Factory. create. Titled. Border( "Your Guess")); guess. Panel. add(guess. Entry = new JText. Field(10)); . . Cont ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 53
cont. paneles Hi. Lo hint. Panel = new JPanel(); // 2 do panel de la grilla hint. Panel. set. Border(Border. Factory. create. Titled. Border ("Hint")); hint. Panel. add(hint = new JLabel("Let's Play Hi. Lo")); control. Panel = new JPanel(new Border. Layout()); button. Panel = new JPanel(); // flow. Layout button. Panel. add(enter. Btn = new JButton(ENTER)); button. Panel. add(cancel. Btn = new JButton(CANCEL)); control. Panel. add(button. Panel, Border. Layout. SOUTH); content. Pane. add(guess. Panel); content. Pane. add(hint. Panel); content. Pane. add(control. Panel); } } ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 54
Otras componentes GUI comunes • JCheck. Box – ver Ch 14 JCheck. Box. Sample 1. java y. Ch 14 JCheck. Box. Sample 2. java • JRadio. Button – ver Ch 14 JRadio. Button. Sample. java • JCombo. Box – ver. Ch 14 JCombo. Box. Sample. java • JList – ver Ch 14 JList. Sample. java • JSlider – ver Ch 14 JSlider. Sample. java implementar la interfase Item. Listener para obtener el item elegido además de Action. Listener ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 55
JCheck. Box ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 56
JCheck. Box Selección Para crear un JChek. Box con el texto Java: JCheck. Box cb. Btn = new JCheck. Box(“Java”); Para ver si ha sido seleccionado: if (cb. Btn. is. Selected()){ System. out. println (“You can program in ” + cb. Btn. get. Text()); }else { System. out. println (“You cannot program in ” + cb. Btn. get. Text()); } ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 57
JCheck. Box, JRadio. Button • JCheck. Box genera al = que otros botones un evento de acción • Además genera otro tipo de eventos: eventos de item (item events) • Este se genera cuando cambia de estado (seleccionado – no seleccionado y viceversa) • Cuando se genera un evento de item se llama al met item. State. Changed(Item. Event event) • dentro del mét. se verifica el estado con: get. State. Chage() ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 58
Menús • El paquete javax. swing contiene tres clases de menú: JMenu. Bar, Jmenu y JMenu. Item. • JMenu. Bar es una barra donde se coloca el menú. Hay una barra de menú por marco. • JMenu (tal como Archivo o Editar) es un grupo de opciones. Un JMenu. Bar puede incluir varios JMenu. • JMenu. Item (tal como copiar, cortar pegar) son las posibles elecciones de un objeto JMenu. • Sólo los JMenu. Item generan eventos. ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 59
public void item. State. Change(Item. Event event) if event. get. State. Change()==Item. Event. SELECTED){ System. out. println (“Eligió esta caja”); }else{ System. out. println (“No eligió esta caja”); } } ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 60
Componentes de un Menú Edit JMenu. Bar File Edit View Help JMenu. Item separator ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 61
Creación de un Menú 1. Crear un obj JMenu. Bar y asociarlo a un frame 2. Crear un objeto JMenu 3. Crear un objeto JMenu. Item y y agregarlo a un objeto JMenu. 4. Adjuntar el objeto JMenu al JMenu. Bar. ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 62
Sentencias para crear un Menu // Crea un Menu filemenu = new JMenu (“File”); // Crea los items de un menu item = new JMenu. Item (“New”); item. add. Action. Listener (this); filemenu. add(item); // Crea una linea separadora filemenu. add. Separator(); ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 63
Sentencias para crear un Menu cont // adjuntar a la barra de menu JMenu. Bar menu. Bar = new JMenu. Bar(); set. Menu. Bar (menu. Bar); // la adjunta al frame menu. Bar. add(file. Menu); menu. Bar. add(edit. Menu); // mostrar que item se eligió response = new JLabel (“Prueba del menú”); response. set. Size(250, 50); content. Pane. add(response); ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 64
Obtener el item elegido - Si la fuente de un evento es un menu, el met get. Action. Comand de Action. Event devuelve el texto del menu. . . String menu. Name; menu. Name = event. get. Action. Comand(); if (menu. Name. equals (“Quit”)){ System. exit(0); } else { response. set. Text (“Se eligio “ + menu. Name ); } ©The Mc. Graw-Hill Companies, Inc. Permission required for reproduction or display. 65