You are on page 1of 65

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

4 . 4th Ed Chapter 14 . ©The McGraw-Hill Companies. Inc. Ej Objetos GUI • Varios objetos GUI del paquete javax.swing. Permission required for reproduction or display.

se elige una opción de menú. Permission required for reproduction or display. ©The McGraw-Hill Companies. 4th Ed Chapter 14 . se presiona un botón. • Ocurre un evento cuando: se mueve el cursor. etc • Los objetos se programan para que respondan a los eventos diseñando métodos de manejo de eventos.5 . Inc. • La mayoría de las aplicaciones actuales GUI se maneja por eventos. 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.

eventos Frame * def un ventana con título y bordes JFrame ** def un frame con capacidades extendidas Paquetes * java.awt ** javax.6 .swing ©The McGraw-Hill Companies. Permission required for reproduction or display. Inc. Herencia de JFrame Object java. 4th Ed Chapter 14 .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.

Subclase de JFrame • Para crear una marco de ventana a medida. • La clase JFrame contiene la funcionalidad rudimentaria para soportar las características encontradas en cualquier marco de ventana. Permission required for reproduction or display. Inc. ©The McGraw-Hill Companies.7 . definimos una subclase de la clase JFrame . 4th Ed Chapter 14 .

swing.*. } } ©The McGraw-Hill Companies. 4th Ed Chapter 14 . defaultJFrame = new JFrame(). class Ch7DefaultJFrame { public static void main( String[] args ) { JFrame defaultJFrame.setVisible(true). Permission required for reproduction or display. Inc. Creando un JFrame import javax.8 . defaultJFrame.

swing. declaramos a la subclase con la palabra reservada extends. } ©The McGraw-Hill Companies. class Ch7JFrameSubclass1 extends JFrame { .9 . 4th Ed Chapter 14 . import javax.*. Inc. . Creando una Subclase de JFrame • Para definir una subclase de otra. . Permission required for reproduction or display.

• Estas propiedades están incluidas en el constructor por defecto. Customizing Ch14JFrameSubclass1 • Una instancia de Ch14JFrameSubclass1 tendrá las sig características: – El título se pone a My First Subclass. . 250). – 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.

private static final int ALTO= 200. } ©The McGraw-Hill Companies. Inc. class JFrameSubclass1 extends JFrame{ private static final int ANCHO= 300.class import javax. ALTO). setSize (ANCHO. private static final int ORIGEN_X= 150. private static final int ORIGEN_Y= 250. setDefaultCloseOperation(EXIT_ON_CLOSE). JFrameSubclass1.swing. ORIGEN_Y).*. Permission required for reproduction or display. public JFrameSubclass1 (){ setTitle (“My First Subclass”).11 . setLocation (ORIGEN_X. 4th Ed Chapter 14 .

4th Ed Chapter 14 . Inc. Mostrando JFrameSubclass1 • La ventana marco JFrameSubclass1 sobre la pantalla ©The McGraw-Hill Companies.12 . Permission required for reproduction or display.

Permission required for reproduction or display.13 . se puede volver a mostrar ©The McGraw-Hill Companies. Inc. 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. 4th Ed Chapter 14 .

El área gris es el panel de contenido de este marco ©The McGraw-Hill Companies. Inc. barras de desplazamiento.14 . El panel de contenido (Content Pane) de un JFrame • El panel de contenido es donde ponemos los objetos GUI tales como botones. etc • Accedemos al panel de contenido llamando al método getContentPane de su marco. 4th Ed Chapter 14 . títulos. Permission required for reproduction or display.

15 . JDialog. JApplet. JRootPane • Los contenedor de 1er plano (JFrame. Inc. Permission required for reproduction or display. 4th Ed Chapter 14 . 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.

un contentPane y una barra de menú opcional. JRootPane • El JRootPane está compuesto por un glassPane. 4th Ed Chapter 14 .com Understanding Containers ©The McGraw-Hill Companies. son manejados por un objeto JLayeredPane Referencia: java. Inc. Permission required for reproduction or display. si existen.16 . • El contentPane y la barra de menú.sun.

17 . Permission required for reproduction or display. contentPane. Cambiando el color de fondo • Cambio del color de fondo a azul del panel de contenidos Container contentPane = getContentPane(). Inc.java ©The McGraw-Hill Companies.setBackground(Color. 4th Ed Chapter 14 .BLUE). Arch fuente: Ch14JFrameSubclass2 .

18 . Inc. 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. 4th Ed Chapter 14 . Permission required for reproduction or display.

4th Ed Chapter 14 .setLayout( new FlowLayout()). cancelButton = new JButton("CANCEL"). Permission required for reproduction or display.add(okButton). okButton = new JButton("OK"). Inc. contentPane. • Ej de como poner un botón usando FlowLayout. Poniendo un Botón • Un objeto JButton es un componente GUI que representa un Botón de selección (pushbutton).19 . contentPane. ©The McGraw-Hill Companies. contentPane.add(cancelButton).

4th Ed Chapter 14 .20 . contentPane.setSize(80..30).30).add(okButton). Ajustar el tamaño de los botones • El tamaño de los botones se ajusta al texto que contiene. JButton okButton = new JButton(“OK”). Inc..... Permission required for reproduction or display.. okButton. ©The McGraw-Hill Companies. • Usar el método setSize() para especificar el tamaño hay que llamarlo antes que al método add() • .. cancelButton.setSize(80.add(cancelButton). contentPane.. el botón Cancel es mayor que el Ok. . JButton cancelButton = new JButton(“CANCEL”).

21 . Inc. 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. 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. 4th Ed Chapter 14 . Permission required for reproduction or display.

• Con este modelo. Definiciones • Una acción sobre un objeto GUI. 4th Ed Chapter 14 .22 . Inc. como presionar un botón se llama evento. 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. Permission required for reproduction or display. • El modelo de Java de manejo de eventos se basa en el concepto conocido como delegación (delegation-based event model). • El mecanismo para procesar los eventos se llama manejar eventos (event handling).

• Aunque es posible. en general no definimos nuestras propias fuentes de eventos cuando se escriben aplicaciones basadas en GUI ©The McGraw-Hill Companies. • Decimos que una fuente de eventos genera un evento.23 . cajas de texto. 4th Ed Chapter 14 . listas menús son fuentes de eventos comunes en las aplicaciones basadas en interfase gráfica del usuario. • Botones. Permission required for reproduction or display. Objetos Fuentes de Eventos • Un objeto fuente de eventos es el objeto GUI en el que ocurre el evento. Inc.

24 . ©The McGraw-Hill Companies. Inc. 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. Permission required for reproduction or display. 4th Ed Chapter 14 .

Una vez registrado él será notificado cuando la fuente genere un evento. 4th Ed Chapter 14 . Permission required for reproduction or display. Conectando Fuentes y escuchadores Fuente de Oyente de evento evento notify JButton Handler register Un oyente debe registrarse a la fuente.25 . Inc. ©The McGraw-Hill Companies.

etc • Entre los diferentes tipos de eventos. 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 . el evento de acción (action event) es el más común. ©The McGraw-Hill Companies. Inc. 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). – Elegir un botón genera un evento de acción – Elegir un item de menú genera un evento de acción. 4th Ed Chapter 14 . Permission required for reproduction or display.26 .

Manejando Eventos de Acción action event action event source actionPerformed listener JButton Button Handler addActionListener JButton button = new JButton("OK"). ©The McGraw-Hill Companies. // esta clase se muestra a continuación button. Inc. 4th Ed Chapter 14 . ButtonHandler handler = new ButtonHandler( ). Permission required for reproduction or display.addActionListener(handler).27 .

Inc.. Registro del listener class MiManejadorBoton Presion implements ActionListener .. OK button. Pasado a Objeto // cod a ejecutar cuando se aprieta ActionEvent boton ©The McGraw-Hill Companies. Permission required for reproduction or display.addActionListener(this).. 4th Ed Chapter 14 ... . Crea void actionPerformed(ActionEvent)).....28 .

Interfase ActionListener • Cuando llamamos al método addActionListener de una fuente de eventos. button. Inc. debemos pasarle una instancia de la clase que implementa la interfase ActionListener.addActionListener(handler) o button. Permission required for reproduction or display. • 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. 4th Ed Chapter 14 .29 .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.

JRootPane rootPane = clickedButton.awt.awt.getSource().swing.30 . } } ©The McGraw-Hill Companies. Permission required for reproduction or display.*.getText()). frame. class ButtonHandler implements ActionListener { // implementación del mét busca la fuente del evento public void actionPerformed(ActionEvent event) { JButton clickedButton = (JButton) event.*.setTitle(“Ud Eligió " + clickedButton. Inc. 4th Ed Chapter 14 . Frame frame = (JFrame) rootPane.*. La clase ButtonHandler import javax.getRootPane( ).getParent(). import java. import java.event.

Container como Oyente de Evento • En vez de definir un oyente de eventos separado. tal como ButtonHandler.31 . 4th Ed Chapter 14 . 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. Permission required for reproduction or display. Inc.

} } ©The McGraw-Hill Companies.getText().getSource(). ... String buttonText = clickedButton. Ch14JButtonFrameHandler . .32 ..addActionListener(this). class Ch14JButtonFrameHandler extends JFrame implements ActionListener { . Inc. Permission required for reproduction or display. // el objeto de la subclase JFrame es el oyente okButton. 4th Ed Chapter 14 . cancelButton.addActionListener(this).. public void actionPerformed(ActionEvent event) { JButton clickedButton = (JButton) event.. setTitle("You clicked " + buttonText). ..

Clases GUI de Texto • Las clases JLabel. Permission required for reproduction or display. JTextArea permite que el usuario entre múltiples líneas de texto. Inc. 4th Ed Chapter 14 .33 . Puede usarse para texto no editable taa ©The McGraw-Hill Companies. 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.

34 .sun. Ref: java.com 4th Ed Chapter 14 . Permission required for reproduction or display. Inc. Jerarquia de clases GUI texto ©The McGraw-Hill Companies.

Permission required for reproduction or display.35 . Ej Uso de GUI Texto ©The McGraw-Hill Companies. Inc. Ref: java.com 4th Ed Chapter 14 .sun.

input.addActionListener(eventListener). 4th Ed Chapter 14 . contentPane. al igual que con JButton. ©The McGraw-Hill Companies. Inc. JTextField • Se genera un evento de acción.add(input). cuando se presiona ENTER sobre el GUI • El mét getText de JTextField permite obtener el texto ingresado JTextField input = new JTextField( ). Permission required for reproduction or display.36 .

// nro de caracteres visibles contentPane....... public void actionPerformed(ActionEvent event){ if (event.getSource().. } else { // la fuente del evento es inputline //setTitle (“Ha ingresado ‘ “ + inputLine.. inputLine.... setTitle (“Ha elegido “ + texto)..37 . Modif para que maneje el evento la subclase de JFrame .... 4th Ed Chapter 14 ...........getText().. ...setColumns(22).getLine() + “ ’ ’”). JTextField inputLine = new JTextField( )...... String texto = elegido..getText() + “ ’ ’”).... Inc..} o JTextField textField = (JTextField) event....getSource() intanceof JButton ){ JButton elegido = (JButton) event..........getSource().addActionListener(this)......}.. setTitle(“Ha ingresado ‘ “ + textField....} ©The McGraw-Hill Companies. Permission required for reproduction or display..} .add (inputLine) inputLine.

se le pasa un objeto ImageIcon en vez de un String JLabel textLabel = new JLabel("Please enter your name"). No genera eventos • Cuando creamos una imágen. // imagen JLabel imgLabel = new JLabel(new ImageIcon("cat.add(textLabel). Inc. contentPane.gif")).38 . contentPane. Permission required for reproduction or display. JLabel • JLabel se usa para mostrar una etiqueta • Puede ser texto o imágen. 4th Ed Chapter 14 . ©The McGraw-Hill Companies.add(imgLabel).

Permission required for reproduction or display. 4th Ed Chapter 14 . Inc. Ch14TextFrame2 JLabel (con un texto) JLabel (con una imágen) JTextField ©The McGraw-Hill Companies.39 .

setText("Hello\n"). JTextArea • JTextArea para mostrar o permitir el ingreso de múltiples líneas de texto • El mét setText() asigna el texto a JTextArea.append("the lost "). JTextArea ©The McGraw-Hill Companies. textArea. reemplazando el contenido • El mét append() agrega el texto al actual JTextArea textArea = new JTextArea( ). Hello the lost world . . Inc.40 .append("world"). . textArea. 4th Ed Chapter 14 . Permission required for reproduction or display. textArea.

Ch14TextFrame3 • El estado de Ch14TextFrame3 después de ingresar 6 palabras ©The McGraw-Hill Companies. Inc.41 . Permission required for reproduction or display. 4th Ed Chapter 14 .

.. Cuadro del JTextArea . 4th Ed Chapter 14 .separator”).getText().setRows(8). areaTexto. . Inc.R ED)). Permission required for reproduction or display..getProperty(“line.setBorder(BorderFactory. // por defecto es editable contentPane.createLineBorder(Color.add(areaTexto). areaTexto. // idem new JTextArea(22. // dde de la plataf areaTexto.append(textoIngresado + System.setEditable=(false).append(textoIngresado + “\n”).42 .8) areaTexto. ©The McGraw-Hill Companies. String textoIngresado = input. //areaTexto. JTextArea areaTexto = new JTextArea(). areaTexto.setColumns(22)..

scrollText.setBOrder(BorderFactory. scrollText. JScrollPane scrollText = new JScrollPane(textArea). JTextArea textArea = new JTextArea(). . // se agrega a la barra contentPane. ..red)). Permission required for reproduction or display. 4th Ed Chapter 14 . Agregar una barra de desplazamiento • Por defecto JTextArea no tiene una barra.43 . . • Para que la tenga hay que colocar al JTextArea en un panel con desplazamiento (JScrollPane)..createLineBorder(Colo r. 135). Inc.setSize(200. ©The McGraw-Hill Companies.add(scrollText). .

Permission required for reproduction or display.44 . 4th Ed Chapter 14 . Inc. Ch14TextFrame3 con barra desplazam • Ej ventana Ch14TextFrame3 usando JScrollPane ©The McGraw-Hill Companies.

java) – Taa: CardLayout y GridBagLayout. Inc. 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: . 4th Ed Chapter 14 . FlowLayout (Ch14FlowLayoutSample.java) – GridLayout (Ch14GridLayoutSample.45 . ©The McGraw-Hill Companies. Permission required for reproduction or display.java) – BorderLayout (Ch14BorderLayoutSample.

4th Ed Chapter 14 . FlowLayout • Los componentes se ubican de izquierda a derecha y de arriba a abajo • Por defecto los componentes en cada línea se centran. Inc. Permission required for reproduction or display. los componentes se ajustan de acuerdo al nuevo espacio ©The McGraw-Hill Companies. • Cuando el marco que contiene un componente se modifica de tamaño.46 .

Ej FlowLayout Cinco botones usando FlowLayout. ©The McGraw-Hill Companies.47 . 4th Ed Chapter 14 . Inc. Permission required for reproduction or display.

©The McGraw-Hill Companies. 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. 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. BorderLayout • Este divide al contenedor en 5 regiones: centro. sur.North). BorderLayout. 4th Ed Chapter 14 . contentPane. Inc. norte. Permission required for reproduction or display.48 .add(boton1.

49 . Inc. Permission required for reproduction or display. 4th Ed Chapter 14 . BorderLayout Sample ©The McGraw-Hill Companies.

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

controlPanel... hintPanel..setBorder(BorderFactory.. Container contentPane. public Ch14NestedPanels2( ) { JPanel guessPanel.setLayout(new GridLayout(3. contentPane.. Paneles de Alto Bajo (HiLo) . ..Cont ©The McGraw-Hill Companies... Permission required for reproduction or display.. cancelBtn. //grilla 3 // 1er panel de la grilla guessPanel = new JPanel(). Inc. buttonPanel.add(guessEntry = new JTextField(10)).. guessPanel.. 1)). guessPanel..createTitledBorder( "Your Guess")). JButton enterBtn.... ..53 .. contentPane = getContentPane( ). 4th Ed Chapter 14 .

hintPanel.SOUTH). BorderLayout. cont.add(controlPanel). contentPane. contentPane.add(buttonPanel.add(cancelBtn = new JButton(CANCEL)). // 2do panel de la grilla hintPanel. // flowLayout buttonPanel. controlPanel. buttonPanel = new JPanel().setBorder(BorderFactory.add(enterBtn = new JButton(ENTER)). Inc.add(guessPanel).createTitledBorder ("Hint")). Permission required for reproduction or display.add(hint = new JLabel("Let's Play HiLo")). } } ©The McGraw-Hill Companies. paneles HiLo hintPanel = new JPanel(). contentPane.add(hintPanel). controlPanel = new JPanel(new BorderLayout()). 4th Ed Chapter 14 . buttonPanel.54 .

java • JRadioButton – ver Ch14JRadioButtonSample. Permission required for reproduction or display.java yCh14JCheckBoxSample2. 4th Ed Chapter 14 .55 .java implementar la interfase ItemListener para obtener el item elegido además de ActionListener ©The McGraw-Hill Companies.java • JComboBox – verCh14JComboBoxSample. Otras componentes GUI comunes • JCheckBox – ver Ch14JCheckBoxSample1. Inc.java • JList – ver Ch14JListSample.java • JSlider – ver Ch14JSliderSample.

Permission required for reproduction or display. Inc. 4th Ed Chapter 14 . JCheckBox ©The McGraw-Hill Companies.56 .

getText()). Para ver si ha sido seleccionado: if (cbBtn. }else { System. Inc.getText()).out. Permission required for reproduction or display. JCheckBox Selección Para crear un JChekBox con el texto Java: JCheckBox cbBtn = new JCheckBox(“Java”). } ©The McGraw-Hill Companies. 4th Ed Chapter 14 .println (“You can program in ” + cbBtn.out.println (“You cannot program in ” + cbBtn.57 .isSelected()){ System.

JCheckBox. se verifica el estado con: getStateChage() ©The McGraw-Hill Companies. 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. Inc. Permission required for reproduction or display. 4th Ed Chapter 14 .58 .

Menús • El paquete javax. Inc. • JMenuBar es una barra donde se coloca el menú. Hay una barra de menú por marco.swing contiene tres clases de menú: JMenuBar. Jmenu y JMenuItem. • JMenuItem (tal como copiar. • Sólo los JMenuItem generan eventos. Permission required for reproduction or display. ©The McGraw-Hill Companies.59 .Un JMenuBar puede incluir varios JMenu. • JMenu (tal como Archivo o Editar) es un grupo de opciones. 4th Ed Chapter 14 . cortar pegar) son las posibles elecciones de un objeto JMenu.

getStateChange()==ItemEvent.println (“No eligió esta caja”). 4th Ed Chapter 14 . }else{ System.println (“Eligió esta caja”). Permission required for reproduction or display.out. Inc. } } ©The McGraw-Hill Companies.60 .out.SELECTED){ System. public void itemStateChange(ItemEvent event) if event.

Inc. Permission required for reproduction or display. Componentes de un Menú Edit View Help JMenuBar File Edit View Help JMenu JMenuItem separator ©The McGraw-Hill Companies.61 . 4th Ed Chapter 14 .

Adjuntar el objeto JMenu al JMenuBar. Crear un obj JMenuBar y asociarlo a un frame 2. Inc. Crear un objeto JMenu 3. 4th Ed Chapter 14 . Crear un objeto JMenuItem y y agregarlo a un objeto JMenu. Creación de un Menú 1. 4. Permission required for reproduction or display. ©The McGraw-Hill Companies.62 .

item.addSeparator().add(item). 4th Ed Chapter 14 . Inc. // Crea los items de un menu item = new JMenuItem (“New”).addActionListener (this).63 . // Crea una linea separadora filemenu. Sentencias para crear un Menu // Crea un Menu filemenu = new JMenu (“File”). Permission required for reproduction or display. filemenu. ©The McGraw-Hill Companies.

setMenuBar (menuBar). ©The McGraw-Hill Companies.64 . // la adjunta al frame menuBar.setSize(250. contentPane. Inc.add(editMenu). 50). response.add(fileMenu).add(response). // mostrar que item se eligió response = new JLabel (“Prueba del menú”). 4th Ed Chapter 14 . menuBar. Permission required for reproduction or display. Sentencias para crear un Menu cont // adjuntar a la barra de menu JMenuBar menuBar = new JMenuBar().

Si la fuente de un evento es un menu. Obtener el item elegido .exit(0).getActionComand(). } ©The McGraw-Hill Companies. Permission required for reproduction or display.. Inc. String menuName.setText (“Se eligio “ + menuName ).. 4th Ed Chapter 14 . if (menuName. menuName = event. } else { response. el met getActionComand de ActionEvent devuelve el texto del menu .equals (“Quit”)){ System.65 .