Introducción a Java (3) Humberto Cervantes Maceda Alfonso Martínez Martínez 1 Abril 2005 Indice Conceptos Java Interfases El Framework Swing 2 Interfases Ayer vimos el concepto de clase abstracta Una clase que contiene algunos metodos para los cuales no provee implementación Una clase abstracta pura No provee implementación para ningún método Java provee una palabra reservada para este tipo de clases : interfase En Java, una clase sólo puede extender a otra, sin embargo puede implementar multiples interfases Sustituye herencia múltiple 3 Ejemplo Interface A { void metodoA(); } Interface B { void metodoB(); } class C implements A,B { public void metodoA() {...} public void metodoB() {...} } 4 Separación interfase-implementación La separación interfase-implementación es una buena práctica en el desarrollo Un cliente depende de una interfase y no de una implementación Las implementaciones son sustituibles Esta practica se encuentra frecuentemente en el API de Java En particular en los Swing 5 El Framework Swing 6 Swing, qué son? Java provee un conjunto de clases que permiten crear de manera relativamente sencilla interfases de usuario complejas javax.swing Se trata de un framework Conjunto de clases y sus relaciones que para son utilizados mediante herencia A diferencia de su antecesor AWT, las aplicaciones Swing se despliegan de forma correcta en todo entorno de ejecución Es un poco lento 7 Componentes visuales Swing Tres tipos de componentes principales Contenedores Menus Componentes Todos son JComponents 8 Componentes visuales Swing Tres tipos de componentes principales Contenedores Menus Componentes 9 Contenedores Pueden contener a otros componentes JFrame – Ventana JPanel – Area JSplitPane – Area dividida JTabbedPane – Area con lenguetas JSrollPane – Area que se puede deslizar Etc... Algunos contenedores tienen asociado un layout que define disposición de componentes 10 BorderLayout FlowLayout GridLayout GridBagLayout Componentes visuales Swing Tres tipos de componentes principales Contenedores Menus Componentes 11 Componentes visuales Swing Tres tipos de componentes principales Contenedores Menus Componentes 12 Componentes No contienen a otros componentes JButton – botón JCheckBox – boton con palomita JLabel – mensaje de texto JTextField – entrada de texto JPasswordField – entrada de clave JList – lista JTree – arborescencia JTable – tabla JEditorPane – editor de texto etc... 13 Arquitectura MVC Los Swing están construidos siguiendo una arquitectura Modelo – Vista – Controlador Modelo : los datos Vista : representación visual de los datos Controlador : interacción con el usuario que modifica el modelo Esta arquitectura permite tener múltiples vistas para un mismo conjunto de datos 14 Arquitectura MVC Main title 22.5 20 17.5 15 Column 3 Column 2 Column 1 12.5 10 Modelo 12 25 18 14 100 21 22 14 34 11 1 17 05 1 42 2 7.5 5 2.5 0 Row 1 Actualiza Row 2 Row 3 Row 4 Main title 10 9 8 7 6 Actua sobre Column 1 Column 2 Column 3 5 4 3 2 1 0 Row 1 Controlador Row 2 Row 3 Row 4 Vistas Main title Row 1 Row 2 Row 3 Row 4 15 En Swing En general, para todo componente, existe un modelo JTree – TreeModel JList – ListModel etc... Todos los modelos son interfases Swing provee implementaciones por default Puesto que swing es un framework, en general tendremos que crear subclases de las clases de swing para usarlos 16 Mecanismo de eventos En general los componentes swing actuan a la vez de vista y de controlador envian eventos para notificar de cambios Los interesados en recibir eventos implementan una interface particular y se suscriber con el componente addActionListener(ActionListener e) La interfase tiene metodos que serán invocados por el componente en el momento en que se produzca un evento Es el patrón de diseño observer 17 Ejemplo JButton miBoton = new JButton(“Boton de prueba”); miBoton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { System.out.println(“Se presionó el botón”); }); En este ejemplo se crea una “clase interna” para manejar el evento Hay que consultar la JavaDoc para conocer los eventos con más detalle 18 Síntesis El framework Swing es muy poderoso pero algo dificil de abordar Requiere mucha práctica Hoy vamos a crear una interfaz de usuario ayudandonos del plugin Visual Editor de Eclipse 19