Interacción con el Usuario Gestión de Eventos

Interacción con el Usuario Gestión de Eventos 2. 3. 4. Presentación basada en: 1. Como Programar en Java. Deitel y Deitel. Ed. Prentice-Hall. 1988 J

1 downloads 87 Views 121KB Size

Recommend Stories


Casa Llotja de Mar. Espacios con historia, eventos con futuro
Casa Llotja de Mar Espacios Espacios con con historia, historia, eventos eventos con con futuro futuro Casa Llotja de Mar Bienvenidos a la Casa Ll

EVENTOS EXCLUYENTES Y EVENTOS INDEPENDIENTES: ACERCAMIENTO DIDÁCTICO EN EL AULA
EVENTOS EXCLUYENTES Y EVENTOS INDEPENDIENTES: ACERCAMIENTO DIDÁCTICO EN EL AULA Giovanni Sanabria1, Kyriakos Petakos 2 1. Instituto Tecnológico de Cos

Story Transcript

Interacción con el Usuario Gestión de Eventos

2. 3. 4.

Presentación basada en: 1. Como Programar en Java. Deitel y Deitel. Ed. Prentice-Hall. 1988 Java 2., Curso de programación. Fco. Javier Ceballos. Ed. Alfoomega&RA-MA, 2003. Apuntes del Curso Programación Orientado a Objetos. Pablo Castells. Escuela Politécnica Superior, Universidad Autonoma de Madrid. Apuntes del Curso de java. Luis Hernández y Carlos Cervigón. Facultad de Informática. Universidad Católica de Madrid.

Introducción „

Al interactuar con la aplicación, el usuario: „ „ „

„

„ „ „ „

Acciona componentes (ActionEvent). El usuario pulsa un botón. El usuario termina de introducir un texto en un campo y presiona Enter. El usuario selecciona un elemento de una lista pulsando el preferido (o de un menú). Pulsa o suelta botones del ratón (MouseEvent). Minimiza, cierra o manipula una ventana (WindowEvent). Escribe con el teclado (KeyEvent). Descubre porciones de ventanas (PaintEvent).

1

Introducción „

„

Cuando el usuario de un programa o applet mueve el ratón, presiona un pulsador o pulsa una tecla, genera un evento (actionEvent). Los eventos son objetos de ciertas clases. Normalmente un objeto de alguna subclase de EventObject que indica: „ „

„ „

El elemento que accionó el usuario. La identificación del evento que indica la naturaleza del evento. La posición del ratón en el momento de la interacción. Teclas adicionales pulsadas por el usuario, como la tecla Control, la tecla de Cambio a mayúsculas, etcétera.

Acciones del Usuario Acción Pulsar un botón

Objeto origen JButton

Tipo de evento ActionEvent

Cambio del texto

JTextComponent

TextEvent

Pulsar Intro en un campo de texto

JTextField

ActionEvent

Selección de un nuevo elemento

JCombobox

ItemEvent, ActionEvent

Selección de elemento(s)

JList

ListSelection-Event

Pulsar una casilla de verificación

JCheckBox

ItemEvent, ActionEvent

Pulsar un botón de radio

JRadioButton

ItemEvent, ActionEvent

Selección de una opción de menú

JMenuItem

ActionEvent

Mover la barra de desplazamiento

JScrollBar

AdjustmentEvent

Abrir, cerrar, minimizar, maximizar o cerrar la ventana

JWindow

WindowEvent

...

...

...

2

Responder a Eventos „

Para que un componente (applet, ventana, ...) responda a los eventos generados por el usuario sobre ese componente: „

„

„

Se convierte el componente en un oyente (listener) de ciertos eventos generados por él o por otros componentes. Convertir un componente en oyente de un tipo de eventos consiste en implementar la interfaz correspondiente, codificando sus métodos, y agregar el componente a la lista de oyentes de ese tipo de eventos.

Ejemplo: Se quiere que la GUI responda a las pulsaciones sobre un botón colocado en la ventana: 1. La ventana (oyente) ha de implementar la interfaz ActionListener 2. El método actionPerformed() de dicha interfaz estará preparado para responder a un evento e. 3. El oyente se añade a la lista de eventos de acción de botón.

