Cada tipo de evento se crea con una clase JavaAlgunas clases representan todo un grupo de eventos(e.g. MouseEvent puede representar un “mouse up”,“mouse down”, “mouse drag”, “mouse move”, etc.)
Csúszik: 2
Interfaces en Multiples Eventos
Problema: Estas interfaces nos obligan a implementar muchos métodos(vacíos) aunque nosotros sólo queramos tratar un tipo concreto de ellosclass OyenteRaton implements MouseListener {public void mouseClicked(MouseEvent e) {// Procesar clic del ratón}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}
Csúszik: 3
A menudo las interfaces de los oyentes agrupan muchos métodos pararesponder a eventos muy distintos• Ejemplo: MouseListener agrupa los métodos para todos los eventos relacionados con el ratónmouseClicked()mouseEntered() mouseExited()
Clases Adaptadoras
Solución: En Java lo que suele hacerse esutilizar clases adaptadorasImplementaciones parciales de las interfaces deoyentes, donde el código de todos los métodos estávacío o es trivialEjemplo: MouseAdapter (que implementa la interfazmencionada antes, MouseListener)class OyenteRaton extends MouseAdapter {public void MouseClicked(MouseEvent e) {// Procesar clic del ratón}// Los demás métodos están vacíos en MouseAdapter
Las GUIs pueden llegar a tener muchos componentes gráficos y eventosposibles, y se necesita una clase diferente para cada oyenteEn Swing estos componentes son fuentes, aunque también pueden ser oyentesEsto obliga a definir muchas clases oyentes, causando confusión al programador La solución en Java es usar clases anidadas (interiores, e incluso anónimas)
public class AdaptadorClaseInterior extends JFrame {public AdaptadorClaseInterior(){setTitle("Ventana que se puede cerrar");setSize(300, 100);addWindowListener(new WindowAdapter() { // Gestor anónimo de ventanapublic void windowClosing(WindowEvent e){System.exit(0); // Salida del programa}} );Visible(true);
Csúszik: 0
En Java existen jerarquías de eventos y deoyentes predefinidasRaíz de la jerarquía de los eventos:java.util.EventObject Extendiendo esta clase pueden definirse nuevos eventosInterfaz común para todos los oyentes:java.util.EventListener