Download Chapter 14
Document related concepts
no text concepts found
Transcript
Capitulo 14 Programando GUI y Eventos ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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, ImageIcon, JTextField, JTextArea, JCheckBox, JRadioButton, JComboBox, Jlist y JSlider del paquete javax.swing – Escribir aplicaciones GUI con menúes – Escribir aplicaciones GUI que 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 3 Ej Objetos GUI • Varios objetos GUI del paquete javax.swing. ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. def un frame con capacidades extendidas * java.awt ** javax.swing 4th Ed Chapter 14 - 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 7 Creando un JFrame import javax.swing.*; class Ch7DefaultJFrame { public static void main( String[] args ) { JFrame defaultJFrame; defaultJFrame = new JFrame(); defaultJFrame.setVisible(true); } } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 Ch7JFrameSubclass1 extends JFrame { . . . } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 9 Customizing Ch14JFrameSubclass1 • Una instancia de Ch14JFrameSubclass1 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. JFrameSubclass1.class import javax.swing.*; class JFrameSubclass1 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 JFrameSubclass1 (){ setTitle (“My First Subclass”); setSize (ANCHO, ALTO); setLocation (ORIGEN_X, ORIGEN_Y); setDefaultCloseOperation(EXIT_ON_CLOSE); } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 11 Mostrando JFrameSubclass1 • La ventana marco JFrameSubclass1 sobre la pantalla ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 12 SetDefaultCloseOperation() 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 setVisible() false, se puede volver a mostrar ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 getContentPane de su marco. El área gris es el panel de contenido de este marco ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 14 JRootPane • Los contenedor de 1er plano (JFrame, JApplet, JDialog, etc) delegan sus operaciones a JRootPane • 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 15 JRootPane • El JRootPane está compuesto por un glassPane, un contentPane y una barra de menú opcional. • El contentPane y la barra de menú, si existen, son manejados por un objeto JLayeredPane Referencia: java.sun.com Understanding Containers ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 16 Cambiando el color de fondo • Cambio del color de fondo a azul del panel de contenidos Container contentPane = getContentPane(); contentPane.setBackground(Color.BLUE); Arch fuente: Ch14JFrameSubclass2 .java ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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) • FlowLayout (por defecto) • BorderLayout • GridLayout – Usar un posicionamiento absoluto • Poner un manejador de diseño null (null layout manager) ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 FlowLayout. contentPane.setLayout( new FlowLayout()); okButton = new JButton("OK"); cancelButton = new JButton("CANCEL"); contentPane.add(okButton); contentPane.add(cancelButton); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 setSize() para especificar el tamaño hay que llamarlo antes que al método add() • ...... JButton okButton = new JButton(“OK”); okButton.setSize(80,30); contentPane.add(okButton); JButton cancelButton = new JButton(“CANCEL”); cancelButton.setSize(80,30); contentPane.add(cancelButton); .... ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 26 Manejando Eventos de Acción action event source actionPerformed JButton action event listener Button Handler addActionListener JButton button = new JButton("OK"); ButtonHandler handler = new ButtonHandler( ); // esta clase se muestra a continuación button.addActionListener(handler); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 27 Registro del listener class MiManejadorBoton implements ActionListener Presion .... button.addActionListener(this); OK ....... Crea Objeto ActionEvent ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Pasado a void actionPerformed(ActionEvent)); // cod a ejecutar cuando se aprieta boton 4th Ed Chapter 14 - 28 Interfase ActionListener • Cuando llamamos al método addActionListener de una fuente de eventos, debemos pasarle una instancia de la clase que implementa la interfase ActionListener. button.addActionListener(handler) o button.addActionListener(this) • La interfase ActionListener incluye un método llamado actionPerformed. Una clase que implemente la interfase ActionListener debe proveer el cuerpo del método de actionPerformed. • Ya que actionPerformed 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 29 La clase ButtonHandler import javax.swing.*; import java.awt.*; import java.awt.event.*; class ButtonHandler implements ActionListener { // implementación del mét busca la fuente del evento public void actionPerformed(ActionEvent event) { JButton clickedButton = (JButton) event.getSource(); JRootPane rootPane Frame frame = clickedButton.getRootPane( ); = (JFrame) rootPane.getParent(); frame.setTitle(“Ud Eligió " + clickedButton.getText()); } } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 30 Container como Oyente de Evento • En vez de definir un oyente de eventos separado, tal como ButtonHandler, 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 31 Ch14JButtonFrameHandler . . . class Ch14JButtonFrameHandler extends JFrame implements ActionListener { ... cancelButton.addActionListener(this); // el objeto de la subclase JFrame es el oyente okButton.addActionListener(this); ..... public void actionPerformed(ActionEvent event) { JButton clickedButton = (JButton) event.getSource(); String buttonText = clickedButton.getText(); setTitle("You clicked " + buttonText); } } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 32 Clases GUI de Texto • Las clases JLabel, JTextField y JTextArea se usan para campos de texto • Un obj JLabel muestra objetos no editables (o imágenes) • Un obj JTextField permite que el usuario ingrese una línea de texto • Un obj. JTextArea permite que el usuario entre múltiples líneas de texto. Puede usarse para texto no editable taa ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 33 Jerarquia de clases GUI texto ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Ref: java.sun.com 4th Ed Chapter 14 - 34 Ej Uso de GUI Texto ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Ref: java.sun.com 4th Ed Chapter 14 - 35 JTextField • Se genera un evento de acción, al igual que con JButton, cuando se presiona ENTER sobre el GUI • El mét getText de JTextField permite obtener el texto ingresado JTextField input = new JTextField( ); input.addActionListener(eventListener); contentPane.add(input); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 36 Modif para que maneje el evento la subclase de JFrame .................. JTextField inputLine = new JTextField( ); inputLine.setColumns(22); // nro de caracteres visibles contentPane.add (inputLine) inputLine.addActionListener(this); ......................... public void actionPerformed(ActionEvent event){ if (event.getSource() intanceof JButton ){ JButton elegido = (JButton) event.getSource(); String texto = elegido.getText(); setTitle (“Ha elegido “ + texto); } else { // la fuente del evento es inputline //setTitle (“Ha ingresado ‘ “ + inputLine.getLine() + “ ’ ’”);}......} o JTextField textField = (JTextField) event.getSource(); setTitle(“Ha ingresado ‘ “ + textField.getText() + “ ’ ’”);} ...............} ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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 ImageIcon en vez de un String JLabel textLabel = new JLabel("Please enter your name"); contentPane.add(textLabel); // imagen JLabel imgLabel = new JLabel(new ImageIcon("cat.gif")); contentPane.add(imgLabel); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 38 Ch14TextFrame2 JLabel JLabel (con un texto) (con una imágen) JTextField ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 39 JTextArea • JTextArea para mostrar o permitir el ingreso de múltiples líneas de texto • El mét setText() asigna el texto a JTextArea, reemplazando el contenido • El mét append() agrega el texto al actual JTextArea textArea = new JTextArea( ); . . . Hello the lost world textArea.setText("Hello\n"); textArea.append("the lost "); textArea.append("world"); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. JTextArea 4th Ed Chapter 14 - 40 Ch14TextFrame3 • El estado de Ch14TextFrame3 después de ingresar 6 palabras ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 41 Cuadro del JTextArea ... JTextArea areaTexto = new JTextArea(); areaTexto.setColumns(22); areaTexto.setRows(8); // idem new JTextArea(22,8) areaTexto.setBorder(BorderFactory.createLineBorder(Color.R ED)); areaTexto.setEditable=(false); // por defecto es editable contentPane.add(areaTexto); ... String textoIngresado = input.getText(); //areaTexto.append(textoIngresado + “\n”); // dde de la plataf areaTexto.append(textoIngresado + System.getProperty(“line.separator”); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 42 Agregar una barra de desplazamiento • Por defecto JTextArea no tiene una barra. • Para que la tenga hay que colocar al JTextArea en un panel con desplazamiento (JScrollPane). JTextArea textArea = new JTextArea(); . . . JScrollPane scrollText = new JScrollPane(textArea); scrollText.setSize(200, 135); scrollText.setBOrder(BorderFactory.createLineBorder(Colo r.red)); // se agrega a la barra contentPane.add(scrollText); ... ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 43 Ch14TextFrame3 con barra desplazam • Ej ventana Ch14TextFrame3 usando JScrollPane ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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: - FlowLayout (Ch14FlowLayoutSample.java) – BorderLayout (Ch14BorderLayoutSample.java) – GridLayout (Ch14GridLayoutSample.java) – Taa: CardLayout y GridBagLayout. ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 45 FlowLayout • 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 McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 46 Ej FlowLayout Cinco botones usando FlowLayout. ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 47 BorderLayout • 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. contentPane.add(boton1, BorderLayout.North); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 48 BorderLayout Sample ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 49 GridLayout • 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 setLayout(new GridLayout(0, 6, 10, 10); 1 fila setLayout(new GridLayout(6, 0, 10, 10); 1 columna ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 50 GridLayout Sample ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 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. • Ch14NestedPanels1.java tablero para el juego del Ta Te Ti • Ch14NestedPanels2.java interfase para el juego AltoBajo ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 52 Paneles de Alto Bajo (HiLo) ......... public Ch14NestedPanels2( ) { JPanel guessPanel, hintPanel, controlPanel, buttonPanel; JButton enterBtn, cancelBtn; ......... Container contentPane; contentPane = getContentPane( ); contentPane.setLayout(new GridLayout(3, 1)); //grilla 3 // 1er panel de la grilla guessPanel = new JPanel(); guessPanel.setBorder(BorderFactory.createTitledBorder( "Your Guess")); guessPanel.add(guessEntry = new JTextField(10)); ..Cont ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 53 cont. paneles HiLo hintPanel = new JPanel(); // 2do panel de la grilla hintPanel.setBorder(BorderFactory.createTitledBorder ("Hint")); hintPanel.add(hint = new JLabel("Let's Play HiLo")); controlPanel = new JPanel(new BorderLayout()); buttonPanel = new JPanel(); // flowLayout buttonPanel.add(enterBtn = new JButton(ENTER)); buttonPanel.add(cancelBtn = new JButton(CANCEL)); controlPanel.add(buttonPanel, BorderLayout.SOUTH); contentPane.add(guessPanel); contentPane.add(hintPanel); contentPane.add(controlPanel); } } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 54 Otras componentes GUI comunes • JCheckBox – ver Ch14JCheckBoxSample1.java yCh14JCheckBoxSample2.java • JRadioButton – ver Ch14JRadioButtonSample.java • JComboBox – verCh14JComboBoxSample.java • JList – ver Ch14JListSample.java • JSlider – ver Ch14JSliderSample.java implementar la interfase ItemListener para obtener el item elegido además de ActionListener ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 55 JCheckBox ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 56 JCheckBox Selección Para crear un JChekBox con el texto Java: JCheckBox cbBtn = new JCheckBox(“Java”); Para ver si ha sido seleccionado: if (cbBtn.isSelected()){ System.out.println (“You can program in ” + cbBtn.getText()); }else { System.out.println (“You cannot program in ” + cbBtn.getText()); } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 57 JCheckBox, JRadioButton • JCheckBox 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 itemStateChanged(ItemEvent event) • dentro del mét. se verifica el estado con: getStateChage() ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 58 Menús • El paquete javax.swing contiene tres clases de menú: JMenuBar, Jmenu y JMenuItem. • JMenuBar 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 JMenuBar puede incluir varios JMenu. • JMenuItem (tal como copiar, cortar pegar) son las posibles elecciones de un objeto JMenu. • Sólo los JMenuItem generan eventos. ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 59 public void itemStateChange(ItemEvent event) if event.getStateChange()==ItemEvent.SELECTED){ System.out.println (“Eligió esta caja”); }else{ System.out.println (“No eligió esta caja”); } } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 60 Componentes de un Menú Edit JMenuBar File Edit View View Help Help JMenu JMenuItem separator ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 61 Creación de un Menú 1. Crear un obj JMenuBar y asociarlo a un frame 2. Crear un objeto JMenu 3. Crear un objeto JMenuItem y y agregarlo a un objeto JMenu. 4. Adjuntar el objeto JMenu al JMenuBar. ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 62 Sentencias para crear un Menu // Crea un Menu filemenu = new JMenu (“File”); // Crea los items de un menu item = new JMenuItem (“New”); item.addActionListener (this); filemenu.add(item); // Crea una linea separadora filemenu.addSeparator(); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 63 Sentencias para crear un Menu cont // adjuntar a la barra de menu JMenuBar menuBar = new JMenuBar(); setMenuBar (menuBar); // la adjunta al frame menuBar.add(fileMenu); menuBar.add(editMenu); // mostrar que item se eligió response = new JLabel (“Prueba del menú”); response.setSize(250, 50); contentPane.add(response); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 64 Obtener el item elegido - Si la fuente de un evento es un menu, el met getActionComand de ActionEvent devuelve el texto del menu ... String menuName; menuName = event.getActionComand(); if (menuName.equals (“Quit”)){ System.exit(0); } else { response.setText (“Se eligio “ + menuName ); } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 65