Diferencia entre revisiones de «Usuario:ManuelRomero/eventos»
(2 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 37: | Línea 37: | ||
***si hay un objeto escuchando a ese objeto actuará en consecuencia | ***si hay un objeto escuchando a ese objeto actuará en consecuencia | ||
***si no hay objeto escuchando o lo hay pero no lo hace a ese objeto, el evento se pierde, (nadie actúa ante él) | ***si no hay objeto escuchando o lo hay pero no lo hace a ese objeto, el evento se pierde, (nadie actúa ante él) | ||
− | + | Por lo tanto tenemos tres objetos | |
− | ;El Source | + | ;El Source |
+ | :Es el objeto en el que se produce la acción y que genera un evento p.e. botón | ||
;El Event | ;El Event | ||
− | ;El Listener | + | :Es el objeto evento que se ha producido |
+ | ;El Listener | ||
+ | :Es el objeto escuchador encargado de percibir y comunicar que se han producido enventos | ||
+ | Por este funcionamiento el java los evento funcionan por lo que se llama ''la delegación de eventos'' | ||
+ | {{Puntos clave| Los eventos se producen y se delegan en otros objetos para que sean comunicados | ||
+ | Siempre y cuando el objeto donde se ha producido el evento tenga asociado un objeto de escucha de eventos | ||
+ | }} | ||
+ | |||
+ | ==Gestion de eventos en Java== | ||
+ | En java tengo clases especializadas en escuchar eventos | ||
+ | Todas ellas son interfaces, por lo tanto tengo que '''implementarlas''' | ||
+ | Un ''escuchador'' se puede incorporar de tres formas diferentes | ||
+ | *Pasar una instancia de la clase asociándolo directameten a un objeto al que tiene que escuchar | ||
+ | Esta no se usa mucho por ser un poco larga, sí la usan los asistentes de diseño como vermeos más adelante | ||
+ | *Que la clase actual implemente el listener Se suele usar mucho por comodidad | ||
+ | class Interfaz extends JFrame implements ActionListener | ||
+ | *Crear una clase interna que cree el listener La más interesante sobre todo al principio | ||
+ | Veamos el siguiente ejemplo | ||
+ | <source lang=java> | ||
+ | import java.awt.event.*; | ||
+ | import javax.swing.*; | ||
+ | import java.awt.*; | ||
+ | |||
+ | public class Eventos extends JFrame implements ActionListener{ | ||
+ | public void actionPerformed(ActionEvent e){ | ||
+ | if (e.getSource()==B1) | ||
+ | JOptionPane.showMessageDialog(B1,"Has presionado el botón 1"); | ||
+ | if (e.getSource()==B2) | ||
+ | JOptionPane.showMessageDialog(B1,"Has presionado el botón 2"); | ||
+ | }//End actionPerformed() | ||
+ | JButton B1 =new JButton ("B1"); | ||
+ | JButton B2 =new JButton ("B2"); | ||
+ | Eventos(){ | ||
+ | setBounds(100,100,400,400); | ||
+ | setTitle("Eventos"); | ||
+ | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | setLayout(new FlowLayout()); | ||
+ | B1.addActionListener(this); | ||
+ | B2.addActionListener(this); | ||
+ | add(B1); | ||
+ | add(B2); | ||
+ | setVisible(true); | ||
+ | } | ||
+ | public static void main(String []a){ | ||
+ | Eventos e = new Eventos(); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | El equivalente haciendo una clase interna | ||
+ | <source lang=java> | ||
+ | import java.awt.event.*; | ||
+ | import javax.swing.*; | ||
+ | import java.awt.*; | ||
+ | |||
+ | public class Eventos extends JFrame { | ||
+ | JButton B1 =new JButton ("B1"); | ||
+ | JButton B2 =new JButton ("B2"); | ||
+ | ElEscuchador escuchador = new ElEscuchador | ||
+ | Eventos(){ | ||
+ | setBounds(100,100,400,400); | ||
+ | setTitle("Eventos"); | ||
+ | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
+ | setLayout(new FlowLayout()); | ||
+ | B1.addActionListener(escuchador); | ||
+ | B2.addActionListener(escuchador); | ||
+ | add(B1); | ||
+ | add(B2); | ||
+ | setVisible(true); | ||
+ | } | ||
+ | class ElEscuchador implements ActionListener{ | ||
+ | public void actionPerformed(ActionEvent e){ | ||
+ | if (e.getSource()==B1) | ||
+ | JOptionPane.showMessageDialog(B1,"Has presionado el botón 1"); | ||
+ | if (e.getSource()==B2) | ||
+ | JOptionPane.showMessageDialog(B1,"Has presionado el botón 2"); | ||
+ | }//End actionPerformed() | ||
+ | }//End ElEscuchador | ||
+ | public static void main(String []a){ | ||
+ | Eventos e = new Eventos(); | ||
+ | } | ||
+ | } | ||
+ | </source> |
Última revisión de 12:27 10 abr 2012
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
Contenido
Eventos
- Un 'evento' es una acción o suceso que ocurre sobre un objeto que es sensible a dicha acción
- Ejemplo de un evento
- Hacer un click sobre un botón
- pasar el cursor del ratón por encima de un elemento de mi pantalla
- Un porceso le envía una señal a la impresora de que quiere imprimir
- Es típico de la programación visual que esté conducida por eventos
- Ahora el programa ya no tiene una secuación lógica de instrucciones para se ejecutada, no sigue un camino marcado
- El programa presenta una interfaz gráfica una serie de elementos gráficos u objetos
- El usuario de la aplicación en función de lo que quiera hacer realiza acciones en la interfaz gráfica
- La interfaz gráfica identifica esas acciones o eventos y ejecuta código asociado a dichas acciones
- Por lo tanto la ejecución del programa dependerá de los eventos que se vayan produciendo, el programa se presenta como una interfaz que está esperando a que ocurran enventos, ocurre un evento ejecuto un código asocido de alguna manera a dicho evento y de nuevo el programa se queda en estado de espera a que ocurra otro evento
Delegación de eventos en Java
No todos los entornos de desarrollo gestionan los eventos de igual manera. Java realiza la gestión de eventos delegando, y se conoce como 'delegacion de eventos' por qué se conoce con este nombre: hasta ahora vemos en este escenario dos elementos: el evento que se produce El objeto sobre el que se produce el evento que es quien va a generarlo esta frase no nos debe confundir. Efectivamente el evento se ha producido por que un usuario a realizado una acción sobre un objeto, es el usuario el que ha originado o provocado el evento, pero en el sistema el evento lo va a generar el objeto sobre el que se ha producido.pongamos un ejemplo para verlo.
Evento, y source del evento
Tengo un botón de timbre. una persona (usuario) llega a la puerta y presiona el botón del timbre (objeto) y el timbre provoca un ruido (evento) Podemos analizar el escenario y observar:
- 1 elemento externo a mi programa
(usuario) quien ha provocado el evento
- dentro del programa tendo dos elemntos
- Evento que se produce suena el timbre
- Objeto source de dicho evento el bóton genera un sonido de timbre'
- Ahora pueden ocurrir dos cosas: siguiendo con el ejemplo (suponemos que es el timbre de una casa)
- Que no hay nadie dentro de casa y el sonido se pierde, nadie lo oye y por lo tanto nadie hace nada
- Que hay una persona dentro de casa y está escuchando oye el sonido del tiembre y actua abriendo la puerta
- Que hay una persona en casa pero no está escuchando ya que por ejemplo lleva cascos (En realidad es igual que el caso primero, es como si no hubiera)
- Entonces aparece el concepto de delegación de eventos
- El botón ha generado el evento ring y este delega el evento en un escuchador
- si hay un objeto escuchando a ese objeto actuará en consecuencia
- si no hay objeto escuchando o lo hay pero no lo hace a ese objeto, el evento se pierde, (nadie actúa ante él)
- El botón ha generado el evento ring y este delega el evento en un escuchador
Por lo tanto tenemos tres objetos
- El Source
- Es el objeto en el que se produce la acción y que genera un evento p.e. botón
- El Event
- Es el objeto evento que se ha producido
- El Listener
- Es el objeto escuchador encargado de percibir y comunicar que se han producido enventos
Por este funcionamiento el java los evento funcionan por lo que se llama la delegación de eventos
Los eventos se producen y se delegan en otros objetos para que sean comunicados Siempre y cuando el objeto donde se ha producido el evento tenga asociado un objeto de escucha de eventos
|
Gestion de eventos en Java
En java tengo clases especializadas en escuchar eventos Todas ellas son interfaces, por lo tanto tengo que implementarlas Un escuchador se puede incorporar de tres formas diferentes
- Pasar una instancia de la clase asociándolo directameten a un objeto al que tiene que escuchar
Esta no se usa mucho por ser un poco larga, sí la usan los asistentes de diseño como vermeos más adelante
- Que la clase actual implemente el listener Se suele usar mucho por comodidad
class Interfaz extends JFrame implements ActionListener
- Crear una clase interna que cree el listener La más interesante sobre todo al principio
Veamos el siguiente ejemplo
import java.awt.event.*; import javax.swing.*; import java.awt.*; public class Eventos extends JFrame implements ActionListener{ public void actionPerformed(ActionEvent e){ if (e.getSource()==B1) JOptionPane.showMessageDialog(B1,"Has presionado el botón 1"); if (e.getSource()==B2) JOptionPane.showMessageDialog(B1,"Has presionado el botón 2"); }//End actionPerformed() JButton B1 =new JButton ("B1"); JButton B2 =new JButton ("B2"); Eventos(){ setBounds(100,100,400,400); setTitle("Eventos"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); B1.addActionListener(this); B2.addActionListener(this); add(B1); add(B2); setVisible(true); } public static void main(String []a){ Eventos e = new Eventos(); } }
El equivalente haciendo una clase interna
import java.awt.event.*; import javax.swing.*; import java.awt.*; public class Eventos extends JFrame { JButton B1 =new JButton ("B1"); JButton B2 =new JButton ("B2"); ElEscuchador escuchador = new ElEscuchador Eventos(){ setBounds(100,100,400,400); setTitle("Eventos"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); B1.addActionListener(escuchador); B2.addActionListener(escuchador); add(B1); add(B2); setVisible(true); } class ElEscuchador implements ActionListener{ public void actionPerformed(ActionEvent e){ if (e.getSource()==B1) JOptionPane.showMessageDialog(B1,"Has presionado el botón 1"); if (e.getSource()==B2) JOptionPane.showMessageDialog(B1,"Has presionado el botón 2"); }//End actionPerformed() }//End ElEscuchador public static void main(String []a){ Eventos e = new Eventos(); } }