Responder a Eventos „

Codigo Ejemplo public class MiGui extends JFrame implements ActionListener { public void MiGui() { (1) ... boton.addActionListener(this); (3) } public void actionPerformed(ActionEvent e) { (2) // Código a ejecutar como respuesta al evento ... } }

„ „ „

(1) La ventana (oyente) indica que implementa la interfaz ActionListener (hay otras para diferentes eventos). (2) Se implementa el método ActionPerformed() de la interfaz para responder a un evento e. (3) Se agrega la ventana (oyente) a la lista de oyentes de eventos ActionEvent desde el botón.

3

Ejemplo „

Al pulsar el botón Copiar, se debe copiar el valor del cuadro "valor“ en el cuadro "Copia". Origen del Evento: Botón Copiar

Objeto Evento: ActionEvent e

Objeto Oyente: La ventana

Responder a eventos class MiGui extends JFrame implements ActionListener { ... public void MiGui(){ // Registro los componentes interesados // en responder a eventos ... componente.addActionListener(this); Este método añade el } oyente especificado (frame) a la lista de ... oyentes para recibir eventos de acción public actionPerformed(ActionEvent e) { (ActionEvent) desde este ... // Aquí se responde el evento componente. } }

4

Responder a eventos „

En el constructor del frame (oyente), registro el botón y añado el oyente (frame) para recibir eventos de acción desde el botón. botonCopiar. AddActionListerner (this); El usuario pulsa el botón

„ „

La Ventana ( oyente)

El botón crea el objeto ActionEvent() El botón envía el mensaje actionPerfformed() al frame con el argumento ActionEvent.

Cada vez que el componente produzca el evento se invocará automáticamente el método actionPerfformed(). El código de este método se ejecutara cada vez que se pulse el botón

Otro modelo para responder a eventos Se puede crear un manejador de eventos en dos pasos:

„

1.

Se define una clase específica que haga de oyente de eventos y que implemente el método actionPerfformed()

class Mioyente implements ActionListerner { Public void actionPerformed() { código.... 2.

Registramos un ejemplar como oyente de componentes:

Componente.addActionListerner (ejemplar_de_MiOyente);

5

Otro modelo para responder a eventos class MiGui extends Jframes{ ... public void MiGui{ //Registro los componentes interesados //en responder a eventos... componente.addActionListerner(new MiOyente());

}

... Class Mioyente implements ActionListerner(){ public actionPerformed(ActionEvent e){ .. // Aquí se responde al evento

}

}

Se añade el oyente especificado (ejemplar de MiOyente) a la lista de oyentes para recibir eventos de acción (ActionEvent) desde ese componente.

Ejemplo boton con pitido (modelo 1) import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Gui08 extends JFrame implements ActionListerner(){ Jbutton boton; Container panel; public Gui08(){ super (Ëjemplo de eventos “); panel = this.getContentPanel(); boton = new JButton (“Pulsar”); panel.add(boton); Boton.addActionListerner(this); setSize(100, 100); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE);

} public void actionPerformed(ActionEvent e) { Toolkit.getDefaultTolkit().beep();

} ....

6

Ejemplo Reproducir un valor import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Gui10 extends JFrame { Container panel; JButton botonCopiar; JTextField campoValor, resultado;

public Gui10() { panel = getContentPane(); panel.setLayout(new FlowLayout()); panel.add(new JLabel("Valor ")); campoValor = new JTextField(5); panel.add(campoValor); botonCopiar = new JButton("Copiar"); panel.add(botonCopiar); botonCopiar.addActionListener(new OyenteBoton()); panel.add(new JLabel(" Copia ")); resultado = new JTextField(6);

Ejemplo Reproducir un valor setSize(400, 100); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String args[]) { Gui10 ventana = new Gui10(); } class OyenteBoton implements ActionListener { public void actionPerformed(ActionEvent e){ String valor = campoValor.getText(); resultado.setText(valor); } } }

7

Ejemplo: contador de pulsaciones „

Una aplicación que muestre el número de pulsaciones que se realizan sobre su botón.

public class Gui11 extends JFrame { ... public Gui11() { boton1 = new JButton("PULSA"); label1 = new JLabel("Pulsaciones: 0"); panel = getContentPane(); panel.add(boton1); panel.add(label1); panel.setLayout(new FlowLayout()); boton1.addActionListener(new OyenteBotonPulsaciones()); ...

}

... class OyenteBotonPulsaciones implements ActionListener { public void actionPerformed(ActionEvent e){ contador++; label1.setText("Pulsaciones: " + contador);

} ...

Ejemplo cambio de color import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Gui12 extends JFrame { JButton red = new JButton("Rojo"); JButton blue = new JButton("Azul"); Container panel; public Gui12() { super("Color de fondo"); panel = getContentPane(); panel.setLayout(new FlowLayout()); panel.add(red); panel.add(blue); red.addActionListener(new ColorActionListener(Color.red)); blue.addActionListener(new ColorActionListener(Color.blue)); setSize(200, 200); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE) ;

}

...

8

Ejemplo cambio de color public static void main(String args[]) { Gui12 ventana = new Gui12(); } class ColorActionListener implements ActionListener { Color fondo; public ColorActionListener(Color unColor) { fondo = unColor; } public void actionPerformed(ActionEvent evento) { panel.setBackground(fondo); } } }

ActionEvent „

El objeto ActionEvent ofrece un método getActionCommand() que devuelve un objeto con la información sobre el origen del evento (el botón en nuestro caso). Con un botón, devuelve la etiqueta del botón. „

Para identificar botones individuales:

public void actionPerformed(ActionEvent e) { String s = (String)e.getActionCommand(); if(s.equals("Aceptar")) { // Tratamiento del botón Aceptar

}

...

9

ActionEvent „

El método getSource() indica el objeto en el que se ha originado el evento: public void actionPerformed(ActionEvent e) { if(e.getSource() == lista) { campo1.setText("En la lista.");

} else if(e.getSource() == texto) { campo2.setText("En el campo de texto.");

} else if(e.getSource() == boton) { campo3.setText("En el botón.");

}

}

Un conversor Euros-pesetas import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Gui13 extends JFrame { Container panel; TextField cantidad; JButton boton1, boton2;

public Gui13(){ super("Conversor Euros-Pesetas"); boton1 = new JButton("A euros"); boton2 = new JButton("A pesetas"); cantidad = new TextField(10); panel = this.getContentPane(); panel.add(cantidad); panel.add(boton1); panel.add(boton2); panel.setLayout(new FlowLayout()); boton1.addActionListener(new OyenteBoton()); boton2.addActionListener(new OyenteBoton()); setSize(300, 250);

10

Un conversor Euros-pesetas setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE);

} public static void main(String args[]) { Gui13 ventana = new Gui13();

} class OyenteBoton implements ActionListener { public void actionPerformed(ActionEvent ae) { Float f = new Float(cantidad.getText()); float valor = f.floatValue(); String s = ( String)ae.getActionCommand(); if(s.equals("A euros")) { valor = (float) ( valor / 166.321); panel.setBackground(Color.green);

} else if (s.equals("A pesetas")) { valor = (float) (valor * 166.321); panel.setBackground(Color.blue);

} cantidad.setText(Float.toString(valor)); }

}

}

Interfaces para procesar eventos „

Para facilitar la tarea del programador se han creado una serie de interfaces que deben implementarse cuando se quieren procesar algunos de estos eventos. Algunas interfaces y sus métodos son: ActionListener Escucha eventos de tipo ActionEvent

actionPerformed(ActionEvent)

KeyListener Escucha eventos de teclado

keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent)

MouseListener Escucha eventos de acción del ratón (botones)

mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent)

MouseMotionListener Escucha eventos de movimiento del ratón

mouseDragged(MouseEvent) mouseMoved(MouseEvent)

11

Ejercicio „

Escribe un swing que presente la GUI de un teléfono: „ „

„

Botones con los números del 0 al 9. Un campo de texto para mostrar el número marcado. Un botón para colgar el teléfono.

12

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.