SlideShare una empresa de Scribd logo
1 de 142
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Tópicos Avanzados de
Programación
Unidad 1:
Interfaz gráfica de usuario - Eventos
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Contenido
Unidad 1 Subtemas
Interfaz gráfica de
usuario.
1.1 Creación de interfaz gráfica para
usuarios.
1.2 Tipos de eventos.
1.3 Manejo de eventos.
1.4 Manejo de componentes gráficos
de control.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Competencia específica
Desarrolla programas para interactuar con el usuario de
una manera amigable, utilizando GUI (Interfaz Gráfica de
Usuario) manipuladas a través de eventos.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Programas
Por consola:
La operación del programa
está determinado por la
secuencia del código; todo
está predeterminado. Se
introducen datos y se
obtiene la información
solicitada. En cualquier
momento el código a
ejecutar es conocido.
Con GUI:
La operación del programa
está determinado por lo que
el usuario solicita al GUI que
realice en un momento
dado, nada está
predeterminado,
dependiendo de la acción
del usuario se ejecuta el
código relacionado.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Programas manejados por eventos
Cuando trabajamos con un GUI, una acción realizada por el
usuario de la aplicación, tal como un clic con el ratón o el
uso del teclado en un componente de la misma,
primeramente el S.O. lo registra considerando la posición
del mouse en la pantalla y en qué aplicación se dio,
comunicándolo al programa donde esto sucedió, y esta
señal que recibe el programa por parte del S.O. es lo que se
llama un evento.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Acciones - Eventos
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Manejo de eventos en Java
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Objeto de escucha (listener object)
La clase que representa a un oyente puede recibir objetos de
cualquier tipo de escucha, e implementa una interfaz para
atender los diferentes tipos de eventos.
En el caso del clic sobre el botón, la clase escuchadora del
evento necesita implementar la interfaz ActionListener que en
el código de su método actionPerformed ( ) donde se recibe el
objeto de evento, permitirá responder a dicho evento.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Escuchador – origen del evento
Sin embargo, no es suficiente con implementar la interfaz de
escucha, para vincular el objeto de escucha al origen del
evento.
Para registrar un objeto de escucha con una fuente se llama al
método particular addActionListener ( ) en el objeto de origen,
para el objeto JButton y pasa el objeto escuchador como
argumento al método.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Escuchador – origen del evento
La forma en que los eventos se manejan en Java, utilizando
objetos de escucha, se conoce como modelo de evento de
delegación (delegation event model).
Esto se debe a que la responsabilidad de responder a eventos
de un componente, como un botón o un elemento de menú, no
se maneja por los objetos que originaron los eventos en sí,
sino que se delega a otros objetos de escuchas.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Hilos de ejecución para eventos
El código para manejar eventos se ejecuta en el hilo de
envío de eventos, que está separado del hilo en el que
se ejecuta el main ( ), por lo que mientras se procesa un
evento, no se pueden procesar otros eventos, es
necesario que el controlador de eventos actual finalice y
evitar así que se produzca un bloqueo.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Clases de eventos
Un programa necesita responder a diferentes tipos de
eventos como los que se producen sobre los menús,
botones, ratón, teclado y algunos otros componentes.
Para tener un enfoque estructurado para manejar eventos,
los eventos se dividen en subconjuntos. En el nivel más
alto, hay dos grandes categorías de eventos en Java:
 Eventos de bajo nivel
 Eventos semánticos
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Categorías de eventos
• Eventos de bajo nivel – son eventos a nivel de sistema que
surgen del teclado o del mouse o eventos asociados con
operaciones en una ventana, como reducirlo a un icono o
cerrarlo. El significado de un evento de bajo nivel es algo
como "el ratón fue movido", "esta ventana ha sido cerrada" o
"esta tecla fue presionada.
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Categorías de eventos
• Eventos semánticos: son eventos específicos del
componente GUI a nivel de elemento, como seleccionar un
botón haciendo clic en él para causar alguna acción del
programa o ajustar una barra de desplazamiento. El
significado de un evento semántico es típicamente a lo largo
de las líneas de "se presionó el botón OK" o "se seleccionó el
elemento de menú Guardar". Cada tipo de componente, un
botón o un elemento de menú, por ejemplo, puede generar un
tipo particular de evento semántico.
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Categorías de eventos
Las dos categorías se superponen de alguna manera. Si hace
clic en un botón, se crean las dos categorías de eventos: evento
de bajo nivel – "se ha hecho clic en el ratón"; y el semántico –
"se presionó el botón".
La mayoría de los eventos están representados por clases del
paquete java.awt.event, que también define las interfaces de
escucha para varios tipos de eventos. El paquete
javax.swing.event define las clases para eventos que son
específicos para los componentes Swing.
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Eventos y Escuchadores
Por ejemplo, si el usuario pulsa un botón llamado “Salir” cerrará
la aplicación. Otro ejemplo muy usado es para validar texto que
se introduzca en un campo de texto.
Los oyentes o escuchadores (Listeners) se encargan de
controlar los eventos, esperan a que el evento se produzca y
realizan una serie de acciones. Según el evento, se necesita un
Listener que lo controle.
Cada Listener tiene una serie de métodos que se deben
implementar, aunque solo se quiera usar uno solo de ellos.
Estos están en el paquete java.awt.event.
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Jerarquía de clases de eventos (awt)
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Interfaces de eventos escuchadores
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Clases de eventos de bajo nivel
Evento Descripción
FocusEvent Eventos que se originan cuando un componente gana o
pierde el foco. Sólo el componente que tiene el foco
puede recibir entrada, por lo que normalmente se
resalta o se muestra el cursor.
MouseEvent Eventos que resultan de las acciones del usuario con el
mouse, como mover el mouse o presionar un botón del
mouse.
KeyEvent Eventos que surgen al presionar las teclas del teclado.
WindowEvent Eventos que se relacionan con una ventana, como
activarla o desactivarla, reducirla a su icono o cerrarla.
Estos eventos se relacionan con objetos de tipo
Window o cualquier subclase de Window.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Clase MouseEvent
Tiene dos subclases para eventos de ratón más especializados:
 MenuDragMouseEvent – define los eventos que señalan
cuando el ratón se arrastra sobre un elemento de menú.
 MouseWheelEvent – define los eventos que indican cuando se
gira la rueda del ratón.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Jerarquía de clases de eventos
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Interfaz, métodos y constantes
AWTEvent se deriva de java.util.EventObject. La clase
EventObject implementa la interfaz Serializable, por lo que
todos los objetos de las clases de eventos del diagrama son
serializables. También define un método getSource ( ) que
devuelve el objeto en el cual el evento ocurrió (tipo Object) y
todas las clases de eventos heredan este método. La clase
AWTEvent define constantes públicas que identifican los
distintos tipos de eventos que se denominan como el
nombre del evento en mayúsculas, seguido de _MASK.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Constantes para eventos de bajo nivel
De tipo long con un solo bit en 1, se pueden combinar utilizando un
operador OR bit a bit y se puede separar una constante particular de
una combinación utilizando un AND bit a bit:
MOUSE_EVENT_MASK MOUSE_MOTION_EVENT_MASK
MOUSE_WHEEL_EVENT_MASK KEY_EVENT_MASK
ADJUSTMENT_EVENT_MASK WINDOW_EVENT_MASK
WINDOW_FOCUS_EVENT_MASK WINDOW_STATUS_EVENT_MASK
TEXT_EVENT_MASK ITEM_EVENT_MASK
FOCUS_EVENT_MASK
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Eventos semánticos
Se relacionan con las operaciones de los componentes en la
GUI del programa.
Si se selecciona un elemento de menú o se hace clic en un
botón, por ejemplo, se genera un evento semántico.
Tres clases representan los eventos semánticos básicos y se
derivan de la clase AWTEvent, como se muestra enseguida:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Eventos semánticos
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Eventos semánticos
Un ActionEvent Se genera cuando se realiza una acción en un
componente como hacer clic en un elemento de menú o en un
botón.
Un ItemEvent se produce cuando un componente está
seleccionado o deseleccionado.
Un AdjustmentEvent se produce cuando se ajusta un objeto
ajustable, como una barra de desplazamiento.
Diferentes tipos de componentes pueden producir diferentes
tipos de eventos semánticos.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Eventos semánticos
Algunos componentes que originan estos eventos:
 ActionEvent
 Buttons: JButton, JToggleButton, JCheckBox
 Menus: JMenuItem, JMenu, JCheckBoxMenuItem,
JRadioButtonMenuItem
 ItemEvent
 Buttons: JButton, JToggleButton, JCheckBox
 Menus: JMenuItem, JMenu, JCheckBoxMenuItem,
JRadioButtonMenuItem
 AdjustmentEvent
 Scrollbar: JScrollbar
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Escuchadores de eventos semánticos
Se tiene una interfaz de escucha definida para cada uno de
los tres tipos de evento semántico y cada uno define un
método único:
 ActionListener – define actionPerformed ( ActionEvent e )
 ItemListener – define itemStateChanged ( ItemEvent e )
 AdjustmentListener – define adjustmentValueChanged (
AdjustmentEvent e )
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Escuchadores de eventos semánticos
Debido a que cada una de estas interfaces de escuchas de
eventos semánticos declara un solo método, no hay
necesidad de las clases de adaptador correspondientes. Las
clases de adaptador para los eventos de nivel bajo estaban
allí sólo debido al número de métodos implicados en cada
interfaz de escucha. Para definir sus objetos de escucha de
eventos semánticos, sólo defina una clase que implementa la
interfaz de escucha adecuada.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Listeners, métodos y eventos
NOMBRE LISTENER DESCRIPCIÓN MÉTODOS EVENTOS
ActionListener Se produce al hacer click en
un componente, también si
se pulsa Enter teniendo el
foco en el componente.
public void actionPerformed(ActionEvent e)  JButton: click o pulsar Enter con el
foco activado en él.
 JList: doble click en un elemento
de la lista.
 JMenuItem: selecciona una
opción del menú.
 JTextField: al pulsar Enter con el
foco activado.
KeyListener Se produce al pulsar una
tecla. según el método
cambiara la forma de pulsar
la tecla.
public void keyTyped(KeyEvent e)
public void keyPressed(KeyEvent e)
public void keyReleased(KeyEvent e)
Cuando pulsamos una tecla, según el
Listener:
 keyTyped:al pulsar y soltar la
tecla.
 keyPressed: al pulsar la tecla.
 keyReleased: al soltar la tecla.
FocusListener Se produce cuando un
componente gana o
pierde el foco, es decir,
que esta seleccionado.
public void focusGained(FocusEvent e)
public void focusLost(FocusEvent e)
Recibir o perder el foco.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Listeners, métodos y eventos
NOMBRE LISTENER DESCRIPCIÓN MÉTODOS EVENTOS
MouseListener Se produce cuando
realizamos una acción
con el ratón.
public void mouseClicked(MouseEvent e)
public void mouseEntered(MouseEvent e)
public void mouseExited(MouseEvent e)
public void mousePressed(MouseEvent e)
public void mouseReleased(MouseEvent e)
Según el Listener:
 mouseCliked: pinchar y soltar.
 mouseEntered: entrar en un
componente con el puntero.
 mouseExited: salir de un
componente con el puntero
 mousePressed: presionar el
botón.
 mouseReleased: soltar el
botón.
MouseMotionListener Se produce con el
movimiento del
mouse..
public void mouseDragged(MouseEvent e)
public void mouseMoved(MouseEvent e)
Cuando pulsamos una tecla, según
el Listener:
 keyTyped:al pulsar y soltar la
tecla.
 keyPressed: al pulsar la tecla.
 keyReleased: al soltar la tecla.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Cuando ocurre un evento, el componente GUI con el que el
