Diferencia entre revisiones de «Usuario:ManuelRomero/eventos»

De WikiEducator
Saltar a: navegación, buscar
 
(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
+
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

Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg



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) Java evento1.jpg.png 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)

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


Icon key points.gif

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
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();
   }
}