0% encontró este documento útil (0 votos)
139 vistas

Libro - Capitulo 14 Java Gui y Eventos

Este capítulo trata sobre la programación de interfaces gráficas de usuario (GUI) en Java. Explica conceptos como ventanas, objetos GUI, programación orientada a eventos, herencia de JFrame y cómo agregar objetos a las ventanas.

Cargado por

Ratzar Perez
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
139 vistas

Libro - Capitulo 14 Java Gui y Eventos

Este capítulo trata sobre la programación de interfaces gráficas de usuario (GUI) en Java. Explica conceptos como ventanas, objetos GUI, programación orientada a eventos, herencia de JFrame y cómo agregar objetos a las ventanas.

Cargado por

Ratzar Perez
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 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
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 ** def un frame con capacidades extendidas

Paquetes * java.awt ** javax.swing

©The McGraw-Hill Companies, Inc. Permission


required for reproduction or display. 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 Oyente de
evento evento
notify
JButton 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 action event


source
actionPerformed
listener
JButton 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

Presion implements ActionListener


....
OK button.addActionListener(this);
.......
Crea
void actionPerformed(ActionEvent));
Pasado a
Objeto // cod a ejecutar cuando se aprieta
ActionEvent boton
©The McGraw-Hill Companies, Inc. Permission
required for reproduction or display. 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 = clickedButton.getRootPane( );
Frame frame = (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
(con un texto)
JLabel
(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");
JTextArea

©The McGraw-Hill Companies, Inc. Permission


required for reproduction or display. 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 View Help

JMenuBar File Edit View 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

También podría gustarte