180 likes | 381 Views
TEMA 1. Diseño de interfaces gráficas. Introducción Componentes de la interfaz Programación dirigida por eventos Gestores de ubicación Primitivas gráficas de pantalla. Diseño de interfaces gráficas de usuario. Bibliografía. http://java.sun.com/docs/books/tutorial/uiswing/
E N D
TEMA 1.Diseño de interfaces gráficas Introducción Componentes de la interfaz Programación dirigida por eventos Gestores de ubicación Primitivas gráficas de pantalla. Diseño de interfaces gráficas de usuario
Bibliografía • http://java.sun.com/docs/books/tutorial/uiswing/ • Kathy Walrath, et all. “The JFC Swing Tutorial”. Ed. Addison Wesley. 2004. • http://www.programacion.com/java/tutorial/swing/
2 . Programación dirigida por eventos Eventos • Todas las clases relativas a eventos son subclases de java.util.EventObject. La biblioteca java.awt.event y java.swing.event contienen todos los eventos. • Todo evento posee un objeto fuente (getSource()). Además, cada clase de evento posee una serie de métodos adecuados para todos los tipos de eventos que define (getX() y getY()). • Sobre una componente se puede lanzar un evento. Cada tipo de evento es una clase distinta. Cuando el evento se lanza es recibido por uno o más de un "listener" que actúa sobre ese evento.
2 . Programación dirigida por eventos Eventos • Debemos crear un objeto Listener y registrarlo en la componente sobre la que se lanza el evento con addXXXListener(), donde XXX es el tipo de evento que escucha. Toda la lógica del tratamiento debe ir en la clase listener. • Si a un botón le añadimos addActionListener() estamos indicando que método se debe activar cuando el botón es pulsado. • ActionListener es una interface que sólo tiene un método actionPerformed() significando "esta es la acción que será llevada a cabo cuando se lanza un evento". actionPerformed() • NO recibe un evento genérico, sino un tipo específico: ActionEvent.
2 . Programación dirigida por eventos Eventos Evento->Interface del Listener-> métodos add & remove KeyEventKeyListeneraddKeyListener() & | removeKeyListener()
2 . Programación dirigida por eventos Eventos • Si trabajamos con una componente y sabemos los eventos que es capaz de recibir, los pasos a seguir serían los siguientes: • Tomamos el nombre del evento, le quitamos la palabra "Event" y la cambiamos por "Listener". • Implementamos el interface anterior escribiendo el código correspondiente para cada uno de los métodos de la interface. • Creamos un objeto de la clase listener del paso anterior y la registramos en nuestras componentes.
2 . Programación dirigida por eventos Eventos generales • Component • Notifica a los oyentes cambios en el tamaño, posición o visibilidad del componente. • Focus • Notifica a los oyentes que el componente a ganado o perdido la posibilidad de recibir entrada desde el teclado. • Key • Notifica a los oyentes las pulsaciones de teclas; sólo generado por el componente que tiene el foco del teclado. • Mouse • Notifica a los oyentes las pulsaciones del ratón y los movimientos de entrada y salida del usuario en el área de dibujo del componente. • Mouse Motion • Notifica a los oyentes cambios en la posición del cursor sobre el componente.
2 . Programación dirigida por eventos Adaptadores • Hay casos en los que la interface sólo tiene un método, con lo que la implementación es sencilla. Pero hay otros en el que podemos tener hasta 7 métodos que habría que reescribir de los que sólo nos interesan unos pocos. • Para evitar este problema cada una de la interfaces de los Listeners que tienen más de un método tienen un "adapter" que implementa completamente la interface. • Por ejemplo: MouseAdapter (para MouseListener), WindowAdapter (para WindowListener), etc...
2 . Programación dirigida por eventos Adaptadores class p implements WindowListener { ..... public void windowIconified(WindowEvent e) { ... sentencias...} // para los restantes eventos no hacemos nada public void windowActivated(WindowEvent e) {;} public void windowClosed(WindowEvent e) {;} public void windowClosing(WindowEvent e) {;} public void windowDeactivated(WindowEvent e) {;} public void windowDeiconified(WindowEvent e) {;} public void windowOpened(WindowEvent e) {;} } class p extends WindowAdapter { ..... public void windowIconified(WindowEvent e) { ... sentencias ...} // para los restantes eventos no hay que hacer nada. // El comportamiento deseado se hereda del adaptador = no hacer nada }
2 . Programación dirigida por eventos Eventos • Existen diferentes métodos para definir los oyentes de los métodos: • Como clases internas dentro de la definición de las clases componentes. • Como clases independientes, estableciendo algún mecanismo para identificar la componente sobre la que se produce el evento. • Directamente sobre la clase que extiende a la componente indicando que implemente la correspondiente interfaz • Como clases anónimas.
2 . Programación dirigida por eventos Eventos • Clase interna Class ComponenteIGU extends JPanel Button boton; ComponenteIGU(){ boton= new Button(“ejemplo”); add(boton); OyenteBoton oy= new OyenteBoton(); boton.addActionListener(oy); …} // Definición de la clase interna class OyenteBoton implements ActionListener public actionPerformer(ActionEvent e){ boton…..}
2 . Programación dirigida por eventos Eventos • Clase externa class OyenteBoton implements ActionListener public actionPerformer(ActionEvent e){ problema al tratar de referenciar el boton e.getSource() boton…..}
2 . Programación dirigida por eventos Eventos • Extendiendo la clase para que tenga también la función de oyente. Class ComponenteIGU extends JPanel implements ActionListener Button boton; ComponenteIGU(){ boton= new Button(“ejemplo”); add(boton); boton.addActionListener(this); …} public actionPerformer(ActionEvent e){ boton…..}
2 . Programación dirigida por eventos Eventos • Como clase anónima Class ComponenteIGU extends Jpanel implements ActionListener Button boton; ComponenteIGU(){ boton= new Button(“ejemplo”); add(boton); boton.addActionListener( new ActionListener { public actionPerformer(ActionEvent e){ boton…..}})