Professional Documents
Culture Documents
• Aplicaciones
• Se pueden ejecutar directamente en un entorno Java
• Tipos
❏ Modo de consola
-Interacción mediante teclado
-Interfaz basado en texto
Programación basada en eventos ❏ Aplicaciones con interfaz gráfico (GUI)
-Ventanas graficas para entrada y salida de datos
-Iconos
-Dispositivos de entrada (e.g. ratón, teclado)
-Interacción directa
• Applets
• Pequeñas aplicaciones que se ejecutan dentro de un navegador
(o en el visualizador de applets - Appletviewer)
❏ Interfaz gráfico
❏ Limitaciones por motivos de seguridad
Java 1 Java 2
Java 3 Java 4
Modelo de evento Java 1.0 Modelo de evento Java 1.0 - Problemas
• Basado en herencia • Muy complejo para interfaces con muchas funcionalidades
• Un programa gestiona el tratamiento de eventos de un GUI • Poco escalable
• Especializando componentes del GUI y reescribiendo los • No permite una separación clara entre la aplicación y la
métodos action() o handleEvent() interfaz (GUI)
❏ Devuelve true --> evento tratado
• Todos los eventos se tratan mediante los mismos métodos
❏ Devuelve false --> el evento se propaga hacia arriba en la jerarquía
• Muchas posibilidades de error
• Estructuración del código
• No hay filtrado de eventos
• Cada componente se especializa para que gestione sus eventos ❏ Problemas de eficiencia
❏ Muchas clases muy pequeñas
• Todos los eventos de un grupo de componentes se tratan en un
componente que los contenga
❏ Los métodos action() o handleEvent() del componente contenedor debe
tener una instrucción de selección para determinar a que elemento
corresponde
Java 5 Java 6
Java 7 Java 8
Fuentes y Oyentes Uso del modelo
• Fuente (Source) • Los objetos que desean gestionar los eventos y recibir
• Objeto que origina o lanza eventos dichas notificaciones tienen que registrarse como oyentes
❏ En el API de cada objeto se define el conjunto de eventos que origina e implementar los métodos de la interfaz correspondiente
• Proporciona un conjunto de métodos para registrar y eliminar • Cuando ocurre un evento la fuente informa a los oyentes
oyentes específicos para estos eventos registrados invocando a dichos métodos (callback)
❏ set<TipoEvento>Listener - un único oyente • En un programa Swing, normalmente la fuente de eventos
❏ add<TipoEvento>Listener - múltiples oyentes
❏ remove<TipoEvento>Listener - elimina un oyente
es un componente GUI y el oyente es un objeto
“adaptador” que implementa el o los oyentes adecuados
• Oyente (Listener)
para que la aplicación gestione los eventos
• Objeto que gestiona o responde a los eventos
• El oyente también puede ser otro componente Swing que
• Define uno o más métodos a ser invocados por la fuente de implementa uno o más interfaces oyentes para agrupar
eventos en respuesta a cada evento específico objetos del GUI
• Objeto que implementa el interfaz <TipoEvento>Listener
Java 9 Java 10
especializando java.util.EventObject o los eventos AWT • 3. Implementación del método o métodos del interfaz en la
java.awt.AWTEvent clase que gestiona el evento
❏ public void actionPerformed(ActionEvent ev) {
• Los eventos del AWT se encuentran en el paquete // codigo que implementa la respuesta a la acción del usuario
java.awt.event // sobre el componente
}
• Toda la información sobre el evento viene encapsulada en un
objeto de una clase específica derivada de Event
Java 11 Java 12
Eventos de bajo nivel
Eventos: bajo nivel y semánticos Evento Significado
• No están relacionados con una clase específica de componente ActionEvent Realización de la acción específica asociada al componente
sino que pueden aplicarse a todos los componentes que ChangeEvent Cambio en el estado del componente
implementen un modelo semántico similar ItemEvent Elemento seleccionado o deseleccionado
❏ Evento “action”
-Lanzado por un botón cuando se pulsa una vez CaretEvent Cambio en la posición del cursor de inserción en un
-Lanzado por un elemento de una lista cuando se pulsa dos veces seguidas componente que gestiona texto
-Lanzado por una opción de un menú cuando se selecciona ListSelectionEvent Cambio en la selección actual en una lista
-Cuando se pulsa Enter en un campo de texto
Java 13 Java 14
Java 17 Java 18
Java 23 Java 24
Clases adaptadoras de eventos Clase adaptadora para el ratón
java.awt.event.ComponentAdapter
java.awt.event.ContainerAdapter java.awt.event.MouseAdapter
java.awt.event.FocusAdapter
java.awt.event.KeyAdapter Métodos
java.awt.event.MouseAdapter
java.awt.event.MouseMotionAdapter mousePressed(MouseEvent)
mouseReleased(MouseEvent)
java.awt.event.WindowAdapter mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mouseClicked(MouseEvent) (sin equivalente en 1.0)
Java 25 Java 26
• Se necesita una clase diferente para cada oyente public class AdaptadorClaseInterna extends JFrame {
• Demasiadas clases a tener en cuenta public AdaptadorClaseInterna(){
setTitle("Ventana que se puede cerrar");
• Confusión en el nombrado setSize(300, 100);
• Solución en Java 1.1 addWindowListener(
new WindowAdapter() {
• Clases internas public void windowClosing(WindowEvent e){
System.exit(0); // salida de la aplicación
• Clases internas anónimas }
❏ Clases internas (anidadas) a otras clases que no tienen nombre });
❏ No necesitan tener un nombre ya que sólo se crea un ejemplar o setVisible(true);
instancia de cada una }
public static void main(String args[]) {
• ¡ Cuidado con la legibilidad ! AdaptadorClaseInterna ventana = new AdaptadorClaseInterna();
}}
Java 29 Java 30
Tratamiento de eventos
• Para evitar problemas en el tratamiento de eventos hay
que realizar las siguientes comprobaciones:
• a) el oyente registrado es el más apropiado para el evento que
se desea detectar;
• b) este oyente se ha registrado en el componente adecuado; y
• c) se ha implementado el método o métodos correspondientes
en el oyente
Java 31