Download Diapositiva 1 - Google Groups
Document related concepts
no text concepts found
Transcript
Interfaz Grafica de Usuario Interfaz de Usuario La interfaz de usuario es aquella que permite al programa interactuar con el usuario. Las interfaces de usuario pueden ser una simple línea de comandos o interfaces gráficas que proporcionan las aplicaciones más modernas. La interfaz de usuario es el aspecto más importante de cualquier aplicación. Una aplicación sin un interfaz fácil, impide que los usuarios saquen el máximo rendimiento del programa. Java proporciona los elementos básicos para construir decentes interfaces de usuario a través del AWT, y opciones para mejorarlas mediante Swing. Introducción al AWT Una interfaz grafica de usuario (GUI) presenta una interfaz de imágenes con un programa. Las clases de java que usamos para construir GUI’s forman parte del paquete: java.awt.* La estructura básica del AWT se basa en Componentes y Contenedores. Estructura de la AWT La estructura de la versión actual del AWT podemos resumirla en los puntos que se exponen a continuación: Los Contenedores contienen Componentes, que son los controles básicos. No se usan posiciones fijas de los Componentes, sino que están situados a través de una disposición controlada (layouts) El común denominador de más bajo nivel se acerca al teclado, ratón y manejo de eventos Alto nivel de abstracción respecto al entorno de ventanas en que se ejecute la aplicación Estructura de la AWT La arquitectura de la aplicación es dependiente del entorno de ventanas, en vez de tener un tamaño fijo. Es bastante dependiente de la máquina en que se ejecuta la aplicación (no puede asumir que un diálogo tendrá el mismo tamaño en cada máquina). Carece de un formato de recursos. No se puede separar el código de lo que es propiamente interface. Componentes Son aquellos que permiten al usuario interactuar con la aplicación y proporcionar información desde el programa al usuario sobre el estado del programa. Típicos ejemplos de Componentes son los botones, barras de desplazamiento, etiquetas, listas, cajas de selección o campos de texto. En el AWT, todos los Componentes de la interface de usuario son instancias de la clase Component o uno de sus subtipos. Colocación de Componentes La posición y tamaño de un componente en un contenedor es determinado por un manejador del Layout. Usted puede controlar el tamaño o posición de componentes deshabilitando al encargado de la disposición. Usted puede utilizar setLocation(), setSize(), o setBounds() del componente para localizarlo en el contenedor. Contenedores Los Contenedores contienen y organizan la situación de los Componentes; además, los Contenedores son en sí mismos Componentes y como tales pueden ser situados dentro de otros Contenedores. También contienen el código necesario para el control de eventos, cambiar la forma del cursor o modificar el icono de la aplicación. En el AWT, todos los Contenedores son instancias de la clase Container o uno de sus subtipos. Jerarquía de herencia java.AWT Object Event CheckboxGroup Eventos ¿Qué es un evento? Un evento es una encapsulación de una información que puede ser enviada a la aplicación de manera asíncrona. Los eventos pueden corresponder a acciones físicas (ratón y teclado) y acciones lógicas ¿Con cuales clases se trabajan los eventos? Java.util.EventObject es la clase padre de todos los eventos, su subclase java.awt.event es la clase padre de todos los eventos AWT Clase Event La clase Event intenta capturar las características fundamentales de todos los eventos que genera el usuario. Los datos miembro de la clase Event son los que se indican a continuación: id - El tipo de evento que se ha producido target - Componente sobre el que se ha producido el evento x, y - Las coordenadas en donde se ha producido el evento relativas al Componente que actualmente está procesando ese evento. key - Para eventos de teclado, es la tecla que se ha pulsado. Su valor será el valor Unicode del carácter que representa la tecla. Clase Event when - Instante en que se ha producido el evento modifiers - La combinación aritmética del estado en que se encuentran las teclas modificadoras Mays, Alt, Ctrl. clickCount - El número de clicks de ratón consecutivos. Sólo tiene importancia en los eventos MOUSE_DOWN arg - Es un argumento dependiente del evento. Para objetos Button, este objeto arg es un objeto String que contiene la etiqueta de texto del botón evt - El siguiente evento en una lista encadenada de eventos Generación y Propagación de Eventos Cuando un usuario interactúa con la forma, el sistema Java crea una instancia de la clase Event y llena sus datos miembro con la información necesaria para describir la acción. Es en ese momento cuando el sistema Java permite a la forma controlar el evento. Este control comienza por el Componente que recibe inicialmente el evento (por ejemplo, el botón que ha sido pulsado) y se desplaza hacia arriba en el árbol de Componentes, componente a componente, hasta que alcanza al Contenedor de la raíz del árbol. Generación y Propagación de Eventos Durante este camino, cada Componente tiene oportunidad de ignorar el evento o reaccionar ante él en una (o más) de las forma siguientes: Modificar los datos miembros de la instancia de Event Entrar en acción y realizar cálculos basados en la información contenida en el evento Indicar al sistema Java que el evento no debería propagarse más arriba en el árbol Generación y Propagación de Eventos Botón Uno recibe action... Panel 2 recibe action... Panel 1 recibe action... Forma recibe action... Botón Dos recibe action... Panel 2 recibe action... Panel 1 recibe action... Forma recibe action... Código controlador de eventos public boolean handleEvent( Event evt ) { if( evt.id == Event.ACTION_EVENT) { label2.setText("Hola"); return true; } return( super.handleEvent( evt ) ); } Código controlador de eventos public boolean handleEvent( Event evt ) { if( evt.target instanceof Button) { label2.setText(label2.getText().valueOf(var)); var++; return true; } return( super.handleEvent( evt ) ); } Tipos de Eventos FISICOS ComponentEvent Esconder, mover, redimensionar, mostrar ContainerEvent Añadir o eliminar un componente FocusEvent Obtener o perder el Focus KeyEvent Pulsar, liberar o teclear una tecla MouseEvent Entrar, salir, pulsar, soltar o hacer click MouseMotionEvent Arrastrar o mover WindowEvent Maximizar, minimizar, abrir, cerrar, activar o desactivar Tipos de Eventos SEMANTICOS ActionEvent Una acción se ha ejecutado AdjustmendEvent Un valor se ha ajustado ItemEvent Un estado a cambiado TextEvent Un texto ha cambiado Manejadores de Layout por defecto Component Container Window Frame Dialog BorderLayout Panel Applet FlowLayout Manejador FlowLayout • • • • • Disposición por defecto para la clase panel Componentes agregados de izquierda a derecha La alineación por defecto es centrado Utiliza componentes de tamaños preferidos Se usa su constructor para manejar su comportamiento Manejador BorderLayout • Disposición por defecto para la clase frame • Componentes agregados en regiones específicas import java.awt.*; Frame public class FrameExample{ private Frame f; public FrameExample() { f = new Frame("Hello!"); } public void launchFrame() { f.setSize(170,170); f.setBackground(Color.blue); f.setVisible(true); } public static void main(String args[]) { FrameExample guiWindow = new FrameExample(); guiWindow.launchFrame(); } } Componentes AWT Componentes AWT Swing Swing es una segunda generación del GUI toolkit de java. Se construye sobre AWT, pero suplanta los componentes con versiones más livianas para mejorar la interfaz grafica. Hay muchos componentes mas: JTable, JTree, y JComboBox. Swing import com.sun.java.swing.*; public class JHolaMundo extends JFrame { public static void main( String argv[] ) { new JHolaMundo(); } JHolaMundo() { JLabel hola = new JLabel( "Hola Mundo!" ); getContentPane().add( hola,"Center" ); setSize( 200,100); setVisible( true ); } } Swing • No utiliza nada nativo (no existen clases "peer") • 100% Pure Java (excepto drag and drop). • L & F (Look and Feel) cargado automáticamente para la plataforma. • Podemos diseñar nuestro propio aspecto. • Swing no reemplaza a AWT. • Extiende los componentes evitando métodos nativos. • Objetivo los NC. Swing Hay muchas mas clases que en el awt. Tienen el mismo nombre de algunas clases de awt, excepto una J inicial, como, por ejemplo, JFrame, JDialog, etc. Estas clases funcionan igual que las de awt, pero contienen muchos métodos más útiles. En swing están las Toolbar, es decir, unas pequeñas barras sobre las que hay unos botones. Se pueden mover dentro de las ventanas que las incluyen. Swing Los botones de swing, como casi todos los demás JComponent, pueden tener tanto una etiqueta como una imagen, imagen que puede cambiar según el estado del botón. Además en swing se pueden utilizar los Tooltip, es decir, aquellas sugerenias que salen automáticamente en un componente cuando el ratón se detiene en él durante un rato. Clases Peer Clases que conectan la interface gráfica a implementaciones dependientes de la plataforma (motif, windows) Clases Peer El AWT usa una arquitectura peer : Cada componente AWT crea un objeto paralelo llamado su peer (igual). Los objetos peer implementan interfaces en el paquete Java java.awt.peer. Por ejemplo, cada java.awt.Label usa un objeto peer que implementa java.awt.peer.LabelPeer. A cada componente AWT le corresponde una clase peer escrita en el código nativo del sistema operativo (C habitualmente), por lo que los componentes AWT son, por construcción, dependientes de la plataforma Clases Peer