INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A S GUI Objetos y s Dr. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 207 Cada componente de una GUI está asociada a un objeto gráfico de alguna subclase de. Un objeto fuente del, está asociado a una componente reactiva de la GUI, puede percibir un externo provocado por una acción del usuario 0 y reaccionar ndo un interno. Un objeto se implícitamente, asociado a un interno do por un objeto fuente del. Un objeto oyente (listener) se registra a un objeto fuente de para responder a la acción del usuario sobre una componente de la GUI. Introducción a la Programación Orientada a Objetos IPOO - 207 2 El usuario realiza una acción sobre una componente reactiva que genera un externo El objeto fuente de asociado a la componente reactiva un interno ndo objetos de alguna subclase de Introducción a la Programación Orientada a Objetos IPOO - 207 3 La clase de un objeto fuente de determina las clases de los objetos que se rán implícitamente: Clase de los objetos Fuente de JButton JCheckBox JRadioButton JMenuItem JTextField JComboBox Clases de los objetos ActionEvent ActionEvent ActionEvent, KeyEvent Introducción a la Programación Orientada a Objetos IPOO - 207 4 Cada subclase de define atributos y métodos adecuados para un tipo particular de acción del usuario, como por ejemplo, mover el mouse sobre un panel, oprimir una tecla o activar un botón. En cada uno de estos casos se rá un objeto de una clase específica. Introducción a la Programación Orientada a Objetos IPOO - 207 5 Los objetos de las clases JButton, JTextField, JComboBox son objetos fuente de que n objetos de clase ActionEvent. Esto es, cuando el usuario realiza una acción sobre la componente asociada al objeto fuente de, este un objeto de clase ActionEvent. La clase del objeto oyente que escuche estos s deben implementar la interface ActionListener del paquete java.awt.event. Introducción a la Programación Orientada a Objetos IPOO - 207 6 Profesor Luciano H. Tamargo
El objeto oyente es instancia de una clase que implementa una interface y redefine el método manejador del Oyente ActionListener registrado a El objeto es un parámetro para el método manejador del Introducción a la Programación Orientada a Objetos IPOO - 207 7 La clase del oyente implementa a una interface redefiniendo al método manejador del de acuerdo al comportamiento esperado en respuesta a la acción del usuario. El manejador del recibe como parámetro a un objeto do implícitamente. Cuando un objeto fuente de un interno, objetos de alguna subclase de provista en el paquete java.awt.event. Introducción a la Programación Orientada a Objetos IPOO - 207 8 La interface define uno o más métodos manejadores que deben ser implementados considerando el comportamiento esperado en respuesta a la acción del usuario. La lista de parámetros de un manejador de s siempre consiste en un argumento del tipo de clase. Introducción a la Programación Orientada a Objetos IPOO - 207 9 Objeto Interface de oyente Manejador ActionEvent ActionListener actionperformed(actionevent) ItemEvent ItemListener itemstatechanged(itemevent) MouseEvent MouseListener mousepressed(mouseevent) mousereleased(mouseevent) mouseentered(mouseevent) mouseexited(mouseevent) mouseclicked(mouseevent) KeyEvent KeyListener keypressed(keyevent) keyrealesed(keyevent) keytyped(keyevent) Introducción a la Programación Orientada a Objetos IPOO - 207 0 Mostrar una ventana con un panel que cambiará de color según los diferentes s del mouse que se produzcan como consecuencia de las acciones del usuario. En otro panel se muestra la acción del usuario y la posición del indicador del mouse sobre la componente. Introducción a la Programación Orientada a Objetos IPOO - 207 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ControlMouse extends JFrame{ private JLabel Mouse; private Container contenedor; Introducción a la Programación Orientada a Objetos IPOO - 207 2 Profesor Luciano H. Tamargo 2
public ControlMouse() { contenedor = getcontentpane(); contenedor.setlayout(new GridLayout(2,0)); panelmouse = new JPanel(); panelmouse.setbackground(color.white); panelmouse.setpreferredsize (new java.awt.dimension(300, 50)); Mouse = new JLabel(); Mouse.setPreferredSize (new java.awt.dimension(300,70)); 3 public ControlMouse() { OyenteMouse escuchamouse = new OyenteMouse(); panelmouse.addmouselistener(escuchamouse); contenedor.add(panelmouse); contenedor.add(mouse); Observemos que el oyente queda registrado al panel, de modo que reaccionará ante los s del mouse producidos ante las acciones delusuario sobre el panel. 4 public void mouseclicked (MouseEvent e) { ( Cliqueó en [%d,%d]", e.getx(), e.gety())); panelmouse.setbackground(color.blue); public void mouseentered (MouseEvent e) { ( Entró en[%d,%d]", e.getx(), e.gety())); panelmouse.setbackground(color.red); Introducción a la Programación Orientada a Objetos IPOO - 207 5 Introducción a la Programación Orientada a Objetos IPOO - 207 6 public void mouseexited (MouseEvent e) { ("Salió en [%d,%d]", e.getx(), e.gety())); panelmouse.setbackground(color.green); public void mousereleased (MouseEvent e { ("Soltó en [%d,%d]", e.getx(), e.gety())); panelmouse.setbackground(color.magenta); Introducción a la Programación Orientada a Objetos IPOO - 207 7 Introducción a la Programación Orientada a Objetos IPOO - 207 8 Profesor Luciano H. Tamargo 3
public void mousepressed (MouseEvent e) { ("Presionó en [%d,%d]", e.getx(), e.gety())); panelmouse.setbackground(color.yellow); Introducción a la Programación Orientada a Objetos IPOO - 207 9 private JLabel Mouse; public void mouseclicked(mouseevent e) { public void mousepressed(mouseevent e) { public void mousereleased(mouseevent e) { public void mouseentered(mouseevent e) { java.awt.event.mouselistener mouseclicked(e:mouseevent): void mousepressed(e:mouseevent): void mousereleased(e:mouseevent): void mouseentered(e:mouseevent): void mouseexited(e:mouseevent): void public void mouseexited(mouseevent e) { 20 private void hacergui(){ getcontentpane().setlayout(new GridLayout(2,0)); panelmouse = new JPanel(); panelmouse.setbackground(color.white); panelmouse.setpreferredsize(new java.awt.dimension(300, 50)); Mouse = new JLabel(); Mouse.setPreferredSize(new java.awt.dimension(300,70)); OyenteMouse escuchamouse = new OyenteMouse(); panelmouse.addmouselistener(escuchamouse); panelmouse.addmousemotionlistener(escuchamouse); getcontentpane().add(panelmouse); getcontentpane().add(mouse); 2 private JLabel Mouse;; class OyenteMouse implements MouseListener, MouseMotionListener{ public void mouseclicked(mouseevent e) { public void mousepressed(mouseevent e){ public void mousereleased(mouseevent e) { 0 0 public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { 22 private JLabel Mouse;; class OyenteMouse implements MouseListener, MouseMotionListener{ 23 public void mousedragged(mouseevent e){ ("Arrastró a [%d,%d]", e.getx(),e.gety())); public void mousemoved(mouseevent e){ ("Se movió a [%d,%d]", e.getx(),e.gety())); Con frecuencia una interface de s brinda más servicios que los que necesitamos. Por ejemplo, la interface MouseListener ofrece cinco servicios, si nuestra GUI solo va a reaccionar ante 0 un click del mouse tenemos que definir el código de mouseclicked, los otros cuatro quedan sin especificar. Sin embargo, si definimos una clase que implementa a esta interface es necesario implementar todos los servicios provistos. Introducción a la Programación Orientada a Objetos IPOO - 207 24 Profesor Luciano H. Tamargo 4
Un adaptador es una clase que implementa todos los métodos de una interface, de modo que en lugar de implementar una interface podemos extender la clase adaptador. Para la interface MouseListener Java brinda la clase MouseAdapter con cuerpo vacío para los cinco métodos. Para MouseMotionListener la clase adaptador es MouseMotionAdapter. El objeto oyente es instancia de una clase que implementa una interface y redefine el método responsable de reaccionar ante la acción del usuario Introducción a la Programación Orientada a Objetos IPOO - 207 25 Introducción a la Programación Orientada a Objetos IPOO - 207 26 Oyente ActionListener registrado a El objeto es un parámetro para el método manejador del Profesor Luciano H. Tamargo 5