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