tema 1. diseño de interfaces gráficas
DESCRIPTION
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/ - PowerPoint PPT PresentationTRANSCRIPT
11
TEMA 1.TEMA 1.Diseño de interfaces Diseño de interfaces gráficasgráficas
1.1. IntroducciónIntroducción
2.2. Componentes de la interfazComponentes de la interfaz
3.3. Programación dirigida por eventosProgramación dirigida por eventos
4.4. Gestores de ubicaciónGestores de ubicación
5.5. Primitivas gráficas de pantalla.Primitivas gráficas de pantalla.
6.6. Diseño de interfaces gráficas de Diseño de interfaces gráficas de usuariousuario
22
Bibliografía Bibliografía
http://java.sun.com/docs/books/http://java.sun.com/docs/books/tutorial/uiswing/tutorial/uiswing/
Kathy Walrath, et all. “The JFC Swing Kathy Walrath, et all. “The JFC Swing Tutorial”. Ed. Addison Wesley. 2004.Tutorial”. Ed. Addison Wesley. 2004.
http://www.programacion.com/java/http://www.programacion.com/java/tutorial/swing/tutorial/swing/
33
EventosEventos Todas las clases relativas a eventos son subclases de Todas las clases relativas a eventos son subclases de
java.util.EventObjectjava.util.EventObject. La biblioteca . La biblioteca java.awt.event y java.awt.event y java.swing.event java.swing.event contienen todos los eventos.
Todo evento posee un objeto fuente (Todo evento posee un objeto fuente (getSource()getSource()). ). Además, cada clase de evento posee una serie de Además, cada clase de evento posee una serie de métodos adecuados para todos los tipos de eventos métodos adecuados para todos los tipos de eventos que define (que define (getX() getX() y y getY()getY()).).
Sobre una componente se puede lanzar un evento. Sobre una componente se puede lanzar un evento. Cada tipo de evento es una clase distinta. Cuando el Cada tipo de evento es una clase distinta. Cuando el evento se lanza es recibido por uno o más de un evento se lanza es recibido por uno o más de un ""listenerlistener" que actúa sobre ese evento." que actúa sobre ese evento.
2 . Programación dirigida por eventos
44
EventosEventos 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
55
EventosEventosEvento->Interface del Listener-> métodos add &
removeKeyEvent KeyListener addKeyListener() & |
removeKeyListener()
2 . Programación dirigida por eventos
66
EventosEventos 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
77
Eventos generalesEventos 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
88
EventosEventos
2 . Programación dirigida por eventos
99
EventosEventos
2 . Programación dirigida por eventos
1010
EventosEventos
2 . Programación dirigida por eventos
1111
AdaptadoresAdaptadores 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
1212
AdaptadoresAdaptadoresclass 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
1313
OyentesOyentes
2 . Programación dirigida por eventos
Listener interface w/ adapter
Métodos en la interfaz
ActionListener actionPerformed(ActionEvent)
AdjustmentListener adjustmentValueChanged( AdjustmentEvent)
ComponentListener ComponentAdapter
componentHidden(ComponentEvent) componentShown(ComponentEvent) componentMoved(ComponentEvent) componentResized(ComponentEvent)
ContainerListener ContainerAdapter
componentAdded(ContainerEvent) componentRemoved(ContainerEvent)
FocusListener FocusAdapter
focusGained(FocusEvent) focusLost(FocusEvent)
KeyListener KeyAdapter
keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent)
MouseListener MouseAdapter
mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent)
MouseMotionListener MouseMotionAdapter
mouseDragged(MouseEvent) mouseMoved(MouseEvent)
WindowListener WindowAdapter
windowOpened(WindowEvent) windowClosing(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent)
ItemListener itemStateChanged(ItemEvent)
TextListener TextValueChanged(TextEvent)
1414
EventosEventos 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
1515
EventosEventos Clase internaClass ComponenteIGU extends JPanelButton boton;
ComponenteIGU(){ boton= new Button(“ejemplo”);
add(boton); OyenteBoton oy= new OyenteBoton(); boton.addActionListener(oy); …}// Definición de la clase internaclass OyenteBoton implements ActionListenerpublic actionPerformer(ActionEvent e){ boton…..}
2 . Programación dirigida por eventos
1616
EventosEventos Clase externa
class OyenteBoton implements ActionListenerpublic actionPerformer(ActionEvent e){ problema al tratar de referenciar el boton e.getSource() boton…..}
2 . Programación dirigida por eventos
1717
EventosEventos Extendiendo la clase para que tenga
también la función de oyente.Class ComponenteIGU extends JPanel implements
ActionListenerButton boton;ComponenteIGU(){
boton= new Button(“ejemplo”); add(boton);
boton.addActionListener(this); …}public actionPerformer(ActionEvent e){ boton…..}
2 . Programación dirigida por eventos
1818
EventosEventos Como clase anónimaClass ComponenteIGU extends Jpanel implements
ActionListenerButton boton;ComponenteIGU(){
boton= new Button(“ejemplo”); add(boton);
boton.addActionListener( new ActionListener { public actionPerformer(ActionEvent e){ boton…..}})
2 . Programación dirigida por eventos