usuario interactúa notifica a sus oyentes registrados,
llamando al método de manejo de eventos apropiado de cada
oyente.
Por ejemplo, cuando el usuario presiona la tecla Enter en un
JTextField, se llama al método actionPerformed del oyente
registrado.
Cómo trabaja el manejo de eventos
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Cada JComponent tiene una variable de instancia llamada
listenerList que hace referencia a un objeto de la clase
EventListenerList en el paquete javax.swing.event.
Cada objeto de una subclase JComponent mantiene las
referencias a los escuchadores registrados en la lista de
escuchadores.
Esto se muestra en la siguiente figura:
Registro de eventos
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Registro de eventos
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Producir la siguiente interfaz:
Ejemplo JTextField y JPasswordField
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
package pruebacampotexto;
// Demostración de la clase JTextField.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaCampoTexto extends JFrame {
private JTextField campoTexto1, campoTexto2,
campoTexto3;
private JPasswordField campoContraseña;
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// configurar GUI
public PruebaCampoTexto ( ) {
super ( "Prueba de JTextField y JPasswordField" );
Container contenedor = getContentPane ( );
contenedor.setLayout ( new FlowLayout ( ) );
// crear campo de texto con tamaño predeterminado
campoTexto1 = new JTextField ( 10 );
contenedor.add ( campoTexto1 );
// crear campo de texto con texto predeterminado
campoTexto2 = new JTextField ( "Escriba el texto aquí" );
contenedor.add ( campoTexto2 );
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// crear campo de texto con texto predeterminado,
// 20 elementos visibles y sin manejador de eventos
campoTexto3 = new JTextField ( "Campo de texto no
editable", 20 );
campoTexto3.setEditable ( false );
contenedor.add ( campoTexto3 );
// crear campo de contraseña con texto predeterminado
campoContraseña = new JPasswordField ( "Texto oculto" );
contenedor.add ( campoContraseña );
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// registrar manejadores de eventos
ManejadorCampoTexto manejador = new
ManejadorCampoTexto ( );
campoTexto1.addActionListener ( manejador );
campoTexto2.addActionListener ( manejador );
campoTexto3.addActionListener ( manejador );
campoContraseña.addActionListener ( manejador );
setSize ( 325, 100 );
setVisible ( true );
} // fin del constructor de PruebaCampoTexto
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
public static void main ( String [ ] args ) {
// TODO code application logic here
PruebaCampoTexto aplicacion = new PruebaCampoTexto ( );
aplicacion.setDefaultCloseOperation (
JFrame.EXIT_ON_CLOSE );
}
// clase interna privada para el manejo de eventos
private class ManejadorCampoTexto implements
ActionListener {
// procesar eventos de campo de texto
public void actionPerformed ( ActionEvent evento ) {
String cadena = "";
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// el usuario oprimió Enter en objeto JTextField campoTexto1
if ( evento.getSource ( ) == campoTexto1 ) {
cadena = "campoTexto1: " + evento.getActionCommand ( );
} //el usuario oprimió Enter en objeto JTextField campoTexto2
else if ( evento.getSource ( ) == campoTexto2 ) {
cadena = "campoTexto2: " + evento.getActionCommand ( );
}// el usuario oprimió Enter en objeto JTextField campoTexto3
else if ( evento.getSource ( ) == campoTexto3 ) {
cadena = "campoTexto3: " + evento.getActionCommand ( );
} // el usuario oprimió Enter en objeto JTextField Contraseña
else if ( evento.getSource ( ) == campoContraseña ) {
cadena = "campoContraseña: " + new String (
campoContraseña.getPassword ( ) );
// getActionCommand ( ) – regresa cadena que identifica el comando para este evento
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
JOptionPane.showMessageDialog ( null, cadena );
} // fin del método actionPerformed
} // fin de la clase interna privada ManejadorCampoTexto
} // fin de la clase PruebaCampoTexto
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Otro ejemplo
Obtener la siguiente interfaz “Prueba de la clase
StringTokenizer”, usando etiquetas (JLabel) y campos de texto
(JTextField):
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package pruebatoken;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaToken extends JFrame {
private JLabel indicadorEtiqueta;
private JTextField entradaCampo;
private JTextArea areaSalida;
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// configurar GUI y manejo de eventos
public PruebaToken ( ) {
super ( "Prueba de la clase StringTokenizer" );
Container contenedor = getContentPane ( );
contenedor.setLayout ( new FlowLayout ( ) );
indicadorEtiqueta = new JLabel ( "Escriba una oración y
oprima Intro" );
contenedor.add ( indicadorEtiqueta );
entradaCampo = new JTextField ( 20 );
entradaCampo.addActionListener ( new ActionListener ( ) {
// clase interna anónima
// addActionListener - agrega receptor acciones para eventos de acción del
// campo de texto, Parámetros: oyente de la acción que se agregará
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// manejar evento de campo de texto
public void actionPerformed ( ActionEvent evento ) {
StringTokenizer tokens = new StringTokenizer (
evento.getActionCommand ( ) );
areaSalida.setText ( "Número de elementos: "
+ tokens.countTokens ( ) + "nLos tokens son:n" );
while ( tokens.hasMoreTokens ( ) ) {
areaSalida.append ( tokens.nextToken ( ) + "n" );
}
}
} // fin de clase interna anónima
); // fin de la llamada a addActionListener
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
contenedor.add ( entradaCampo );
areaSalida = new JTextArea ( 10, 20 );
areaSalida.setEditable ( false );
contenedor.add ( new JScrollPane ( areaSalida ) );
setSize ( 275, 240 ); // establecer el tamaño de la ventana
setVisible ( true ); // mostrar la ventana
}
// ejecutar la aplicación
public static void main ( String [ ] args ) {
PruebaToken aplicacion = new PruebaToken ( );
aplicacion.setDefaultCloseOperation (
JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase PruebaToken
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Un botón es un componente en el que el usuario hace clic
para activar una acción específica. Una aplicación Java puede
utilizar varios tipos de botones: botones de comando,
checkboxes, los botones de conmutación (toggle) y radio
botones. Como puede verse en la siguiente figura, todos los
tipos de botones son subclases de AbstractButton (paquete
javax.swing), que declara las características comunes de los
botones Swing. En esta parte se revisarán los botones que
normalmente se utilizan para iniciar un comando.
JButton
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Jerarquía de Botones Swing
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Producir la siguiente ventana donde se utilicen etiquetas
(JLabel), campos de edición (JTextField) editables y no
editables y botones (JButton):
Ejemplo
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
package ventanapruebatiempo;
// Fig. 10.21: Tiempo.java
import java.text.DecimalFormat;
public class Tiempo {
private int hora; // 0 - 23
private int minuto; // 0 - 59
private int segundo; // 0 - 59
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// un objeto de formato para compartir en toString y
// StringUniversal
private static DecimalFormat dosDigitos = new
DecimalFormat ( "00" );
// el constructor de Tiempo inicializa cada variable de
// instancia en cero;
// se asegura que cada objeto Tiempo inicie en un estado
// consistente
public Tiempo ( ) {
this ( 0, 0, 0 ); // invocar al constructor de Tiempo
// con tres argumentos
}
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
public Tiempo ( int h ) {
this ( h, 0, 0 );
}
public Tiempo ( int h, int m ) {
this ( h, m, 0 );
}
public Tiempo ( int h, int m, int s ) {
establecerTiempo ( h, m, s );
}
public Tiempo ( Tiempo tiempo ) {
this ( tiempo.obtenerHora ( ), tiempo.obtenerMinuto ( ),
tiempo.obtenerSegundo ( ) );
}
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// Métodos Establecer
public void establecerTiempo ( int h, int m, int s ) {
establecerHora ( h ); // establecer la hora
establecerMinuto ( m ); // establecer el minuto
establecerSegundo ( s ); // establecer el segundo
}
public void establecerHora ( int h ) {
hora = ( ( h >= 0 && h < 24 ) ? h : 0 );
}
public void establecerMinuto ( int m ) {
minuto = ( ( m >= 0 && m < 60 ) ? m : 0 );
}
public void establecerSegundo ( int s ) {
segundo = ( ( s >= 0 && s < 60 ) ? s : 0 );
}
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// Métodos Obtener
public int obtenerHora ( ) { // obtener valor de hora
return hora;
}
public int obtenerMinuto ( ) { // obtener valor de minuto
return minuto;
}
public int obtenerSegundo ( ) { // obtener valor de segundo
return segundo;
}
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// convertir a String en formato de hora universal
public String aStringUniversal ( ) {
return dosDigitos.format ( obtenerHora ( ) ) + ":"
+ dosDigitos.format ( obtenerMinuto ( ) ) + ":"
+ dosDigitos.format ( obtenerSegundo ( ) );
}
// convertir a String en formato de hora estándar
public String toString ( ) {
return (( obtenerHora ( ) == 12 || obtenerHora ( ) == 0) ?
12 : obtenerHora ( ) % 12 ) + ":" +
dosDigitos.format ( obtenerMinuto ( ) )
+ ":" + dosDigitos.format ( obtenerSegundo ( ) )
+ ( obtenerHora ( ) < 12 ? " AM" : " PM" );
}
} // fin de la clase Tiempo
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
package ventanapruebatiempo;
// Declaraciones de clase interna utilizadas para crear
// manejadores de eventos.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class VentanaPruebaTiempo extends JFrame {
private Tiempo tiempo;
private JLabel horaEtiqueta, minutoEtiqueta, segundoEtiqueta;
private JTextField horaCampo, minutoCampo, segundoCampo,
pantallaCampo;
private JButton salirBoton;
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// configurar GUI
public VentanaPruebaTiempo ( ) {
super ( "Demostración de clase interna" );
tiempo = new Tiempo ( ); // crear objeto Tiempo
Container contenedor = getContentPane ( );
contenedor.setLayout ( new FlowLayout ( ) );
// preparar horaEtiqueta y horaCampo
horaEtiqueta = new JLabel ( "Ajuste hora" );
horaCampo = new JTextField ( 10 );
contenedor.add ( horaEtiqueta );
contenedor.add ( horaCampo );
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// preparar minutoEtiqueta y minutoCampo
minutoEtiqueta = new JLabel ( "Ajuste minuto" );
minutoCampo = new JTextField ( 10 );
contenedor.add ( minutoEtiqueta );
contenedor.add ( minutoCampo );
// preparar segundoEtiqueta y segundoCampo
segundoEtiqueta = new JLabel ( "Ajuste segundo" );
segundoCampo = new JTextField ( 10 );
contenedor.add ( segundoEtiqueta );
contenedor.add ( segundoCampo );
// establecer pantallaCampo
pantallaCampo = new JTextField ( 30 );
pantallaCampo.setEditable ( false );
contenedor.add ( pantallaCampo );
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// establecer salirBoton
salirBoton = new JButton ( "Salir" );
contenedor.add ( salirBoton );
// crear una instancia de la clase interna ActionEventHandler
ActionEventHandler manejador = new ActionEventHandler ( );
// registrar manejadores de eventos; el objeto referenciado
// por manejador es el ActionListener, el cual contiene el
// método actionPerformed que será llamado para manejar
// los eventos de acción generados por horaCampo,
// minutoCampo, segundoCampo y salirBoton
horaCampo.addActionListener ( manejador );
minutoCampo.addActionListener ( manejador );
segundoCampo.addActionListener ( manejador );
salirBoton.addActionListener ( manejador );
} // fin del constructor
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// mostrar tiempo en pantallaCampo
public void mostrarTiempo ( ) {
pantallaCampo.setText ( "La hora es: " + tiempo );
}
// iniciar aplicación: crear, ajustar tamaño y mostrar
// VentanaPruebaTiempo; cuando main termina, el programa
// continua ejecutándose ya que se muestra una ventana
// mediante las instrucciones en main
public static void main ( String [ ] args ) {
VentanaPruebaTiempo ventana = new
VentanaPruebaTiempo ( );
ventana.setSize ( 400, 140 );
ventana.setVisible ( true );
} // fin de main
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// declaración de clase interna para manejar eventos JTextField
// y JButton
private class ActionEventHandler implements ActionListener {
// método para manejar eventos de acción
public void actionPerformed ( ActionEvent evento ) {
// el usuario oprimió salirBoton
if ( evento.getSource ( ) == salirBoton ) {
System.exit ( 0 ); // terminar la aplicación
} // el usuario oprimió tecla Intro en horaCampo
else if ( evento.getSource ( ) == horaCampo ) {
tiempo.establecerHora ( Integer.parseInt (
evento.getActionCommand ( ) ) );
horaCampo.setText ( "" );
} // el usuario oprimió tecla Intro en minutoCampo
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
else if ( evento.getSource ( ) == minutoCampo ) {
tiempo.establecerMinuto ( Integer.parseInt (
evento.getActionCommand ( ) ) );
minutoCampo.setText ( "" );
} // el usuario oprimió tecla Intro en segundoCampo
else if ( evento.getSource ( ) == segundoCampo ) {
tiempo.establecerSegundo ( Integer.parseInt (
evento.getActionCommand ( ) ) );
segundoCampo.setText ( "" );
}
mostrarTiempo ( ); // llamar a un método de la clase externa
} // fin del método actionPerformed
} // fin de la clase interna ActionEventHandler
} // fin de la clase VentanaPruebaTiempo
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Esta es una modificación del ejemplo anterior, la clase Tiempo es
igual, sólo se modifica la clase VentanaPruebaTiempo:
Ejemplo
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
package ventanapruebatiempo2;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class VentanaPruebaTiempo2 extends JFrame {
private Tiempo tiempo;
private JLabel horaEtiqueta, minutoEtiqueta, segundoEtiqueta;
private JTextField horaCampo, minutoCampo, segundoCampo,
pantallaCampo;
public VentanaPruebaTiempo2 ( ) {
super ( "Demostración de clase interna anónima" );
tiempo = new Tiempo ( ); // crear objeto Tiempo
crearGUI ( ); // configurar GUI
// configurar manejo eventos
registrarManejadoresDeEventos ( );
}
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// crear componentes de GUI y adjuntarlos al panel de contenido
private void crearGUI ( ) {
Container contenedor = getContentPane ( );
contenedor.setLayout ( new FlowLayout ( ) );
horaEtiqueta = new JLabel ( "Ajuste hora" );
horaCampo = new JTextField ( 10 );
contenedor.add ( horaEtiqueta );
contenedor.add ( horaCampo );
minutoEtiqueta = new JLabel ( "Ajuste minuto" );
minutoCampo = new JTextField ( 10 );
contenedor.add ( minutoEtiqueta );
contenedor.add ( minutoCampo );
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
segundoEtiqueta = new JLabel ( "Ajuste segundo" );
segundoCampo = new JTextField ( 10 );
contenedor.add ( segundoEtiqueta );
contenedor.add ( segundoCampo );
pantallaCampo = new JTextField ( 30 );
pantallaCampo.setEditable( false );
contenedor.add ( pantallaCampo );
} // fin del método crearGUI
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// registrar manejadores de eventos para horaCampo,
// minutoCampo y segundoCampo
private void registrarManejadoresDeEventos ( ) {
// registrar manejador de eventos para horaCampo
horaCampo.addActionListener ( new ActionListener ( ) {
// clase interna anónima
public void actionPerformed ( ActionEvent evento ) {
tiempo.establecerHora ( Integer.parseInt (
evento.getActionCommand ( ) ) );
horaCampo.setText ( "" );
mostrarTiempo ( );
}
} // fin de la clase interna anónima
); // fin de la llamada a addActionListener para horaCampo
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// registrar manejador de eventos para minutoCampo
minutoCampo.addActionListener (
new ActionListener ( ) { // clase interna anónima
public void actionPerformed ( ActionEvent evento ) {
tiempo.establecerMinuto ( Integer.parseInt (
evento.getActionCommand ( ) ) );
minutoCampo.setText ( "" );
mostrarTiempo ( );
}
} // fin de la clase interna anónima
); // fin de la llamada a addActionListener para minutoCampo
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
segundoCampo.addActionListener (
new ActionListener ( ) { // clase interna anónima
public void actionPerformed ( ActionEvent evento ) {
tiempo.establecerSegundo ( Integer.parseInt (
evento.getActionCommand ( ) ) );
segundoCampo.setText ( "" );
mostrarTiempo ( );
}
} // fin de la clase interna anónima
); // fin de la llamada a addActionListener para segundoCampo
} // fin del método registrarManejadoresDeEventos
// mostrar tiempo en pantallaCampo
public void mostrarTiempo ( ) {
pantallaCampo.setText ( "La hora es: " + tiempo );
}
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// crear objeto VentanaPruebaTiempo2, registrarse para sus
// eventos de ventana
// y mostrarlo para empezar la ejecución de la aplicación
public static void main ( String [ ] args ) {
VentanaPruebaTiempo2 ventana = new
VentanaPruebaTiempo2 ( );
// registrar componente de escucha para evento
// windowClosing
ventana.addWindowListener (
// clase interna anónima para evento windowClosing
new WindowAdapter ( ) {
// terminar aplicación cuando usuario cierra la ventana
public void windowClosing ( WindowEvent evento ) {
System.exit ( 0 );
}
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
} // fin de la clase interna anónima
); // fin de la llamada a addWindowListener para ventana
ventana.setSize ( 400, 105 );
ventana.setVisible ( true );
} // fin de main
} // fin de la clase VentanaPruebaTiempo2
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Producir la siguiente ventana:
Ejemplo sencillo manejo botones
Salida dependiendo del botón sobre el que se hace clic:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// Creación de objetos JButton.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaBoton extends JFrame {
private JButton botonSimple, botonElegante;
// configurar GUI
public PruebaBoton ( ) {
super ( "Prueba de botones" );
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// obtener panel de contenido y establecer su esquema
Container contenedor = getContentPane ( );
contenedor.setLayout ( new FlowLayout ( ) );
// crear botones
botonSimple = new JButton ( "Botón simple" );
contenedor.add ( botonSimple );
Icon insecto1 = new ImageIcon ( "insecto1.gif" );
Icon insecto2 = new ImageIcon ( "insecto2.gif" );
botonElegante = new JButton ( "Botón elegante",
insecto1 );
botonElegante.setRolloverIcon ( insecto2 );
contenedor.add ( botonElegante );
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
// crear una instancia de la clase interna ManejadorBoton
// a usar para el manejo de eventos de botones
ManejadorBoton manejador = new ManejadorBoton ( );
botonElegante.addActionListener ( manejador );
botonSimple.addActionListener ( manejador );
setSize ( 300, 100 );
setVisible ( true );
} // fin del constructor de PruebaBoton
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
public static void main ( String [ ] args ) {
// TODO code application logic here
PruebaBoton aplicacion = new PruebaBoton ( );
aplicacion.setDefaultCloseOperation (
JFrame.EXIT_ON_CLOSE );
}
// clase interna para el manejo de eventos de botón
private class ManejadorBoton implements ActionListener {
// manejar evento de botón
public void actionPerformed ( ActionEvent evento ) {
JOptionPane.showMessageDialog ( PruebaBoton.this,
"Usted oprimió: " + evento.getActionCommand ( )) ;
}
} // fin de la clase interna privada ManejadorBoton
} // fin de la clase PruebaBoton
Código
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Producir la siguiente ventana donde se utilicen etiquetas
(JLabel), campos de edición (JTextField) editables y no
editables y botones (JButton):
Ejemplo
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Al dar Valor1 y Valor2, dependiendo del botón seleccionado se
obtienen los siguientes resultados:
Ejemplo
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package opsbitsmisc;
// Uso de los operadores a nivel de bits.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class OpsBitsMisc extends JFrame {
private JTextField campoEntrada1, campoEntrada2,
campoBits1, campoBits2, campoBits3,
campoResultado;
private int valor1, valor2;
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// configurar GUI
public OpsBitsMisc ( ) { // constructor
super ( "Operadores a nivel de bits" );
JPanel panelEntrada = new JPanel ( );
panelEntrada.setLayout ( new GridLayout ( 4, 2 ) );
panelEntrada.add ( new JLabel ( "Escriba 2 enteros" ) );
panelEntrada.add ( new JLabel ( "" ) );
panelEntrada.add ( new JLabel ( "Valor 1" ) );
campoEntrada1 = new JTextField ( 8 );
panelEntrada.add ( campoEntrada1 );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
panelEntrada.add ( new JLabel ( "Valor 2" ) );
campoEntrada2 = new JTextField ( 8 );
panelEntrada.add ( campoEntrada2 );
panelEntrada.add ( new JLabel ( "Resultado" ) );
campoResultado = new JTextField ( 8 );
campoResultado.setEditable ( false );
panelEntrada.add ( campoResultado );
JPanel panelBits = new JPanel ( );
panelBits.setLayout ( new GridLayout ( 4, 1 ) );
panelBits.add ( new JLabel ( "Representaciones de bits" ) );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
campoBits1 = new JTextField ( 33 );
campoBits1.setEditable ( false );
panelBits.add ( campoBits1 );
campoBits2 = new JTextField ( 33 );
campoBits2.setEditable ( false );
panelBits.add ( campoBits2 );
campoBits3 = new JTextField ( 33 );
campoBits3.setEditable ( false );
panelBits.add ( campoBits3 );
JPanel panelBotones = new JPanel ( );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// botón para realizar operación con AND a nivel de bits
JButton botonAND = new JButton ( "AND" );
panelBotones.add ( botonAND );
botonAND.addActionListener (
new ActionListener ( ) { // clase interna anónima
// realizar op. AND a nivel de bits y mostrar resultados
public void actionPerformed ( ActionEvent evento ) {
establecerCampos ( );
campoResultado.setText ( Integer.toString ( valor1 &
valor2 ) );
campoBits3.setText ( obtenerBits ( valor1 & valor2 ) );
}
} // fin de la clase interna anónima
); // fin de la llamada a addActionListener
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// botón para realizar operación OR incluyente a nivel de bits
JButton botonORIncluyente = new JButton ( "OR
incluyente" );
panelBotones.add ( botonORIncluyente );
botonORIncluyente.addActionListener (
new ActionListener ( ) { // clase interna anónima
// realizar op. OR incluyente a nivel de bits y mostrar res.
public void actionPerformed ( ActionEvent evento ) {
establecerCampos ( );
campoResultado.setText ( Integer.toString ( valor1
| valor2 ) );
campoBits3.setText ( obtenerBits ( valor1 | valor2 ) );
}
} // fin de la clase interna anónima
); // fin de la llamada a addActionListener
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// botón para realizar operación OR excluyente a nivel de bits
JButton botonORExcluyente = new JButton ( "OR excluyente" );
panelBotones.add ( botonORExcluyente );
botonORExcluyente.addActionListener (
new ActionListener ( ) { // clase interna anónima
// realizar op. OR excluyente a nivel de bits y mostrar res.
public void actionPerformed ( ActionEvent evento ) {
establecerCampos ( );
campoResultado.setText ( Integer.toString ( valor1 ^
valor2 ) );
campoBits3.setText ( obtenerBits ( valor1 ^ valor2 ) );
}
} // fin de la clase interna anónima
); // fin de la llamada a addActionListener
Beginning Java
Ivor Horton
John Wiley & Sons, Inc.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// botón para realizar operación complemento a nivel de bits
JButton botonComplemento = new JButton ( "Complemento" );
panelBotones.add ( botonComplemento );
botonComplemento.addActionListener (
new ActionListener ( ) { // clase interna anónima
// realizar op. Comp. a nivel de bits y mostrar resultado
public void actionPerformed ( ActionEvent evento ) {
campoEntrada2.setText ( "" );
campoBits2.setText ( "" );
int valor = Integer.parseInt ( campoEntrada1.getText ( ) );
campoResultado.setText ( Integer.toString ( ~valor ) );
campoBits1.setText ( obtenerBits ( valor ) );
campoBits3.setText ( obtenerBits ( ~valor ) );
}
} // fin de la clase interna anónima
); // fin de la llamada a addActionListener
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
Container contenedor = getContentPane ( );
contenedor.add ( panelEntrada, BorderLayout.WEST );
contenedor.add ( panelBits, BorderLayout.EAST );
contenedor.add ( panelBotones, BorderLayout.SOUTH );
setSize ( 600, 150 );
setVisible ( true );
} // fin del constructor
// mostrar números y su forma en bits
private void establecerCampos ( ) {
valor1 = Integer.parseInt ( campoEntrada1.getText ( ) );
valor2 = Integer.parseInt ( campoEntrada2.getText ( ) );
campoBits1.setText ( obtenerBits ( valor1 ) );
campoBits2.setText ( obtenerBits ( valor2 ) );
}
// mostrar representación de bits del valor int especificado
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
private String obtenerBits ( int valor ) {
// crear valor int con 1 en el bit más a la izquierda y
// 0s en las demás posiciones
int mascaraMostrar = 1 << 31;
StringBuffer bufer = new StringBuffer ( 35 ); // bufer p/salida
// para cada bit anexar 0 ó 1 al búfer
for ( int bit = 1; bit <= 32; bit++ ) { // usar mascaraMostrar
// para aislar bit
bufer.append ( ( valor & mascaraMostrar ) == 0 ? '0' : '1' );
valor <<= 1; // desplazar valor una posición a la izquierda
if ( bit % 8 == 0 ) {
bufer.append (' '); // anexar un espacio al búfer c/ 8 bits
} }
return bufer.toString ( );
} // fin del método obtenerBits
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
public static void main ( String [ ] args ) {
OpsBitsMisc aplicacion = new OpsBitsMisc ( );
aplicacion.setDefaultCloseOperation (
JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase OpsBitsMisc
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Producir la siguiente interfaz usando campo de texto
(JTextField) y cajas de verificación (JCheckBox). Se trabajará
con fonts: negritas y cursivas.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Dependiendo de la caja(s) de verificación se obtendrán los
siguientes cambios en el campo de texto:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package pruebacasillaverificacion;
// Creación de botones JCheckBox.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaCasillaVerificacion extends JFrame {
private JTextField campo;
private JCheckBox negrita, cursiva;
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// configurar GUI
public PruebaCasillaVerificacion ( ) {
super ( "Prueba de JCheckBox" );
// obtener panel de contenido y establecer su esquema
Container contenedor = getContentPane ( );
contenedor.setLayout ( new FlowLayout ( ) );
// configurar objeto JTextField y establecer su tipo de letra
campo = new JTextField ( "Observe el cambio en el estilo de
tipo de letra", 25 );
campo.setFont ( new Font ( "Serif", Font.PLAIN, 14 ) );
contenedor.add ( campo );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// crear objetos casilla de verificación
negrita = new JCheckBox ( "Negrita" );
contenedor.add ( negrita );
cursiva = new JCheckBox ( "Cursiva" );
contenedor.add ( cursiva );
// registrar componentes de escucha para objetos JCheckBox
ManejadorCasillaVerificacion manejador = new
ManejadorCasillaVerificacion ( );
negrita.addItemListener ( manejador );
cursiva.addItemListener ( manejador );
setSize ( 300, 100 );
setVisible ( true );
} // fin del constructor de PruebaCasillaVerificacion
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
public static void main ( String [ ] args ) {
// TODO code application logic here
PruebaCasillaVerificacion aplicacion = new
PruebaCasillaVerificacion ( );
aplicacion.setDefaultCloseOperation (
JFrame.EXIT_ON_CLOSE );
}
// clase interna para manejo de eventos de ItemListener
private class ManejadorCasillaVerificacion
implements ItemListener {
private int valNegrita = Font.PLAIN;
private int valCursiva = Font.PLAIN;
// responder a eventos de casilla de verificación
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
public void itemStateChanged ( ItemEvent evento ) {
// procesar eventos de casilla de verificación negrita
if ( evento.getSource ( ) == negrita )
valNegrita = negrita.isSelected ( ) ? Font.BOLD :
Font.PLAIN;
// procesar eventos de casilla de verificación cursiva
if ( evento.getSource ( ) == cursiva )
valCursiva = cursiva.isSelected ( ) ? Font.ITALIC :
Font.PLAIN;
// establecer tipo de letra del campo de texto
campo.setFont ( new Font ( "Serif", valNegrita +
valCursiva, 14 ) );
} // fin del método itemStateChanged
} // fin de la clase interna privada ManejadorCasillaVerificacion
} // fin de la clase PruebaCasillaVerificacion
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Producir la siguiente interfaz usando campo de texto (JTextField)
y radio botones (JRadioButton). Se trabajará con fonts: simples,
negritas y cursivas.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Dependiendo del botón seleccionado se obtendrán los
siguientes cambios en el campo de texto:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package pruebabotonopcion;
// Creación de botones de opción, ButtonGroup y JRadioButton.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaBotonOpcion extends JFrame {
private JTextField campo;
private Font tipoLetraSimple, tipoLetraNegrita,
tipoLetraCursiva, tipoLetraNegritaCursiva;
private JRadioButton botonSimple, botonNegrita,
botonCursiva, botonNegritaCursiva;
private ButtonGroup grupoBotonesOpcion;
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// crear GUI y tipos de letra
public PruebaBotonOpcion ( ) {
super ( "Prueba de RadioButton" );
// obtener panel de contenido y establecer su esquema
Container contenedor = getContentPane ( );
contenedor.setLayout ( new FlowLayout ( ) );
// establecer JTextField
campo = new JTextField ( "Observe cómo cambia el estilo del
tipo de letra", 30 );
contenedor.add ( campo );
// crear botones de opción
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
botonSimple = new JRadioButton ( "Simple", true );
contenedor.add ( botonSimple );
botonNegrita = new JRadioButton ( "Negrita", false );
contenedor.add ( botonNegrita );
botonCursiva = new JRadioButton ( "Cursiva", false );
contenedor.add ( botonCursiva );
botonNegritaCursiva = new JRadioButton ( "Negrita/Cursiva",
false );
contenedor.add ( botonNegritaCursiva );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// crear relación lógica entre objetos JRadioButton
grupoBotonesOpcion = new ButtonGroup ( );
grupoBotonesOpcion.add ( botonSimple );
grupoBotonesOpcion.add ( botonNegrita );
grupoBotonesOpcion.add ( botonCursiva );
grupoBotonesOpcion.add ( botonNegritaCursiva );
// crear objetos de tipo de letra
tipoLetraSimple = new Font ( "Serif", Font.PLAIN, 14 );
tipoLetraNegrita = new Font ( "Serif", Font., 14 );
tipoLetraCursiva = new Font ( "Serif", Font.BOLDITALIC, 14 );
tipoLetraNegritaCursiva = new Font ( "Serif", Font.BOLD +
Font.ITALIC, 14 );
campo.setFont ( tipoLetraSimple ); // establecer tipo de letra
// inicial
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// registrar eventos para objetos JRadioButton
botonSimple.addItemListener ( new ManejadorBotonOpcion (
tipoLetraSimple ) );
botonNegrita.addItemListener ( new ManejadorBotonOpcion (
tipoLetraNegrita ) );
botonCursiva.addItemListener ( new
ManejadorBotonOpcion( tipoLetraCursiva ) );
botonNegritaCursiva.addItemListener ( new
ManejadorBotonOpcion( tipoLetraNegritaCursiva ) );
setSize ( 350, 100 );
setVisible ( true );
} // fin del constructor de PruebaBotonOpcion
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
public static void main ( String [ ] args ) {
// TODO code application logic here
PruebaBotonOpcion aplicacion = new PruebaBotonOpcion ( );
aplicacion.setDefaultCloseOperation (
JFrame.EXIT_ON_CLOSE );
}
// clase interna para manejar eventos de botón de opción
private class ManejadorBotonOpcion implements ItemListener {
private Font tipoDeLetra;
public ManejadorBotonOpcion ( Font f ) {
tipoDeLetra = f;
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// manejar eventos de botón de opción
public void itemStateChanged ( ItemEvent evento ) {
campo.setFont ( tipoDeLetra );
}
} // fin de la clase interna privada ManejadorBotonOpcion
} // fin de la clase PruebaBotonOpcion
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Uso de un objeto JComboBox para seleccionar una de sus
opciones.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Al dar clic sobre el componente, se puede seleccionar alguna de
las opciones:
Se usa la barra deslizadora para mostrar las demás opciones
y así seleccionar una dando clic sobre ella:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package pruebacuadrocomb;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaCuadroComb extends JFrame {
private JComboBox cuadroCombImagenes;
private JLabel etiqueta;
private String nombres [ ] = { "insecto1.gif", "insecto2.gif",
"insectoviaje.gif", "insectanim.gif" };
private Icon iconos [ ] = { new ImageIcon ( nombres [ 0 ] ),
new ImageIcon ( nombres [ 1 ] ),
new ImageIcon ( nombres [ 2 ] ),
new ImageIcon ( nombres [ 3 ] ) };
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// configurar GUI
public PruebaCuadroComb ( ) {
super ( "Prueba de JComboBox" );
Container contenedor = getContentPane ( );
contenedor.setLayout ( new FlowLayout ( ) );
cuadroCombImagenes = new JComboBox ( nombres );
// para desplegar 3 filas
cuadroCombImagenes.setMaximumRowCount ( 3 );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
cuadroCombImagenes.addItemListener (
new ItemListener ( ) { // clase interna anónima
// manejar evento para JComboBox
public void itemStateChanged ( ItemEvent evento ) {
// determinar si casilla de verificación está seleccionada
if( evento.getStateChange ( ) == ItemEvent.SELECTED ) {
etiqueta.setIcon ( iconos [
cuadroCombImagenes.getSelectedIndex ( ) ] );
}
}
} // fin de la clase interna anónima
); // fin de la llamada a addItemListener
contenedor.add ( cuadroCombImagenes );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// establecer objeto JLabel para mostrar objetos ImageIcon
etiqueta = new JLabel ( iconos [ 0 ] );
contenedor.add ( etiqueta );
setSize ( 350, 150 );
setVisible ( true );
} // fin del constructor de PruebaCuadroComb
public static void main ( String [ ] args ) {
PruebaCuadroComb aplicacion = new PruebaCuadroComb ( );
aplicacion.setDefaultCloseOperation (
JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase PruebaCuadroComb
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Uso de un objeto JList para seleccionar una de las opciones de
colores.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Dependiendo de la selección de color, el área de la interfaz se
pinta de ese color:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package pruebalista;
// Selección de colores de un objeto JList.
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class PruebaLista extends JFrame {
private JList listaColores;
private Container contenedor;
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
private final String nombresColores [ ] = { "Negro", "Azul",
"Cyan", "Gris oscuro", "Gris", "Verde", "Gris claro",
"Magenta", "Naranja", "Rosa", "Rojo", "Blanco",
"Amarillo" };
private final Color colores [ ] = { Color.BLACK, Color.BLUE,
Color.CYAN, Color.DARK_GRAY, Color.GRAY,
Color.GREEN, Color.LIGHT_GRAY,
Color.MAGENTA, Color.ORANGE, Color.PINK,
Color.RED, Color.WHITE, Color.YELLOW };
// configurar GUI
public PruebaLista ( ) {
super ( "Prueba de JList" );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
contenedor = getContentPane ( );
contenedor.setLayout ( new FlowLayout ( ) );
// crear una lista con elementos del arreglo nombresColores
listaColores = new JList ( nombresColores );
listaColores.setVisibleRowCount ( 5 );
// no permitir selecciones múltiples
listaColores.setSelectionMode (
ListSelectionModel.SINGLE_SELECTION );
// agregar un objeto JScrollPane, que contiene a JList, al
// panel de contenido
contenedor.add ( new JScrollPane ( listaColores ) );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
listaColores.addListSelectionListener (
new ListSelectionListener ( ) { // clase interna anónima
// manejar eventos de selección en la lista
public void valueChanged ( ListSelectionEvent evento ) {
contenedor.setBackground (
colores [ listaColores.getSelectedIndex ( ) ] );
}
} // fin de la clase interna anónima
); // fin de la llamada a addListSelectionListener
setSize ( 350, 150 );
setVisible ( true );
} // fin del constructor de PruebaLista
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
public static void main ( String [ ] args ) {
PruebaLista aplicacion = new PruebaLista ( );
aplicacion.setDefaultCloseOperation (
JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase PruebaLista
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Manejo de ratón
Java How to Program
Deitel y Deitel
Prentice Hall
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Manejo de ratón
Java How to Program
Deitel y Deitel
Prentice Hall
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Crear la siguiente interfaz para demostrar el manejo de ratón.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Y al mover el ratón se pueden presentar los siguiente mensajes:
 Ratón fuera de la ventana – cuando el ratón sale del área y la
interfaz se pinta en blanco
 Ratón entro en – cuando el ratón entra al área y la interfaz se
pinta de verde
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Y al mover el ratón se pueden presentar los siguiente mensajes:
 Se movió en – cuando el usuario mueve el ratón
 Se oprimió en – cuando se oprime el botón del ratón
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Y al mover el ratón se pueden presentar los siguiente mensajes:
 Se hizo clic en – cuando el botón del ratón se suelta
inmediatamente después de oprimir
 Se soltó en – cuando se suelta el ratón después de arrastrar
 Se arrastró en – cuando el usuario arrastra el ratón con el botón
oprimido
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package rastreadorraton;
// Demostración de los eventos de ratón.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RastreadorRaton extends JFrame
implements MouseListener,
MouseMotionListener {
private JLabel barraEstado;
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// configurar GUI y registrar manejadores de eventos de ratón
public RastreadorRaton ( ) {
super ( "Demostración de los eventos de ratón" );
barraEstado = new JLabel ( );
getContentPane ( ).add ( barraEstado, BorderLayout.SOUTH );
addMouseListener ( this ); // escucha sus propios eventos de
// ratón
addMouseMotionListener ( this ); // y de movimiento de ratón
setSize ( 300, 125 );
setVisible ( true );
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// Manejadores de eventos de MouseListener
// manejar el evento cuando el botón del ratón se suelta
// inmediatamente después de oprimir
public void mouseClicked ( MouseEvent evento ) {
barraEstado.setText ( "Se hizo clic en [" + evento.getX ( )
+ ", " + evento.getY ( ) + "]" );
}
// manejar evento cuando se oprime el botón del ratón
public void mousePressed ( MouseEvent evento ) {
barraEstado.setText ( "Se oprimió en [" + evento.getX ( )
+ ", " + evento.getY ( ) + "]" );
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// manejar evento cuando se suelta el ratón después de arrastrar
public void mouseReleased ( MouseEvent evento ) {
barraEstado.setText ( "Se soltó en [" + evento.getX ( )
+ ", " + evento.getY ( ) + "]" );
}
// manejar el evento cuando el ratón entra al área
public void mouseEntered ( MouseEvent evento ) {
barraEstado.setText ( "Ratón entro en [" + evento.getX ( )
+ ", " + evento.getY ( ) + "]" );
getContentPane ( ).setBackground ( Color.GREEN );
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// manejar evento cuando el ratón sale del área
public void mouseExited ( MouseEvent evento ) {
barraEstado.setText ( "Ratón fuera de la ventana" );
getContentPane ( ).setBackground ( Color.WHITE );
}
// Manejadores de eventos de MouseMotionListener
// manejar el evento cuando el usuario arrastra el ratón con el
// botón oprimido
public void mouseDragged ( MouseEvent evento ) {
barraEstado.setText ( "Se arrastró en [" + evento.getX ( )
+ ", " + evento.getY ( ) + "]" );
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// manejar el evento cuando el usuario mueve el ratón
public void mouseMoved ( MouseEvent evento ) {
barraEstado.setText ( "Se movió en [" + evento.getX ( )
+ ", " + evento.getY ( ) + "]" );
}
public static void main ( String [ ] args ) {
RastreadorRaton aplicacion = new RastreadorRaton ( );
aplicacion.setDefaultCloseOperation (
JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase RastreadorRaton
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Manejo de eventos de tecla
La interfaz utilizada para el manejo de estos eventos es
KeyListener, que se generan cuando se pulsan y sueltan las
teclas del teclado.
La clase manejadora de estos eventos que implemente
KeyListener debe proporcionar declaraciones para los
métodos keyPressed, keyReleased y keyTyped, cada uno de
los cuales recibe un objeto de clase KeyEvent como
argumento, la cual es una subclase de InputEvent.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Métodos de eventos de tecla
 keyPressed – se llama en respuesta a presionar cualquier
tecla.
 keyTyped – se llama en respuesta a presionar cualquier
tecla que no sea una tecla de acción. (Las teclas de acción
son cualquier tecla de flecha, Home, End, Page Up, Page
Down, cualquier tecla de función, etc.)
 keyRelease – se llama cuando la tecla se libera después de
cualquier evento keyPressed o keyTyped.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Definir la siguiente interfaz para demostrar los eventos de
pulsación de tecla.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Ejemplo
Se pueden obtener los siguientes resultados:
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
package demoteclas;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DemoTeclas extends JFrame implements KeyListener {
private String linea1 = "", linea2 = "", linea3 = "";
private JTextArea areaTexto;
// configurar GUI
public DemoTeclas ( ) {
super ( "Demostración de eventos de pulsación de tecla" );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// establecer objeto JTextArea
areaTexto = new JTextArea ( 10, 15 );
areaTexto.setText ( "Oprima cualquier tecla en el teclado..." );
areaTexto.setEnabled ( false ); // no permite editar
// para cambiar color del texto para hacerlo visible
areaTexto.setDisabledTextColor ( Color.BLACK );
getContentPane ( ).add ( areaTexto );
addKeyListener ( this ); // permitir al marco procesar eventos de
// teclas
setSize ( 350, 100 );
setVisible ( true );
} // fin del constructor de DemoTeclas
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// manejar evento de pulsación de cualquier tecla
public void keyPressed ( KeyEvent evento ) {
// getKeyText devuelve cadena con nombre de tecla presionada
// getKeyCode obtiene código de tecla virtual de la tecla pulsada
linea1 = "Se oprimió tecla: " + evento.getKeyText (
evento.getKeyCode ( ) );
establecerLineas2y3 ( evento );
}
// manejar evento de liberación de cualquier tecla
public void keyReleased ( KeyEvent evento ) {
linea1 = "Se soltó tecla: " + evento.getKeyText (
evento.getKeyCode ( ) );
establecerLineas2y3 ( evento );
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
// manejar evento de pulsación de una tecla de acción
// GetKeyChar devuelve valor Unicode del carácter escrito.
public void keyTyped ( KeyEvent evento ) {
linea1 = "Se escribió tecla: " + evento.getKeyChar ( );
establecerLineas2y3 ( evento );
}
// establecer segunda y tercera líneas de salida
private void establecerLineas2y3 ( KeyEvent evento ) {
linea2 = "Esta tecla " + ( evento.isActionKey ( ) ? "" : "no " ) +
"es una tecla de acción";
// getKeyModifiersText - nombres de las teclas modificadoras
// presionadas.
String temp = evento.getKeyModifiersText (
evento.getModifiers ( ) );
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Código
linea3 = "Teclas modificadoras oprimidas: " +
( temp.equals ( "" ) ? "ninguna" : temp );
areaTexto.setText ( linea1 + "n" + linea2 + "n" + linea3 + "n" );
}
public static void main ( String [ ] args ) {
DemoTeclas aplicacion = new DemoTeclas ( );
aplicacion.setDefaultCloseOperation (
JFrame.EXIT_ON_CLOSE );
}
}
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Clases adaptadoras
Una clase adaptadora es un término para una clase que
implementa una interfaz de escucha con métodos que no
tienen contenido, por lo que no hacen nada. La idea es
permitir derivar la clase propia de oyente de cualesquiera de
las clases del adaptador que se proporcionan y después
aplicar solamente los métodos de interés. La clase de
adaptador MouseInputAdapter que se define en el paquete
javax.swing.event define los métodos para la interfaz
MouseInputListener.
Departamento de Sistemas y Computación
TECNOLÓGICO NACIONAL DE MÉXICO
Instituto Tecnológico de Ciudad Madero
Clases adaptadoras
Hay también otras cinco clases de adaptadores definidas en el
paquete java.awt.event que cubren los métodos en las otras
interfaces de escucha de bajo nivel:
FocusAdapter WindowAdapter KeyAdapter
MouseAdapter MouseMotionAdapter MouseInputAdapter
La clase WindowAdapter implementa todos los métodos
declarados en las interfaces WindowListener,
WindowFocusListener y WindowStateListener. Las otras cinco
clases de adaptadores implementan cada uno de los métodos
en la interfaz de escucha correspondiente.

Más contenido relacionado

Similar a 2TAP Tema 1-Eventos.pptx

Similar a 2TAP Tema 1-Eventos.pptx (20)

Programación III (Java) - 07 Eventos
Programación III (Java) - 07 EventosProgramación III (Java) - 07 Eventos
Programación III (Java) - 07 Eventos
 
Eventos
EventosEventos
Eventos
 
Eventos
EventosEventos
Eventos
 
Poo2 u1 a3_roag_2
Poo2 u1 a3_roag_2Poo2 u1 a3_roag_2
Poo2 u1 a3_roag_2
 
Event Programing & Driven Mediator Pattern
Event Programing & Driven Mediator PatternEvent Programing & Driven Mediator Pattern
Event Programing & Driven Mediator Pattern
 
Flex Camp 2008. Ricardo Poblete
Flex Camp 2008. Ricardo PobleteFlex Camp 2008. Ricardo Poblete
Flex Camp 2008. Ricardo Poblete
 
Menejo de eventos en java introduccion
Menejo de eventos en java introduccionMenejo de eventos en java introduccion
Menejo de eventos en java introduccion
 
1.-Paradigmas de la POE ...
1.-Paradigmas de la POE                                                      ...1.-Paradigmas de la POE                                                      ...
1.-Paradigmas de la POE ...
 
Topicos Avanzados de Programacion Unidad 1 Eventos
Topicos Avanzados de Programacion Unidad 1 EventosTopicos Avanzados de Programacion Unidad 1 Eventos
Topicos Avanzados de Programacion Unidad 1 Eventos
 
Introduccion a la Programacion
Introduccion a la ProgramacionIntroduccion a la Programacion
Introduccion a la Programacion
 
Programando bajo paradigma poo, segunda parte
Programando bajo paradigma poo, segunda parteProgramando bajo paradigma poo, segunda parte
Programando bajo paradigma poo, segunda parte
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Eventos tpa walter isc
Eventos tpa walter iscEventos tpa walter isc
Eventos tpa walter isc
 
Eventos
EventosEventos
Eventos
 
Eventos
EventosEventos
Eventos
 
6.eventos y swing
6.eventos y swing6.eventos y swing
6.eventos y swing
 
Java 120706083911-phpapp01
Java 120706083911-phpapp01Java 120706083911-phpapp01
Java 120706083911-phpapp01
 
Prog_II_Eventos_guia_2
Prog_II_Eventos_guia_2Prog_II_Eventos_guia_2
Prog_II_Eventos_guia_2
 
Clase swing
Clase swingClase swing
Clase swing
 

Último

Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfTarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfCarol Andrea Eraso Guerrero
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteJuan Hernandez
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 

Último (20)

Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfTarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Unidad 4 | Teorías de las Comunicación | MCDI
Unidad 4 | Teorías de las Comunicación | MCDIUnidad 4 | Teorías de las Comunicación | MCDI
Unidad 4 | Teorías de las Comunicación | MCDI
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parte
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.
 

2TAP Tema 1-Eventos.pptx

  • 1. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Tópicos Avanzados de Programación Unidad 1: Interfaz gráfica de usuario - Eventos
  • 2. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Contenido Unidad 1 Subtemas Interfaz gráfica de usuario. 1.1 Creación de interfaz gráfica para usuarios. 1.2 Tipos de eventos. 1.3 Manejo de eventos. 1.4 Manejo de componentes gráficos de control.
  • 3. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Competencia específica Desarrolla programas para interactuar con el usuario de una manera amigable, utilizando GUI (Interfaz Gráfica de Usuario) manipuladas a través de eventos.
  • 4. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Programas Por consola: La operación del programa está determinado por la secuencia del código; todo está predeterminado. Se introducen datos y se obtiene la información solicitada. En cualquier momento el código a ejecutar es conocido. Con GUI: La operación del programa está determinado por lo que el usuario solicita al GUI que realice en un momento dado, nada está predeterminado, dependiendo de la acción del usuario se ejecuta el código relacionado.
  • 5. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Programas manejados por eventos Cuando trabajamos con un GUI, una acción realizada por el usuario de la aplicación, tal como un clic con el ratón o el uso del teclado en un componente de la misma, primeramente el S.O. lo registra considerando la posición del mouse en la pantalla y en qué aplicación se dio, comunicándolo al programa donde esto sucedió, y esta señal que recibe el programa por parte del S.O. es lo que se llama un evento.
  • 6. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Acciones - Eventos Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 7. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Manejo de eventos en Java
  • 8. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Objeto de escucha (listener object) La clase que representa a un oyente puede recibir objetos de cualquier tipo de escucha, e implementa una interfaz para atender los diferentes tipos de eventos. En el caso del clic sobre el botón, la clase escuchadora del evento necesita implementar la interfaz ActionListener que en el código de su método actionPerformed ( ) donde se recibe el objeto de evento, permitirá responder a dicho evento.
  • 9. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Escuchador – origen del evento Sin embargo, no es suficiente con implementar la interfaz de escucha, para vincular el objeto de escucha al origen del evento. Para registrar un objeto de escucha con una fuente se llama al método particular addActionListener ( ) en el objeto de origen, para el objeto JButton y pasa el objeto escuchador como argumento al método.
  • 10. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Escuchador – origen del evento La forma en que los eventos se manejan en Java, utilizando objetos de escucha, se conoce como modelo de evento de delegación (delegation event model). Esto se debe a que la responsabilidad de responder a eventos de un componente, como un botón o un elemento de menú, no se maneja por los objetos que originaron los eventos en sí, sino que se delega a otros objetos de escuchas.
  • 11. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Hilos de ejecución para eventos El código para manejar eventos se ejecuta en el hilo de envío de eventos, que está separado del hilo en el que se ejecuta el main ( ), por lo que mientras se procesa un evento, no se pueden procesar otros eventos, es necesario que el controlador de eventos actual finalice y evitar así que se produzca un bloqueo.
  • 12. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Clases de eventos Un programa necesita responder a diferentes tipos de eventos como los que se producen sobre los menús, botones, ratón, teclado y algunos otros componentes. Para tener un enfoque estructurado para manejar eventos, los eventos se dividen en subconjuntos. En el nivel más alto, hay dos grandes categorías de eventos en Java:  Eventos de bajo nivel  Eventos semánticos
  • 13. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Categorías de eventos • Eventos de bajo nivel – son eventos a nivel de sistema que surgen del teclado o del mouse o eventos asociados con operaciones en una ventana, como reducirlo a un icono o cerrarlo. El significado de un evento de bajo nivel es algo como "el ratón fue movido", "esta ventana ha sido cerrada" o "esta tecla fue presionada. Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 14. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Categorías de eventos • Eventos semánticos: son eventos específicos del componente GUI a nivel de elemento, como seleccionar un botón haciendo clic en él para causar alguna acción del programa o ajustar una barra de desplazamiento. El significado de un evento semántico es típicamente a lo largo de las líneas de "se presionó el botón OK" o "se seleccionó el elemento de menú Guardar". Cada tipo de componente, un botón o un elemento de menú, por ejemplo, puede generar un tipo particular de evento semántico. Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 15. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Categorías de eventos Las dos categorías se superponen de alguna manera. Si hace clic en un botón, se crean las dos categorías de eventos: evento de bajo nivel – "se ha hecho clic en el ratón"; y el semántico – "se presionó el botón". La mayoría de los eventos están representados por clases del paquete java.awt.event, que también define las interfaces de escucha para varios tipos de eventos. El paquete javax.swing.event define las clases para eventos que son específicos para los componentes Swing. Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 16. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Eventos y Escuchadores Por ejemplo, si el usuario pulsa un botón llamado “Salir” cerrará la aplicación. Otro ejemplo muy usado es para validar texto que se introduzca en un campo de texto. Los oyentes o escuchadores (Listeners) se encargan de controlar los eventos, esperan a que el evento se produzca y realizan una serie de acciones. Según el evento, se necesita un Listener que lo controle. Cada Listener tiene una serie de métodos que se deben implementar, aunque solo se quiera usar uno solo de ellos. Estos están en el paquete java.awt.event. Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 17. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Jerarquía de clases de eventos (awt)
  • 18. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Interfaces de eventos escuchadores
  • 19. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Clases de eventos de bajo nivel Evento Descripción FocusEvent Eventos que se originan cuando un componente gana o pierde el foco. Sólo el componente que tiene el foco puede recibir entrada, por lo que normalmente se resalta o se muestra el cursor. MouseEvent Eventos que resultan de las acciones del usuario con el mouse, como mover el mouse o presionar un botón del mouse. KeyEvent Eventos que surgen al presionar las teclas del teclado. WindowEvent Eventos que se relacionan con una ventana, como activarla o desactivarla, reducirla a su icono o cerrarla. Estos eventos se relacionan con objetos de tipo Window o cualquier subclase de Window.
  • 20. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Clase MouseEvent Tiene dos subclases para eventos de ratón más especializados:  MenuDragMouseEvent – define los eventos que señalan cuando el ratón se arrastra sobre un elemento de menú.  MouseWheelEvent – define los eventos que indican cuando se gira la rueda del ratón.
  • 21. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Jerarquía de clases de eventos
  • 22. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Interfaz, métodos y constantes AWTEvent se deriva de java.util.EventObject. La clase EventObject implementa la interfaz Serializable, por lo que todos los objetos de las clases de eventos del diagrama son serializables. También define un método getSource ( ) que devuelve el objeto en el cual el evento ocurrió (tipo Object) y todas las clases de eventos heredan este método. La clase AWTEvent define constantes públicas que identifican los distintos tipos de eventos que se denominan como el nombre del evento en mayúsculas, seguido de _MASK.
  • 23. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Constantes para eventos de bajo nivel De tipo long con un solo bit en 1, se pueden combinar utilizando un operador OR bit a bit y se puede separar una constante particular de una combinación utilizando un AND bit a bit: MOUSE_EVENT_MASK MOUSE_MOTION_EVENT_MASK MOUSE_WHEEL_EVENT_MASK KEY_EVENT_MASK ADJUSTMENT_EVENT_MASK WINDOW_EVENT_MASK WINDOW_FOCUS_EVENT_MASK WINDOW_STATUS_EVENT_MASK TEXT_EVENT_MASK ITEM_EVENT_MASK FOCUS_EVENT_MASK
  • 24. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Eventos semánticos Se relacionan con las operaciones de los componentes en la GUI del programa. Si se selecciona un elemento de menú o se hace clic en un botón, por ejemplo, se genera un evento semántico. Tres clases representan los eventos semánticos básicos y se derivan de la clase AWTEvent, como se muestra enseguida:
  • 25. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Eventos semánticos
  • 26. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Eventos semánticos Un ActionEvent Se genera cuando se realiza una acción en un componente como hacer clic en un elemento de menú o en un botón. Un ItemEvent se produce cuando un componente está seleccionado o deseleccionado. Un AdjustmentEvent se produce cuando se ajusta un objeto ajustable, como una barra de desplazamiento. Diferentes tipos de componentes pueden producir diferentes tipos de eventos semánticos.
  • 27. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Eventos semánticos Algunos componentes que originan estos eventos:  ActionEvent  Buttons: JButton, JToggleButton, JCheckBox  Menus: JMenuItem, JMenu, JCheckBoxMenuItem, JRadioButtonMenuItem  ItemEvent  Buttons: JButton, JToggleButton, JCheckBox  Menus: JMenuItem, JMenu, JCheckBoxMenuItem, JRadioButtonMenuItem  AdjustmentEvent  Scrollbar: JScrollbar
  • 28. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Escuchadores de eventos semánticos Se tiene una interfaz de escucha definida para cada uno de los tres tipos de evento semántico y cada uno define un método único:  ActionListener – define actionPerformed ( ActionEvent e )  ItemListener – define itemStateChanged ( ItemEvent e )  AdjustmentListener – define adjustmentValueChanged ( AdjustmentEvent e )
  • 29. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Escuchadores de eventos semánticos Debido a que cada una de estas interfaces de escuchas de eventos semánticos declara un solo método, no hay necesidad de las clases de adaptador correspondientes. Las clases de adaptador para los eventos de nivel bajo estaban allí sólo debido al número de métodos implicados en cada interfaz de escucha. Para definir sus objetos de escucha de eventos semánticos, sólo defina una clase que implementa la interfaz de escucha adecuada.
  • 30. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Listeners, métodos y eventos NOMBRE LISTENER DESCRIPCIÓN MÉTODOS EVENTOS ActionListener Se produce al hacer click en un componente, también si se pulsa Enter teniendo el foco en el componente. public void actionPerformed(ActionEvent e)  JButton: click o pulsar Enter con el foco activado en él.  JList: doble click en un elemento de la lista.  JMenuItem: selecciona una opción del menú.  JTextField: al pulsar Enter con el foco activado. KeyListener Se produce al pulsar una tecla. según el método cambiara la forma de pulsar la tecla. public void keyTyped(KeyEvent e) public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e) Cuando pulsamos una tecla, según el Listener:  keyTyped:al pulsar y soltar la tecla.  keyPressed: al pulsar la tecla.  keyReleased: al soltar la tecla. FocusListener Se produce cuando un componente gana o pierde el foco, es decir, que esta seleccionado. public void focusGained(FocusEvent e) public void focusLost(FocusEvent e) Recibir o perder el foco.
  • 31. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Listeners, métodos y eventos NOMBRE LISTENER DESCRIPCIÓN MÉTODOS EVENTOS MouseListener Se produce cuando realizamos una acción con el ratón. public void mouseClicked(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) Según el Listener:  mouseCliked: pinchar y soltar.  mouseEntered: entrar en un componente con el puntero.  mouseExited: salir de un componente con el puntero  mousePressed: presionar el botón.  mouseReleased: soltar el botón. MouseMotionListener Se produce con el movimiento del mouse.. public void mouseDragged(MouseEvent e) public void mouseMoved(MouseEvent e) Cuando pulsamos una tecla, según el Listener:  keyTyped:al pulsar y soltar la tecla.  keyPressed: al pulsar la tecla.  keyReleased: al soltar la tecla.
  • 32. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Cuando ocurre un evento, el componente GUI con el que el usuario interactúa notifica a sus oyentes registrados, llamando al método de manejo de eventos apropiado de cada oyente. Por ejemplo, cuando el usuario presiona la tecla Enter en un JTextField, se llama al método actionPerformed del oyente registrado. Cómo trabaja el manejo de eventos
  • 33. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Cada JComponent tiene una variable de instancia llamada listenerList que hace referencia a un objeto de la clase EventListenerList en el paquete javax.swing.event. Cada objeto de una subclase JComponent mantiene las referencias a los escuchadores registrados en la lista de escuchadores. Esto se muestra en la siguiente figura: Registro de eventos
  • 34. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Registro de eventos
  • 35. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Producir la siguiente interfaz: Ejemplo JTextField y JPasswordField
  • 36. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero package pruebacampotexto; // Demostración de la clase JTextField. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PruebaCampoTexto extends JFrame { private JTextField campoTexto1, campoTexto2, campoTexto3; private JPasswordField campoContraseña; Código
  • 37. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // configurar GUI public PruebaCampoTexto ( ) { super ( "Prueba de JTextField y JPasswordField" ); Container contenedor = getContentPane ( ); contenedor.setLayout ( new FlowLayout ( ) ); // crear campo de texto con tamaño predeterminado campoTexto1 = new JTextField ( 10 ); contenedor.add ( campoTexto1 ); // crear campo de texto con texto predeterminado campoTexto2 = new JTextField ( "Escriba el texto aquí" ); contenedor.add ( campoTexto2 ); Código
  • 38. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // crear campo de texto con texto predeterminado, // 20 elementos visibles y sin manejador de eventos campoTexto3 = new JTextField ( "Campo de texto no editable", 20 ); campoTexto3.setEditable ( false ); contenedor.add ( campoTexto3 ); // crear campo de contraseña con texto predeterminado campoContraseña = new JPasswordField ( "Texto oculto" ); contenedor.add ( campoContraseña ); Código
  • 39. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // registrar manejadores de eventos ManejadorCampoTexto manejador = new ManejadorCampoTexto ( ); campoTexto1.addActionListener ( manejador ); campoTexto2.addActionListener ( manejador ); campoTexto3.addActionListener ( manejador ); campoContraseña.addActionListener ( manejador ); setSize ( 325, 100 ); setVisible ( true ); } // fin del constructor de PruebaCampoTexto Código
  • 40. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero public static void main ( String [ ] args ) { // TODO code application logic here PruebaCampoTexto aplicacion = new PruebaCampoTexto ( ); aplicacion.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); } // clase interna privada para el manejo de eventos private class ManejadorCampoTexto implements ActionListener { // procesar eventos de campo de texto public void actionPerformed ( ActionEvent evento ) { String cadena = ""; Código
  • 41. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // el usuario oprimió Enter en objeto JTextField campoTexto1 if ( evento.getSource ( ) == campoTexto1 ) { cadena = "campoTexto1: " + evento.getActionCommand ( ); } //el usuario oprimió Enter en objeto JTextField campoTexto2 else if ( evento.getSource ( ) == campoTexto2 ) { cadena = "campoTexto2: " + evento.getActionCommand ( ); }// el usuario oprimió Enter en objeto JTextField campoTexto3 else if ( evento.getSource ( ) == campoTexto3 ) { cadena = "campoTexto3: " + evento.getActionCommand ( ); } // el usuario oprimió Enter en objeto JTextField Contraseña else if ( evento.getSource ( ) == campoContraseña ) { cadena = "campoContraseña: " + new String ( campoContraseña.getPassword ( ) ); // getActionCommand ( ) – regresa cadena que identifica el comando para este evento Código
  • 42. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero JOptionPane.showMessageDialog ( null, cadena ); } // fin del método actionPerformed } // fin de la clase interna privada ManejadorCampoTexto } // fin de la clase PruebaCampoTexto Código
  • 43. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Otro ejemplo Obtener la siguiente interfaz “Prueba de la clase StringTokenizer”, usando etiquetas (JLabel) y campos de texto (JTextField):
  • 44. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package pruebatoken; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PruebaToken extends JFrame { private JLabel indicadorEtiqueta; private JTextField entradaCampo; private JTextArea areaSalida;
  • 45. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // configurar GUI y manejo de eventos public PruebaToken ( ) { super ( "Prueba de la clase StringTokenizer" ); Container contenedor = getContentPane ( ); contenedor.setLayout ( new FlowLayout ( ) ); indicadorEtiqueta = new JLabel ( "Escriba una oración y oprima Intro" ); contenedor.add ( indicadorEtiqueta ); entradaCampo = new JTextField ( 20 ); entradaCampo.addActionListener ( new ActionListener ( ) { // clase interna anónima // addActionListener - agrega receptor acciones para eventos de acción del // campo de texto, Parámetros: oyente de la acción que se agregará
  • 46. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // manejar evento de campo de texto public void actionPerformed ( ActionEvent evento ) { StringTokenizer tokens = new StringTokenizer ( evento.getActionCommand ( ) ); areaSalida.setText ( "Número de elementos: " + tokens.countTokens ( ) + "nLos tokens son:n" ); while ( tokens.hasMoreTokens ( ) ) { areaSalida.append ( tokens.nextToken ( ) + "n" ); } } } // fin de clase interna anónima ); // fin de la llamada a addActionListener
  • 47. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código contenedor.add ( entradaCampo ); areaSalida = new JTextArea ( 10, 20 ); areaSalida.setEditable ( false ); contenedor.add ( new JScrollPane ( areaSalida ) ); setSize ( 275, 240 ); // establecer el tamaño de la ventana setVisible ( true ); // mostrar la ventana } // ejecutar la aplicación public static void main ( String [ ] args ) { PruebaToken aplicacion = new PruebaToken ( ); aplicacion.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); } } // fin de la clase PruebaToken
  • 48. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Un botón es un componente en el que el usuario hace clic para activar una acción específica. Una aplicación Java puede utilizar varios tipos de botones: botones de comando, checkboxes, los botones de conmutación (toggle) y radio botones. Como puede verse en la siguiente figura, todos los tipos de botones son subclases de AbstractButton (paquete javax.swing), que declara las características comunes de los botones Swing. En esta parte se revisarán los botones que normalmente se utilizan para iniciar un comando. JButton
  • 49. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Jerarquía de Botones Swing
  • 50. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Producir la siguiente ventana donde se utilicen etiquetas (JLabel), campos de edición (JTextField) editables y no editables y botones (JButton): Ejemplo
  • 51. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero package ventanapruebatiempo; // Fig. 10.21: Tiempo.java import java.text.DecimalFormat; public class Tiempo { private int hora; // 0 - 23 private int minuto; // 0 - 59 private int segundo; // 0 - 59 Código
  • 52. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // un objeto de formato para compartir en toString y // StringUniversal private static DecimalFormat dosDigitos = new DecimalFormat ( "00" ); // el constructor de Tiempo inicializa cada variable de // instancia en cero; // se asegura que cada objeto Tiempo inicie en un estado // consistente public Tiempo ( ) { this ( 0, 0, 0 ); // invocar al constructor de Tiempo // con tres argumentos } Código
  • 53. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero public Tiempo ( int h ) { this ( h, 0, 0 ); } public Tiempo ( int h, int m ) { this ( h, m, 0 ); } public Tiempo ( int h, int m, int s ) { establecerTiempo ( h, m, s ); } public Tiempo ( Tiempo tiempo ) { this ( tiempo.obtenerHora ( ), tiempo.obtenerMinuto ( ), tiempo.obtenerSegundo ( ) ); } Código
  • 54. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // Métodos Establecer public void establecerTiempo ( int h, int m, int s ) { establecerHora ( h ); // establecer la hora establecerMinuto ( m ); // establecer el minuto establecerSegundo ( s ); // establecer el segundo } public void establecerHora ( int h ) { hora = ( ( h >= 0 && h < 24 ) ? h : 0 ); } public void establecerMinuto ( int m ) { minuto = ( ( m >= 0 && m < 60 ) ? m : 0 ); } public void establecerSegundo ( int s ) { segundo = ( ( s >= 0 && s < 60 ) ? s : 0 ); } Código
  • 55. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // Métodos Obtener public int obtenerHora ( ) { // obtener valor de hora return hora; } public int obtenerMinuto ( ) { // obtener valor de minuto return minuto; } public int obtenerSegundo ( ) { // obtener valor de segundo return segundo; } Código
  • 56. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // convertir a String en formato de hora universal public String aStringUniversal ( ) { return dosDigitos.format ( obtenerHora ( ) ) + ":" + dosDigitos.format ( obtenerMinuto ( ) ) + ":" + dosDigitos.format ( obtenerSegundo ( ) ); } // convertir a String en formato de hora estándar public String toString ( ) { return (( obtenerHora ( ) == 12 || obtenerHora ( ) == 0) ? 12 : obtenerHora ( ) % 12 ) + ":" + dosDigitos.format ( obtenerMinuto ( ) ) + ":" + dosDigitos.format ( obtenerSegundo ( ) ) + ( obtenerHora ( ) < 12 ? " AM" : " PM" ); } } // fin de la clase Tiempo Código
  • 57. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero package ventanapruebatiempo; // Declaraciones de clase interna utilizadas para crear // manejadores de eventos. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class VentanaPruebaTiempo extends JFrame { private Tiempo tiempo; private JLabel horaEtiqueta, minutoEtiqueta, segundoEtiqueta; private JTextField horaCampo, minutoCampo, segundoCampo, pantallaCampo; private JButton salirBoton; Código
  • 58. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // configurar GUI public VentanaPruebaTiempo ( ) { super ( "Demostración de clase interna" ); tiempo = new Tiempo ( ); // crear objeto Tiempo Container contenedor = getContentPane ( ); contenedor.setLayout ( new FlowLayout ( ) ); // preparar horaEtiqueta y horaCampo horaEtiqueta = new JLabel ( "Ajuste hora" ); horaCampo = new JTextField ( 10 ); contenedor.add ( horaEtiqueta ); contenedor.add ( horaCampo ); Código
  • 59. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // preparar minutoEtiqueta y minutoCampo minutoEtiqueta = new JLabel ( "Ajuste minuto" ); minutoCampo = new JTextField ( 10 ); contenedor.add ( minutoEtiqueta ); contenedor.add ( minutoCampo ); // preparar segundoEtiqueta y segundoCampo segundoEtiqueta = new JLabel ( "Ajuste segundo" ); segundoCampo = new JTextField ( 10 ); contenedor.add ( segundoEtiqueta ); contenedor.add ( segundoCampo ); // establecer pantallaCampo pantallaCampo = new JTextField ( 30 ); pantallaCampo.setEditable ( false ); contenedor.add ( pantallaCampo ); Código
  • 60. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // establecer salirBoton salirBoton = new JButton ( "Salir" ); contenedor.add ( salirBoton ); // crear una instancia de la clase interna ActionEventHandler ActionEventHandler manejador = new ActionEventHandler ( ); // registrar manejadores de eventos; el objeto referenciado // por manejador es el ActionListener, el cual contiene el // método actionPerformed que será llamado para manejar // los eventos de acción generados por horaCampo, // minutoCampo, segundoCampo y salirBoton horaCampo.addActionListener ( manejador ); minutoCampo.addActionListener ( manejador ); segundoCampo.addActionListener ( manejador ); salirBoton.addActionListener ( manejador ); } // fin del constructor Código
  • 61. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // mostrar tiempo en pantallaCampo public void mostrarTiempo ( ) { pantallaCampo.setText ( "La hora es: " + tiempo ); } // iniciar aplicación: crear, ajustar tamaño y mostrar // VentanaPruebaTiempo; cuando main termina, el programa // continua ejecutándose ya que se muestra una ventana // mediante las instrucciones en main public static void main ( String [ ] args ) { VentanaPruebaTiempo ventana = new VentanaPruebaTiempo ( ); ventana.setSize ( 400, 140 ); ventana.setVisible ( true ); } // fin de main Código
  • 62. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // declaración de clase interna para manejar eventos JTextField // y JButton private class ActionEventHandler implements ActionListener { // método para manejar eventos de acción public void actionPerformed ( ActionEvent evento ) { // el usuario oprimió salirBoton if ( evento.getSource ( ) == salirBoton ) { System.exit ( 0 ); // terminar la aplicación } // el usuario oprimió tecla Intro en horaCampo else if ( evento.getSource ( ) == horaCampo ) { tiempo.establecerHora ( Integer.parseInt ( evento.getActionCommand ( ) ) ); horaCampo.setText ( "" ); } // el usuario oprimió tecla Intro en minutoCampo Código
  • 63. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero else if ( evento.getSource ( ) == minutoCampo ) { tiempo.establecerMinuto ( Integer.parseInt ( evento.getActionCommand ( ) ) ); minutoCampo.setText ( "" ); } // el usuario oprimió tecla Intro en segundoCampo else if ( evento.getSource ( ) == segundoCampo ) { tiempo.establecerSegundo ( Integer.parseInt ( evento.getActionCommand ( ) ) ); segundoCampo.setText ( "" ); } mostrarTiempo ( ); // llamar a un método de la clase externa } // fin del método actionPerformed } // fin de la clase interna ActionEventHandler } // fin de la clase VentanaPruebaTiempo Código
  • 64. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Esta es una modificación del ejemplo anterior, la clase Tiempo es igual, sólo se modifica la clase VentanaPruebaTiempo: Ejemplo
  • 65. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero package ventanapruebatiempo2; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class VentanaPruebaTiempo2 extends JFrame { private Tiempo tiempo; private JLabel horaEtiqueta, minutoEtiqueta, segundoEtiqueta; private JTextField horaCampo, minutoCampo, segundoCampo, pantallaCampo; public VentanaPruebaTiempo2 ( ) { super ( "Demostración de clase interna anónima" ); tiempo = new Tiempo ( ); // crear objeto Tiempo crearGUI ( ); // configurar GUI // configurar manejo eventos registrarManejadoresDeEventos ( ); } Código
  • 66. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // crear componentes de GUI y adjuntarlos al panel de contenido private void crearGUI ( ) { Container contenedor = getContentPane ( ); contenedor.setLayout ( new FlowLayout ( ) ); horaEtiqueta = new JLabel ( "Ajuste hora" ); horaCampo = new JTextField ( 10 ); contenedor.add ( horaEtiqueta ); contenedor.add ( horaCampo ); minutoEtiqueta = new JLabel ( "Ajuste minuto" ); minutoCampo = new JTextField ( 10 ); contenedor.add ( minutoEtiqueta ); contenedor.add ( minutoCampo ); Código
  • 67. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero segundoEtiqueta = new JLabel ( "Ajuste segundo" ); segundoCampo = new JTextField ( 10 ); contenedor.add ( segundoEtiqueta ); contenedor.add ( segundoCampo ); pantallaCampo = new JTextField ( 30 ); pantallaCampo.setEditable( false ); contenedor.add ( pantallaCampo ); } // fin del método crearGUI Código
  • 68. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // registrar manejadores de eventos para horaCampo, // minutoCampo y segundoCampo private void registrarManejadoresDeEventos ( ) { // registrar manejador de eventos para horaCampo horaCampo.addActionListener ( new ActionListener ( ) { // clase interna anónima public void actionPerformed ( ActionEvent evento ) { tiempo.establecerHora ( Integer.parseInt ( evento.getActionCommand ( ) ) ); horaCampo.setText ( "" ); mostrarTiempo ( ); } } // fin de la clase interna anónima ); // fin de la llamada a addActionListener para horaCampo Código
  • 69. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // registrar manejador de eventos para minutoCampo minutoCampo.addActionListener ( new ActionListener ( ) { // clase interna anónima public void actionPerformed ( ActionEvent evento ) { tiempo.establecerMinuto ( Integer.parseInt ( evento.getActionCommand ( ) ) ); minutoCampo.setText ( "" ); mostrarTiempo ( ); } } // fin de la clase interna anónima ); // fin de la llamada a addActionListener para minutoCampo Código
  • 70. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero segundoCampo.addActionListener ( new ActionListener ( ) { // clase interna anónima public void actionPerformed ( ActionEvent evento ) { tiempo.establecerSegundo ( Integer.parseInt ( evento.getActionCommand ( ) ) ); segundoCampo.setText ( "" ); mostrarTiempo ( ); } } // fin de la clase interna anónima ); // fin de la llamada a addActionListener para segundoCampo } // fin del método registrarManejadoresDeEventos // mostrar tiempo en pantallaCampo public void mostrarTiempo ( ) { pantallaCampo.setText ( "La hora es: " + tiempo ); } Código
  • 71. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // crear objeto VentanaPruebaTiempo2, registrarse para sus // eventos de ventana // y mostrarlo para empezar la ejecución de la aplicación public static void main ( String [ ] args ) { VentanaPruebaTiempo2 ventana = new VentanaPruebaTiempo2 ( ); // registrar componente de escucha para evento // windowClosing ventana.addWindowListener ( // clase interna anónima para evento windowClosing new WindowAdapter ( ) { // terminar aplicación cuando usuario cierra la ventana public void windowClosing ( WindowEvent evento ) { System.exit ( 0 ); } Código
  • 72. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero } // fin de la clase interna anónima ); // fin de la llamada a addWindowListener para ventana ventana.setSize ( 400, 105 ); ventana.setVisible ( true ); } // fin de main } // fin de la clase VentanaPruebaTiempo2 Código
  • 73. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Producir la siguiente ventana: Ejemplo sencillo manejo botones Salida dependiendo del botón sobre el que se hace clic:
  • 74. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // Creación de objetos JButton. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PruebaBoton extends JFrame { private JButton botonSimple, botonElegante; // configurar GUI public PruebaBoton ( ) { super ( "Prueba de botones" ); Código
  • 75. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // obtener panel de contenido y establecer su esquema Container contenedor = getContentPane ( ); contenedor.setLayout ( new FlowLayout ( ) ); // crear botones botonSimple = new JButton ( "Botón simple" ); contenedor.add ( botonSimple ); Icon insecto1 = new ImageIcon ( "insecto1.gif" ); Icon insecto2 = new ImageIcon ( "insecto2.gif" ); botonElegante = new JButton ( "Botón elegante", insecto1 ); botonElegante.setRolloverIcon ( insecto2 ); contenedor.add ( botonElegante ); Código
  • 76. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero // crear una instancia de la clase interna ManejadorBoton // a usar para el manejo de eventos de botones ManejadorBoton manejador = new ManejadorBoton ( ); botonElegante.addActionListener ( manejador ); botonSimple.addActionListener ( manejador ); setSize ( 300, 100 ); setVisible ( true ); } // fin del constructor de PruebaBoton Código
  • 77. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero public static void main ( String [ ] args ) { // TODO code application logic here PruebaBoton aplicacion = new PruebaBoton ( ); aplicacion.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); } // clase interna para el manejo de eventos de botón private class ManejadorBoton implements ActionListener { // manejar evento de botón public void actionPerformed ( ActionEvent evento ) { JOptionPane.showMessageDialog ( PruebaBoton.this, "Usted oprimió: " + evento.getActionCommand ( )) ; } } // fin de la clase interna privada ManejadorBoton } // fin de la clase PruebaBoton Código
  • 78. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Producir la siguiente ventana donde se utilicen etiquetas (JLabel), campos de edición (JTextField) editables y no editables y botones (JButton): Ejemplo
  • 79. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Al dar Valor1 y Valor2, dependiendo del botón seleccionado se obtienen los siguientes resultados: Ejemplo
  • 80. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package opsbitsmisc; // Uso de los operadores a nivel de bits. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class OpsBitsMisc extends JFrame { private JTextField campoEntrada1, campoEntrada2, campoBits1, campoBits2, campoBits3, campoResultado; private int valor1, valor2;
  • 81. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // configurar GUI public OpsBitsMisc ( ) { // constructor super ( "Operadores a nivel de bits" ); JPanel panelEntrada = new JPanel ( ); panelEntrada.setLayout ( new GridLayout ( 4, 2 ) ); panelEntrada.add ( new JLabel ( "Escriba 2 enteros" ) ); panelEntrada.add ( new JLabel ( "" ) ); panelEntrada.add ( new JLabel ( "Valor 1" ) ); campoEntrada1 = new JTextField ( 8 ); panelEntrada.add ( campoEntrada1 );
  • 82. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código panelEntrada.add ( new JLabel ( "Valor 2" ) ); campoEntrada2 = new JTextField ( 8 ); panelEntrada.add ( campoEntrada2 ); panelEntrada.add ( new JLabel ( "Resultado" ) ); campoResultado = new JTextField ( 8 ); campoResultado.setEditable ( false ); panelEntrada.add ( campoResultado ); JPanel panelBits = new JPanel ( ); panelBits.setLayout ( new GridLayout ( 4, 1 ) ); panelBits.add ( new JLabel ( "Representaciones de bits" ) );
  • 83. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código Beginning Java Ivor Horton John Wiley & Sons, Inc. campoBits1 = new JTextField ( 33 ); campoBits1.setEditable ( false ); panelBits.add ( campoBits1 ); campoBits2 = new JTextField ( 33 ); campoBits2.setEditable ( false ); panelBits.add ( campoBits2 ); campoBits3 = new JTextField ( 33 ); campoBits3.setEditable ( false ); panelBits.add ( campoBits3 ); JPanel panelBotones = new JPanel ( );
  • 84. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // botón para realizar operación con AND a nivel de bits JButton botonAND = new JButton ( "AND" ); panelBotones.add ( botonAND ); botonAND.addActionListener ( new ActionListener ( ) { // clase interna anónima // realizar op. AND a nivel de bits y mostrar resultados public void actionPerformed ( ActionEvent evento ) { establecerCampos ( ); campoResultado.setText ( Integer.toString ( valor1 & valor2 ) ); campoBits3.setText ( obtenerBits ( valor1 & valor2 ) ); } } // fin de la clase interna anónima ); // fin de la llamada a addActionListener
  • 85. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // botón para realizar operación OR incluyente a nivel de bits JButton botonORIncluyente = new JButton ( "OR incluyente" ); panelBotones.add ( botonORIncluyente ); botonORIncluyente.addActionListener ( new ActionListener ( ) { // clase interna anónima // realizar op. OR incluyente a nivel de bits y mostrar res. public void actionPerformed ( ActionEvent evento ) { establecerCampos ( ); campoResultado.setText ( Integer.toString ( valor1 | valor2 ) ); campoBits3.setText ( obtenerBits ( valor1 | valor2 ) ); } } // fin de la clase interna anónima ); // fin de la llamada a addActionListener
  • 86. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // botón para realizar operación OR excluyente a nivel de bits JButton botonORExcluyente = new JButton ( "OR excluyente" ); panelBotones.add ( botonORExcluyente ); botonORExcluyente.addActionListener ( new ActionListener ( ) { // clase interna anónima // realizar op. OR excluyente a nivel de bits y mostrar res. public void actionPerformed ( ActionEvent evento ) { establecerCampos ( ); campoResultado.setText ( Integer.toString ( valor1 ^ valor2 ) ); campoBits3.setText ( obtenerBits ( valor1 ^ valor2 ) ); } } // fin de la clase interna anónima ); // fin de la llamada a addActionListener Beginning Java Ivor Horton John Wiley & Sons, Inc.
  • 87. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // botón para realizar operación complemento a nivel de bits JButton botonComplemento = new JButton ( "Complemento" ); panelBotones.add ( botonComplemento ); botonComplemento.addActionListener ( new ActionListener ( ) { // clase interna anónima // realizar op. Comp. a nivel de bits y mostrar resultado public void actionPerformed ( ActionEvent evento ) { campoEntrada2.setText ( "" ); campoBits2.setText ( "" ); int valor = Integer.parseInt ( campoEntrada1.getText ( ) ); campoResultado.setText ( Integer.toString ( ~valor ) ); campoBits1.setText ( obtenerBits ( valor ) ); campoBits3.setText ( obtenerBits ( ~valor ) ); } } // fin de la clase interna anónima ); // fin de la llamada a addActionListener
  • 88. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código Container contenedor = getContentPane ( ); contenedor.add ( panelEntrada, BorderLayout.WEST ); contenedor.add ( panelBits, BorderLayout.EAST ); contenedor.add ( panelBotones, BorderLayout.SOUTH ); setSize ( 600, 150 ); setVisible ( true ); } // fin del constructor // mostrar números y su forma en bits private void establecerCampos ( ) { valor1 = Integer.parseInt ( campoEntrada1.getText ( ) ); valor2 = Integer.parseInt ( campoEntrada2.getText ( ) ); campoBits1.setText ( obtenerBits ( valor1 ) ); campoBits2.setText ( obtenerBits ( valor2 ) ); } // mostrar representación de bits del valor int especificado
  • 89. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código private String obtenerBits ( int valor ) { // crear valor int con 1 en el bit más a la izquierda y // 0s en las demás posiciones int mascaraMostrar = 1 << 31; StringBuffer bufer = new StringBuffer ( 35 ); // bufer p/salida // para cada bit anexar 0 ó 1 al búfer for ( int bit = 1; bit <= 32; bit++ ) { // usar mascaraMostrar // para aislar bit bufer.append ( ( valor & mascaraMostrar ) == 0 ? '0' : '1' ); valor <<= 1; // desplazar valor una posición a la izquierda if ( bit % 8 == 0 ) { bufer.append (' '); // anexar un espacio al búfer c/ 8 bits } } return bufer.toString ( ); } // fin del método obtenerBits
  • 90. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código public static void main ( String [ ] args ) { OpsBitsMisc aplicacion = new OpsBitsMisc ( ); aplicacion.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); } } // fin de la clase OpsBitsMisc
  • 91. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Producir la siguiente interfaz usando campo de texto (JTextField) y cajas de verificación (JCheckBox). Se trabajará con fonts: negritas y cursivas.
  • 92. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Dependiendo de la caja(s) de verificación se obtendrán los siguientes cambios en el campo de texto:
  • 93. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package pruebacasillaverificacion; // Creación de botones JCheckBox. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PruebaCasillaVerificacion extends JFrame { private JTextField campo; private JCheckBox negrita, cursiva;
  • 94. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // configurar GUI public PruebaCasillaVerificacion ( ) { super ( "Prueba de JCheckBox" ); // obtener panel de contenido y establecer su esquema Container contenedor = getContentPane ( ); contenedor.setLayout ( new FlowLayout ( ) ); // configurar objeto JTextField y establecer su tipo de letra campo = new JTextField ( "Observe el cambio en el estilo de tipo de letra", 25 ); campo.setFont ( new Font ( "Serif", Font.PLAIN, 14 ) ); contenedor.add ( campo );
  • 95. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // crear objetos casilla de verificación negrita = new JCheckBox ( "Negrita" ); contenedor.add ( negrita ); cursiva = new JCheckBox ( "Cursiva" ); contenedor.add ( cursiva ); // registrar componentes de escucha para objetos JCheckBox ManejadorCasillaVerificacion manejador = new ManejadorCasillaVerificacion ( ); negrita.addItemListener ( manejador ); cursiva.addItemListener ( manejador ); setSize ( 300, 100 ); setVisible ( true ); } // fin del constructor de PruebaCasillaVerificacion
  • 96. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código public static void main ( String [ ] args ) { // TODO code application logic here PruebaCasillaVerificacion aplicacion = new PruebaCasillaVerificacion ( ); aplicacion.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); } // clase interna para manejo de eventos de ItemListener private class ManejadorCasillaVerificacion implements ItemListener { private int valNegrita = Font.PLAIN; private int valCursiva = Font.PLAIN; // responder a eventos de casilla de verificación
  • 97. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código public void itemStateChanged ( ItemEvent evento ) { // procesar eventos de casilla de verificación negrita if ( evento.getSource ( ) == negrita ) valNegrita = negrita.isSelected ( ) ? Font.BOLD : Font.PLAIN; // procesar eventos de casilla de verificación cursiva if ( evento.getSource ( ) == cursiva ) valCursiva = cursiva.isSelected ( ) ? Font.ITALIC : Font.PLAIN; // establecer tipo de letra del campo de texto campo.setFont ( new Font ( "Serif", valNegrita + valCursiva, 14 ) ); } // fin del método itemStateChanged } // fin de la clase interna privada ManejadorCasillaVerificacion } // fin de la clase PruebaCasillaVerificacion
  • 98. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Producir la siguiente interfaz usando campo de texto (JTextField) y radio botones (JRadioButton). Se trabajará con fonts: simples, negritas y cursivas.
  • 99. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Dependiendo del botón seleccionado se obtendrán los siguientes cambios en el campo de texto:
  • 100. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package pruebabotonopcion; // Creación de botones de opción, ButtonGroup y JRadioButton. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PruebaBotonOpcion extends JFrame { private JTextField campo; private Font tipoLetraSimple, tipoLetraNegrita, tipoLetraCursiva, tipoLetraNegritaCursiva; private JRadioButton botonSimple, botonNegrita, botonCursiva, botonNegritaCursiva; private ButtonGroup grupoBotonesOpcion;
  • 101. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // crear GUI y tipos de letra public PruebaBotonOpcion ( ) { super ( "Prueba de RadioButton" ); // obtener panel de contenido y establecer su esquema Container contenedor = getContentPane ( ); contenedor.setLayout ( new FlowLayout ( ) ); // establecer JTextField campo = new JTextField ( "Observe cómo cambia el estilo del tipo de letra", 30 ); contenedor.add ( campo ); // crear botones de opción
  • 102. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código botonSimple = new JRadioButton ( "Simple", true ); contenedor.add ( botonSimple ); botonNegrita = new JRadioButton ( "Negrita", false ); contenedor.add ( botonNegrita ); botonCursiva = new JRadioButton ( "Cursiva", false ); contenedor.add ( botonCursiva ); botonNegritaCursiva = new JRadioButton ( "Negrita/Cursiva", false ); contenedor.add ( botonNegritaCursiva );
  • 103. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // crear relación lógica entre objetos JRadioButton grupoBotonesOpcion = new ButtonGroup ( ); grupoBotonesOpcion.add ( botonSimple ); grupoBotonesOpcion.add ( botonNegrita ); grupoBotonesOpcion.add ( botonCursiva ); grupoBotonesOpcion.add ( botonNegritaCursiva ); // crear objetos de tipo de letra tipoLetraSimple = new Font ( "Serif", Font.PLAIN, 14 ); tipoLetraNegrita = new Font ( "Serif", Font., 14 ); tipoLetraCursiva = new Font ( "Serif", Font.BOLDITALIC, 14 ); tipoLetraNegritaCursiva = new Font ( "Serif", Font.BOLD + Font.ITALIC, 14 ); campo.setFont ( tipoLetraSimple ); // establecer tipo de letra // inicial
  • 104. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // registrar eventos para objetos JRadioButton botonSimple.addItemListener ( new ManejadorBotonOpcion ( tipoLetraSimple ) ); botonNegrita.addItemListener ( new ManejadorBotonOpcion ( tipoLetraNegrita ) ); botonCursiva.addItemListener ( new ManejadorBotonOpcion( tipoLetraCursiva ) ); botonNegritaCursiva.addItemListener ( new ManejadorBotonOpcion( tipoLetraNegritaCursiva ) ); setSize ( 350, 100 ); setVisible ( true ); } // fin del constructor de PruebaBotonOpcion
  • 105. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código public static void main ( String [ ] args ) { // TODO code application logic here PruebaBotonOpcion aplicacion = new PruebaBotonOpcion ( ); aplicacion.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); } // clase interna para manejar eventos de botón de opción private class ManejadorBotonOpcion implements ItemListener { private Font tipoDeLetra; public ManejadorBotonOpcion ( Font f ) { tipoDeLetra = f; }
  • 106. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // manejar eventos de botón de opción public void itemStateChanged ( ItemEvent evento ) { campo.setFont ( tipoDeLetra ); } } // fin de la clase interna privada ManejadorBotonOpcion } // fin de la clase PruebaBotonOpcion
  • 107. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Uso de un objeto JComboBox para seleccionar una de sus opciones.
  • 108. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Al dar clic sobre el componente, se puede seleccionar alguna de las opciones: Se usa la barra deslizadora para mostrar las demás opciones y así seleccionar una dando clic sobre ella:
  • 109. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package pruebacuadrocomb; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PruebaCuadroComb extends JFrame { private JComboBox cuadroCombImagenes; private JLabel etiqueta; private String nombres [ ] = { "insecto1.gif", "insecto2.gif", "insectoviaje.gif", "insectanim.gif" }; private Icon iconos [ ] = { new ImageIcon ( nombres [ 0 ] ), new ImageIcon ( nombres [ 1 ] ), new ImageIcon ( nombres [ 2 ] ), new ImageIcon ( nombres [ 3 ] ) };
  • 110. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // configurar GUI public PruebaCuadroComb ( ) { super ( "Prueba de JComboBox" ); Container contenedor = getContentPane ( ); contenedor.setLayout ( new FlowLayout ( ) ); cuadroCombImagenes = new JComboBox ( nombres ); // para desplegar 3 filas cuadroCombImagenes.setMaximumRowCount ( 3 );
  • 111. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código cuadroCombImagenes.addItemListener ( new ItemListener ( ) { // clase interna anónima // manejar evento para JComboBox public void itemStateChanged ( ItemEvent evento ) { // determinar si casilla de verificación está seleccionada if( evento.getStateChange ( ) == ItemEvent.SELECTED ) { etiqueta.setIcon ( iconos [ cuadroCombImagenes.getSelectedIndex ( ) ] ); } } } // fin de la clase interna anónima ); // fin de la llamada a addItemListener contenedor.add ( cuadroCombImagenes );
  • 112. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // establecer objeto JLabel para mostrar objetos ImageIcon etiqueta = new JLabel ( iconos [ 0 ] ); contenedor.add ( etiqueta ); setSize ( 350, 150 ); setVisible ( true ); } // fin del constructor de PruebaCuadroComb public static void main ( String [ ] args ) { PruebaCuadroComb aplicacion = new PruebaCuadroComb ( ); aplicacion.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); } } // fin de la clase PruebaCuadroComb
  • 113. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Uso de un objeto JList para seleccionar una de las opciones de colores.
  • 114. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Dependiendo de la selección de color, el área de la interfaz se pinta de ese color:
  • 115. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package pruebalista; // Selección de colores de un objeto JList. import java.awt.*; import javax.swing.*; import javax.swing.event.*; public class PruebaLista extends JFrame { private JList listaColores; private Container contenedor;
  • 116. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código private final String nombresColores [ ] = { "Negro", "Azul", "Cyan", "Gris oscuro", "Gris", "Verde", "Gris claro", "Magenta", "Naranja", "Rosa", "Rojo", "Blanco", "Amarillo" }; private final Color colores [ ] = { Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.WHITE, Color.YELLOW }; // configurar GUI public PruebaLista ( ) { super ( "Prueba de JList" );
  • 117. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código contenedor = getContentPane ( ); contenedor.setLayout ( new FlowLayout ( ) ); // crear una lista con elementos del arreglo nombresColores listaColores = new JList ( nombresColores ); listaColores.setVisibleRowCount ( 5 ); // no permitir selecciones múltiples listaColores.setSelectionMode ( ListSelectionModel.SINGLE_SELECTION ); // agregar un objeto JScrollPane, que contiene a JList, al // panel de contenido contenedor.add ( new JScrollPane ( listaColores ) );
  • 118. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código listaColores.addListSelectionListener ( new ListSelectionListener ( ) { // clase interna anónima // manejar eventos de selección en la lista public void valueChanged ( ListSelectionEvent evento ) { contenedor.setBackground ( colores [ listaColores.getSelectedIndex ( ) ] ); } } // fin de la clase interna anónima ); // fin de la llamada a addListSelectionListener setSize ( 350, 150 ); setVisible ( true ); } // fin del constructor de PruebaLista
  • 119. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código public static void main ( String [ ] args ) { PruebaLista aplicacion = new PruebaLista ( ); aplicacion.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); } } // fin de la clase PruebaLista
  • 120. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Manejo de ratón Java How to Program Deitel y Deitel Prentice Hall
  • 121. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Manejo de ratón Java How to Program Deitel y Deitel Prentice Hall
  • 122. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Crear la siguiente interfaz para demostrar el manejo de ratón.
  • 123. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Y al mover el ratón se pueden presentar los siguiente mensajes:  Ratón fuera de la ventana – cuando el ratón sale del área y la interfaz se pinta en blanco  Ratón entro en – cuando el ratón entra al área y la interfaz se pinta de verde
  • 124. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Y al mover el ratón se pueden presentar los siguiente mensajes:  Se movió en – cuando el usuario mueve el ratón  Se oprimió en – cuando se oprime el botón del ratón
  • 125. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Y al mover el ratón se pueden presentar los siguiente mensajes:  Se hizo clic en – cuando el botón del ratón se suelta inmediatamente después de oprimir  Se soltó en – cuando se suelta el ratón después de arrastrar  Se arrastró en – cuando el usuario arrastra el ratón con el botón oprimido
  • 126. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package rastreadorraton; // Demostración de los eventos de ratón. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class RastreadorRaton extends JFrame implements MouseListener, MouseMotionListener { private JLabel barraEstado;
  • 127. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // configurar GUI y registrar manejadores de eventos de ratón public RastreadorRaton ( ) { super ( "Demostración de los eventos de ratón" ); barraEstado = new JLabel ( ); getContentPane ( ).add ( barraEstado, BorderLayout.SOUTH ); addMouseListener ( this ); // escucha sus propios eventos de // ratón addMouseMotionListener ( this ); // y de movimiento de ratón setSize ( 300, 125 ); setVisible ( true ); }
  • 128. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // Manejadores de eventos de MouseListener // manejar el evento cuando el botón del ratón se suelta // inmediatamente después de oprimir public void mouseClicked ( MouseEvent evento ) { barraEstado.setText ( "Se hizo clic en [" + evento.getX ( ) + ", " + evento.getY ( ) + "]" ); } // manejar evento cuando se oprime el botón del ratón public void mousePressed ( MouseEvent evento ) { barraEstado.setText ( "Se oprimió en [" + evento.getX ( ) + ", " + evento.getY ( ) + "]" ); }
  • 129. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // manejar evento cuando se suelta el ratón después de arrastrar public void mouseReleased ( MouseEvent evento ) { barraEstado.setText ( "Se soltó en [" + evento.getX ( ) + ", " + evento.getY ( ) + "]" ); } // manejar el evento cuando el ratón entra al área public void mouseEntered ( MouseEvent evento ) { barraEstado.setText ( "Ratón entro en [" + evento.getX ( ) + ", " + evento.getY ( ) + "]" ); getContentPane ( ).setBackground ( Color.GREEN ); }
  • 130. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // manejar evento cuando el ratón sale del área public void mouseExited ( MouseEvent evento ) { barraEstado.setText ( "Ratón fuera de la ventana" ); getContentPane ( ).setBackground ( Color.WHITE ); } // Manejadores de eventos de MouseMotionListener // manejar el evento cuando el usuario arrastra el ratón con el // botón oprimido public void mouseDragged ( MouseEvent evento ) { barraEstado.setText ( "Se arrastró en [" + evento.getX ( ) + ", " + evento.getY ( ) + "]" ); }
  • 131. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // manejar el evento cuando el usuario mueve el ratón public void mouseMoved ( MouseEvent evento ) { barraEstado.setText ( "Se movió en [" + evento.getX ( ) + ", " + evento.getY ( ) + "]" ); } public static void main ( String [ ] args ) { RastreadorRaton aplicacion = new RastreadorRaton ( ); aplicacion.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); } } // fin de la clase RastreadorRaton
  • 132. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Manejo de eventos de tecla La interfaz utilizada para el manejo de estos eventos es KeyListener, que se generan cuando se pulsan y sueltan las teclas del teclado. La clase manejadora de estos eventos que implemente KeyListener debe proporcionar declaraciones para los métodos keyPressed, keyReleased y keyTyped, cada uno de los cuales recibe un objeto de clase KeyEvent como argumento, la cual es una subclase de InputEvent.
  • 133. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Métodos de eventos de tecla  keyPressed – se llama en respuesta a presionar cualquier tecla.  keyTyped – se llama en respuesta a presionar cualquier tecla que no sea una tecla de acción. (Las teclas de acción son cualquier tecla de flecha, Home, End, Page Up, Page Down, cualquier tecla de función, etc.)  keyRelease – se llama cuando la tecla se libera después de cualquier evento keyPressed o keyTyped.
  • 134. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Definir la siguiente interfaz para demostrar los eventos de pulsación de tecla.
  • 135. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Ejemplo Se pueden obtener los siguientes resultados:
  • 136. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código package demoteclas; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DemoTeclas extends JFrame implements KeyListener { private String linea1 = "", linea2 = "", linea3 = ""; private JTextArea areaTexto; // configurar GUI public DemoTeclas ( ) { super ( "Demostración de eventos de pulsación de tecla" );
  • 137. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // establecer objeto JTextArea areaTexto = new JTextArea ( 10, 15 ); areaTexto.setText ( "Oprima cualquier tecla en el teclado..." ); areaTexto.setEnabled ( false ); // no permite editar // para cambiar color del texto para hacerlo visible areaTexto.setDisabledTextColor ( Color.BLACK ); getContentPane ( ).add ( areaTexto ); addKeyListener ( this ); // permitir al marco procesar eventos de // teclas setSize ( 350, 100 ); setVisible ( true ); } // fin del constructor de DemoTeclas
  • 138. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // manejar evento de pulsación de cualquier tecla public void keyPressed ( KeyEvent evento ) { // getKeyText devuelve cadena con nombre de tecla presionada // getKeyCode obtiene código de tecla virtual de la tecla pulsada linea1 = "Se oprimió tecla: " + evento.getKeyText ( evento.getKeyCode ( ) ); establecerLineas2y3 ( evento ); } // manejar evento de liberación de cualquier tecla public void keyReleased ( KeyEvent evento ) { linea1 = "Se soltó tecla: " + evento.getKeyText ( evento.getKeyCode ( ) ); establecerLineas2y3 ( evento ); }
  • 139. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código // manejar evento de pulsación de una tecla de acción // GetKeyChar devuelve valor Unicode del carácter escrito. public void keyTyped ( KeyEvent evento ) { linea1 = "Se escribió tecla: " + evento.getKeyChar ( ); establecerLineas2y3 ( evento ); } // establecer segunda y tercera líneas de salida private void establecerLineas2y3 ( KeyEvent evento ) { linea2 = "Esta tecla " + ( evento.isActionKey ( ) ? "" : "no " ) + "es una tecla de acción"; // getKeyModifiersText - nombres de las teclas modificadoras // presionadas. String temp = evento.getKeyModifiersText ( evento.getModifiers ( ) );
  • 140. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Código linea3 = "Teclas modificadoras oprimidas: " + ( temp.equals ( "" ) ? "ninguna" : temp ); areaTexto.setText ( linea1 + "n" + linea2 + "n" + linea3 + "n" ); } public static void main ( String [ ] args ) { DemoTeclas aplicacion = new DemoTeclas ( ); aplicacion.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); } }
  • 141. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Clases adaptadoras Una clase adaptadora es un término para una clase que implementa una interfaz de escucha con métodos que no tienen contenido, por lo que no hacen nada. La idea es permitir derivar la clase propia de oyente de cualesquiera de las clases del adaptador que se proporcionan y después aplicar solamente los métodos de interés. La clase de adaptador MouseInputAdapter que se define en el paquete javax.swing.event define los métodos para la interfaz MouseInputListener.
  • 142. Departamento de Sistemas y Computación TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico de Ciudad Madero Clases adaptadoras Hay también otras cinco clases de adaptadores definidas en el paquete java.awt.event que cubren los métodos en las otras interfaces de escucha de bajo nivel: FocusAdapter WindowAdapter KeyAdapter MouseAdapter MouseMotionAdapter MouseInputAdapter La clase WindowAdapter implementa todos los métodos declarados en las interfaces WindowListener, WindowFocusListener y WindowStateListener. Las otras cinco clases de adaptadores implementan cada uno de los métodos en la interfaz de escucha correspondiente.