23/03/2007 PROGRAMACIÓN GRÁFICA JAVA:AWT, SWING, SWT 23/03/2007 DAI Evolución z Hasta Java 2: Abstract Window Toolkit (AWT) – – z GUI no programada sobre objetos Java Apariencia dependiente de la arquitectura de ejecución Después de Java 2:Swing, Standard Widget Toolkit (SWT) – – Java Apariencia independiente (look&feel para forzar apariencias) 23/03/2007 DAI 1 23/03/2007 Primeros acercamientos al modo gráfico z Método paint(Graphics g) (java.awt.Component) z Texto – g.drawString(“Hola Mundo”, 40,120); z Líneas – z g.drawLine(5,10,30,50) Rectángulos – g.drawRect(x,y,ancho, alto) 23/03/2007 DAI Primeros acercamientos al modo gráfico z Polígonos – Polygon P=new Polygon(); p.addPoint(x,y); z Óvalos – drawOval(x,y,ancho, alto) z Arcos – drawArc(x,y,ancho, drawArc(x y ancho alto, alto anguloInicial, anguloInicial arcoAngulo) z Colores – Color o=new Color(r,g,b); – g.setColor(Color.red) – setBackground(Color.white) 23/03/2007 DAI 2 23/03/2007 Trabajando con fuentes z Clase Font – Estilos permitidos: PLAIN, BOLD, ITALIC – Fuente z Font f=new Font(“Times New Roman”, Font.BOLD+Font.ITALIC,12); z g.setFont(f); g. drawString(…); z Clase FontMetricsÎ medidas en píxeles – int getAscent (): distancia baseline hasta la altura de las mayúsculas. mayúsculas int getDescent (): distancia baseline hasta profundidad de los caracteres que descienden. int getLeading(): espacio mínimo entre líneas. int qetHeighc(): distancia entre dos líneas (descent + leading + ascent). int getMaxAscent(): ascent máximo. – int stringWidth(String st): anchura de un string dado. – – – – – 23/03/2007 DAI Con esto podríamos conseguir cosas así…. 23/03/2007 DAI 3 23/03/2007 ¿Qué ofrece AWT? z z z z z Conjunto rico de componentes de interfaz de usuario Modelo robusto de gestión de eventos Herramientas para gráficos e imágenes, formas, colores y fuentes Gestores de layouts para que la disposición en pantalla no dependa del tamaño de ventana o resolución Cl Clases para transferencia t f i de d datos, d t copiar i y pegar all portapapeles 23/03/2007 DAI Pros de AWT z Velocidad: El uso de componentes nativos eleva el rendimiento z Portabilidad de applets: AWT soportado sin el plugin de Java por casi todos los navegadores z Look and Feel: Aspecto propio de la plataforma 23/03/2007 DAI 4 23/03/2007 Contras de AWT z Portabilidad: Uso de componentes nativos limita la portabilidad ya que algunas funciones no están disponibles para algunas plataformas z Desarrolladores: Menos componentes disponibles que en otras librerías tipo Swing z Características: AWT no soporta iconos y tool-tips 23/03/2007 DAI Elementos básicos AWT (java.awt) z Object – CheckboxGroup – Component z Button z Canvas CheckBox Choice z Container – Panel z Applet – ScrollPane – Window z Dialog Frame z Label List z TextComponent – TextArea TextField z MenuComponent – MenuItem z CheckboxMenuItem z Menu z PopupMenu 23/03/2007 DAI 5 23/03/2007 Layouts AWT (java.awt) z LayoutManager – – – FlowLayout GridLayout LayoutManager2 z z z BorderLayout CardLayout GridBagLayout 23/03/2007 DAI Más sobre AWT z z z z z z Dispose automático de los elementos, excepto en elementos de alto nivel como Dialog o Frame Son thread-safe, esto es, actualización del GUI sin problemas de seguridad Î + lento Composición top-down o bottom-up No hay API de accesibilidad para AWT. Id de Idea d JJava: S Se escribe ib 1 vez, se ejecuta j t en cualquier l i sitio iti Î AWT depende de la configuración local Î se escribe 1 vez, se comprueba en todos los sitios. Graphics 2D, Java 2D, Java3D, JavaSound, etc…basados en AWT. 23/03/2007 DAI 6 23/03/2007 SWING z z z z z z Parte del Java Foundation Classes (JFC) Todas las características de AWT. Versiones 100% Java de los componentes AWT Nuevos componentes tipo árbol de vista o listbox Diseño Java independiente del destino Look and Feel “pluggable”. 23/03/2007 DAI Pros de SWING z Portabilidad: Diseño Java 100% tiene menos limitaciones específicas z Comportamiento: Diseño Java 100% permite definir más comportamientos al no haber limitaciones específicas z Características: Soporte para iconos, tool-tips,etc z Look and Feel: Posibilidad de diseñar un conjunto de elementos que reflejen el aspecto de cualquier plataforma(Microsoft Windows, Solaris, Mac, etc.). Simplificación de cambios globales automáticos para conseguir mayor accesibilidad 23/03/2007 DAI 7 23/03/2007 Contras de SWING z Portabilidad de applets: Los navegadores requieren el plug-in Java z Rendimiento: Más lentos que AWT. Usan un controlador gráfico propio, en vez de APIs nativas (p.ej, DirectX) z Look and Feel: Puede que no resulten de aspecto idéntico a otras aplicaciones nativas, lo cual puede “incomodar “ al usuario. z Mayor complejidad que AWT 23/03/2007 DAI Componentes SWING (javax.swing) z Object – Component z Container – JComponent (subtipos) – Panel z Applet z JApplet – Window z Dialog z JDialog z Frame z JFrame z JWindow 23/03/2007 DAI 8 23/03/2007 Layouts SWING (javax.swing) z LayoutManager – – CenterLayout LayoutManager2 z z z BoxLayout OverlayLayout S i L SpringLayout 23/03/2007 DAI SWING vs AWT z SWING permite la separación entre modelo, vista y controlador. Esto permite adaptar el modelo a las necesidades de la aplicación y ser compartido por múltiples vistas z Look&Feel programable z Editores por tipos de modelos y de componentes, por lo que las listas, tablas y árbole spueden procesar elementos de casi cualquier tipo. z SWING ofrece una infraestructura y una API para conseguir accesibilidad. Dispose automático; bottom-up y top-down z 23/03/2007 DAI 9 23/03/2007 SWT z z z z z Open Source Similar en concepto a AWT Ofrece JFace como conjunto mejorado de componentes y utilidades para simplificar la creación de GUIs con SWT SWT. Intento de eliminar problema AWT y Swing Cercano a dependiente de la plataforma 23/03/2007 DAI Algunos componentes SWT z Object – – Dialog Widget z z z Menu Item C Control l 23/03/2007 DAI 10 23/03/2007 Layouts SWT (org.eclipse.swt.layout,…) z Layout – – – – – FillLayout FormLayout GridLayout RowLayout y !StackLayout 23/03/2007 DAI Más sobre SWT z z z z z z No libera automáticamente, aunque los contenedores hacen el dispose de sus controles hijo Sólo top-down (todo componente requiere de un contenedor padre) La accesibilidad depende de si el host donde se ejecuta ofrece servicios de accesibilidad Entorno gráfico limitado (poco soporte para Java2D, Java3D,..)ÎDraw2D de Graphical Editing Framework) No es tecnología estándar Java No todos los componentes SWT tienen modelos asociados al estilo Swing, sino listas de items. 23/03/2007 DAI 11 23/03/2007 23/03/2007 DAI 23/03/2007 DAI 12 23/03/2007 23/03/2007 DAI ¿Qué elegir? z z z z z z Caso general: Swing o SWT+JFace Swing es superior a SWT sin JFace Swing es Java estándar, portable y con mejor arquitectura Swing permite aplicaciones gráficas avanzadas SWT es como una aplicación nativa, nativa aumentando el rendimiento y la compatiblidad nativa. Si desarrollamos para una única plataforma, SWT tiene ventaja en cuanto a compatibilidad,incluyendo integración con características locales tipo uso de ActiveX en Windows 23/03/2007 DAI 13 23/03/2007 Elementos SWING z z z z z z z Contenedores de alto nivel Contenedores de propósito general Contenedores de propósito especial Controles básicos P t ll no editables Pantallas dit bl Pantallas editables Layouts 23/03/2007 DAI Layouts z Hasta ahora: Qué elementos vamos a emplear z A partir de ahora: Cómo se distribuyen 23/03/2007 DAI 14 23/03/2007 FlowLayout z z z z z Se añaden los componentes línea a línea Se cambia de línea al llenar la anterior FlowLayout(alineamiento, hgap, vgap) Alineamiento: LEFT, CENTER, RIGHT H Hgap, vgap: distancia di t i entre t componentes t 23/03/2007 DAI BorderLayout z North y South: Expansión a lo ancho z West y East: Ocupan toda la altura tras poner North y South z Center: Lo que quede z BorderLayout(hgap, vgap) 23/03/2007 DAI 15 23/03/2007 CardLayout z z z z z z Basado en pestañas Sólo se muestran algunos contenidos, que ocupan todo el espacio Cambio de componente mediante eventos (próximo tema) CardLayout(hgap,vgap) Show(parent, name) First(parent), last,next, previous 23/03/2007 DAI GridLayout z z z z z Sistema de filas y columnas 1 componente por casilla (ocupan toda la celda, esto es, se redimensionan) Celdas del mismo tamaño Se añaden de izquierda a derecha y de arriba abajo GridLayout(rows,cols,hgap,vgap) 23/03/2007 DAI 16 23/03/2007 GridBagLayout z z Permite ocupar más de 1 celda gridx, gridy : – – – z Fila y columna arriba izqda del componente. GridBagLayout.RELATIVE Permite tener grids predecibles gridwidth, gridheight: – Nº celdas usadas por el componente z Remainder 23/03/2007 DAI GridBagLayout z Fill: Cuando el componente es más pequeño que la celda, cómo redimensionar: None, Horizontal, Vertical, Both z ipadx, ipady : Padding interno a ambos ipadx lados 23/03/2007 DAI 17 23/03/2007 GridBagLayout z Insets: Padding externo (entre componente y límite de superficie de visualización) Anchor: dónde situar el componente si es más pequeño z weightx, weighty : peso fila-columna para redimensionar z 23/03/2007 DAI SpringLayout 23/03/2007 DAI 18 23/03/2007 SpringLayout z z z z Distancias entre bordes de componentes encapsuladas en objetos Spring SpringLayout – NORTH, SOUTH, EAST, WEST Constraints: Restricciones sobre un componente – x,y,width, height west = x ; north = y ; east = x + width ; south = y + height SpringLayout.Constraints labelCons = layout.getConstraints(label); labelCons.setX(Spring.constant(5)); labelCons.setY(Spring.constant(5)); 23/03/2007 DAI Crear Layouts propios z void addLayoutComponent(String, Component) z void removeLayoutComponent(Component) Dimension preferredLayoutSize(Container) z Dimension minimumLayoutSize(Container) z void layoutContainer(Container) 23/03/2007 DAI 19 23/03/2007 Contenedores de alto nivel 23/03/2007 DAI Tipos de ventanas z Ventana primaria z Ventana secundaria z Diálogos z Mensajes z Pop-Up z Paleta 23/03/2007 DAI 20 23/03/2007 Ventana primaria z Representan función o aplicación independiente z Presentan constantemente componentes de ventana y controles (ej: barra de menú) z Presentan información que se actualiza constantemente (ej: fecha y hora) z Proporcionan contexto a ventanas dependiente z No dividir una función independiente en dos o más ventanas primarias z No presentar funciones no relacionadas en una ventana primaria 23/03/2007 DAI Ventana secundaria z Para acciones subordinadas: – z z z Extensión de funciones en cuanto a complejidad y relacionadas con objetos de ventanas primarias Para presentar componentes de ventana usados ocasionalmente A Acceso a través t é de d componentes t de d ventanas t primarias No debería ser más grande de 263x263 unidades de diálogo 23/03/2007 DAI 21 23/03/2007 Modalidad en ventanas secundarias z z z z z z No deseamos permitir interacción con otra ventana Presentar información (ej: mensajes) Recibir entrada de usuario Preguntar g al usuario Usar con cuidado al restringir al usuario No usarlas al requerir la tarea interacción con otras ventanas 23/03/2007 DAI Cascadas en ventanas secundarias z z z z z z Para proporcionar opciones avanzadas a menor nivel en un diálogo complejo Uso de botón de comando que nos lleve a un nuevo diálogo con … Presentar el diálogo adicional en forma de cascada No más de 2 cascadas por ruta No ocultar barra de título ni información relevante mostrada Cerrar la ventana secundaria que la abre si son independientes 23/03/2007 DAI 22 23/03/2007 Desenrollamiento en ventanas secundarias z Proporciona opciones avanzadas al mismo nivel de complejidad z Uso de botón de comandos con >> z Expandir a la derecha o abajo 23/03/2007 DAI Diálogos z Presentar mensajes cortos y concretos z Pedir acciones específicas z Realizar acciones que se hagan en poco tiempo y no cambien frecuentemente z Botones a incluir: OK, Cancelar y otros que puedan ser necesarios 23/03/2007 DAI 23 23/03/2007 Hojas e inspectores de propiedades z Ejemplo: Definir fecha y hora del sistema z Presentan el conjunto completo de propiedades para un objeto z Categorizar y agrupar páginas de propiedades en caso de ser necesario z Botones a incluir: OK, Cancelar, Aplicar, Reset y otros que puedan ser necesarios z E hojas En h j simples, i l situar it llos b botones t en lla h hoja j z En hojas con pestañas, poner los botones fuera de las pestañas z En caso de inspectores de propiedades: – Reflejar cambios dinámicos y mostrar las propiedades más comunes o más accedidas 23/03/2007 DAI Message Boxes z Se usan para mostrar un mensaje sobre una situación o condición particular z Botones a incluir: OK, Cancel, Ayuda, Sí/no, Parar, botones que corrijan la acción que provocó la aparición del mensaje z Permitir que desde la barra de título se pueda cerrar si el mensaje incluye botón de cerrar z Activar por defecto la opción más frecuente o menos destructiva 23/03/2007 DAI 24 23/03/2007 Otros z Ventanas de paleta – – z Para presentar conjuntos de controles De tamaño ajustable Ventanas pop-up – – – Mostrar información adicional cuando la forma normal muestra la información abreviada Etiquetas textuales para controles gráficos Información de ayuda contextual 23/03/2007 DAI Gestión de ventanas: Interfaz mono documentos z z Ventana primaria con conjunto de secundarias Uso – – – – z V t j Ventajas – – z Cuando objeto y ventana tienen relación 1:1 Cuando se presente el objeto como unidad Para facilitar vistas alternativas con un control que permita el cambio de vista Para permitir vistas simultáneas al dividir en varios paneles Uso común y enfoque centrado de datos Manipulación de ventanas fácil y poco confusa Inconveniente: Se muestra o edita la info en ventanas separadas 23/03/2007 DAI 25 23/03/2007 Interfaz multidocumento (MDI) (I) z Técnica para gestionar un conjunto de ventanas que contienen documentos z Elementos: Ventana padre primaria y secundarias hijas z Uso – – – – Presentar múltiples p ocurrencias de un objeto j Comparar datos entre ventanas Presentar varias partes de una aplicación Ideal para ver tipos de objetos homogéneos y para segregar objetos y las ventanas usadas en una tarea 23/03/2007 DAI Interfaz multidocumento (II) z Ventajas – – – z Las ventanas hijas tienen los mismos componentes que la padre Útil para gestionar un conjunto de objetos Facilita agrupaciones y centrarse en un conjunto de actividades Desventajas – – – – – Refuerza el foco primario de una aplicación Las ventanas secundarias pueden ocultar contenido y oscurecer la relación entre ventanas No se puede mantener siempre el contexto Relación abstracta entre archivos y ventanas Restringir las ventanas hijas a las padres puede no ser adecuado 23/03/2007 DAI 26 23/03/2007 Workbooks z Descripción – – – – z Uso – – – z Gestionar un conjunto de vistas de un objeto Rápida navegación de vistas múltiples Ordenar contenido de las secciones Ventajas – – z Consiste en un conjunto de vistas organizadas como cuaderno con pestañas Se presentan las vistas de objetos como secciones en la ventana primaria Cada sección representa una vista de los datos Las pestañas pueden servir para navegar entre secciones Combina la simplicidad del interfaz monoventana y la de no tener ventanas hijas Preserva algunas capacidades de gestión de MDI Inconvenientes – No hay simultaneidad de vistas 23/03/2007 DAI Proyectos z Descripción – – – z Uso – – z Gestión de objetos que no tienen por qué ser mostrados Cuando no se deba restringir ventanas hijas V Ventajas j – – z Consiste en un contenedor que tiene un conjunto de objetos, que se pueden abrir en ventanas primarias Cada ventana con su propio menú y elementos de interfaz “Hijos” no contenidos pero al cerrar el proyecto se cierran todos y al abrir se reabre el estado Preserva capacidades de gestión del MDI Gran flexibilidad en cuanto a colocación y disposición de ventanas Inconvenientes – Aumento de complejidad por la dificultad de diferenciar la ventana primaria del resto de ventanas del proyecto 23/03/2007 DAI 27 23/03/2007 Contenedores de alto nivel z JApplet – Hereda de Applet – init, start, stop – BorderLayout por defecto z JFrame – Ventana en la que se ejecutan las aplicaciones gráficas en Java. – Heredamos de Jframe – Contenedor primario; uso de Jpanel – BorderLayout por defecto z JDialog – Más limitados que un Jframe – Ventana con propietarioDependientes de un Jframe – Ejecución modal 23/03/2007 DAI Contenedores de propósito general 23/03/2007 DAI 28 23/03/2007 Contenedores de propósito general z JPanel – – Superficie sobre la que organizar los elementos Muy flexible, acepta cualquier tipo de componente (incluso otros paneles, cada uno con su layout) 23/03/2007 DAI Barras de scroll z Acceso a información que no cabe en la superficie de visualización z Ventajas – z Inconvenientes – – z Permite ver datos de tamaño ilimitado Consume espacio Engorroso Uso adecuado – – No usar para establecer valores de propiedades Cuando se deba visualizar información “invisible” 23/03/2007 DAI 29 23/03/2007 Barras de scroll: Pautas de diseño z z z z z z Uso de área o contenedor de scroll para indicar su existencia Uso de slider para indicar la posición y cantidad de información se ha visto Uso de flechas direcciones para indicar la dirección posible de scroll Posición del scroll Indicar estado actual Incluir en todas las ventanas redimensionables 23/03/2007 DAI JScrollPane z z z z z Hacer scroll de un componente Espacio en pantalla limitado o tamaño de campo dinámico Uso de JViewport para gestionar la parte visible Uso de ScrollBars JScrollPane(Component, int, int) Î política SB vertical y horizontal 23/03/2007 DAI 30 23/03/2007 JSplitPane z z z z z Dos componentes con tamaño personalizable Los componentes se suelen meter en un JScrollPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, pictureScrollPane); setLeftComponent ,setRightComponent, setTopComponent , setBottomComponent setResizeWeight tR i W i ht (0..1): (0 1) F Forma d de redimensionamiento di i i t – – 1.0: La parte de abajo o derecha permanece igual y arriba/izqda puede cambiar 0.5: ambos por igual 23/03/2007 DAI Botones Toolbar (I) z Uso – – – z Estructura – – – z Acceso rápido y sencillo a opciones frecuentes en múltiples pantallas Invocar una subaplicación Reemplazar menú Botones del mismo tamaño I á Imágenes: centrada t d Texto: etiqueta significativa Organización – – De izqda a dcha: botones más usados a la izqda De arriba abajo: botones más usados arriba 23/03/2007 DAI 31 23/03/2007 Botones Toolbar (II) z Posición – – – z Bajo la barra de menú Cambiable por usuario (Des)activable por usuario Items activos – Deshabilitar los no aplicables z Personalización de contenidos z Activación – Como botones de comando 23/03/2007 DAI JToolBar z Contenedor de botones (o no botones) por filas o columnas z JToolBar toolBar = new JToolBar("Still draggable"); button = makeNavigationButton("Back24", PREVIOUS, "Back to previous something-or-other", "Previous"); toolBar.add(button); setPreferredSize(new Dimension(450, Dimension(450 130)); add(toolBar, BorderLayout.PAGE_START); z z z z z z z SetFloatable: ¿movible? SetRollover: ¿bordes? addSeparator: separación entre botones 23/03/2007 DAI 32 23/03/2007 Pestañas z Presenta la información que se puede ordenar lógicamente en páginas o secciones en la misma ventana z Ventajas – – – Distinción visual Similitud con versión papel Organizar de manera efectiva información repetitiva relacionada z Inconvenientes: Complejidad visual z Uso adecuado – – – – Presentar información relacionada de forma estructurada Presentar opciones que se pueden aplicar a un objeto Cuando varía el orden de uso de información Cuando el título de la pestaña pueda describir perfectamente sus contenidos 23/03/2007 DAI Pestañas z Secciones o páginas – – – Información relacionada en sección Orden significativo Tamaño similar z Leyendas de tamaño similar, sustantivos, equivalentes de teclado z Botones de comando – En función de si afectan a una sólo pestaña o a varias 23/03/2007 DAI 33 23/03/2007 JTabbedPane z z z z z z z z z Paneles compartiendo espacio Efecto similar al CardLayout setTabPlacement (por defecto top) JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.addTab("Tab 1", icon, panel1, "Does nothing"); tabbedPane setMnemonicAt(0 KeyEvent tabbedPane.setMnemonicAt(0, KeyEvent.VK_1); VK 1); setComponentAt (int,Comp) setSelectedIndex(int) indexOfComponent(Comp) 23/03/2007 DAI Contenedores de propósito especial 23/03/2007 DAI 34 23/03/2007 JInternalFrame z z z z z z z Ventanas internas, requieren un contenedor Contenidas habitualmente en JDesktopPane No generan eventos de ventanas Más posibilidades de control al ser totalmente independientes de la plataforma Importante definir tamaño, posición Se añaden los componentes a su ContentPane Invisibles por defecto 23/03/2007 DAI JRootPane z Se obtiene a partir de JApplet, JDialog, JFrame, JInternalFrame, and JWindow z Glass Pane: Oculto por defecto. Al hacerlo visible, grado de transparencia. Útil para capturar eventos o pintar en una zona donde ya hay un componente z Layered Pane: Para posicionar los contenidos – Content Pane: contenedor de objetos – Barra de opciones: opcional; menú 23/03/2007 DAI 35 23/03/2007 Controles básicos 23/03/2007 DAI Botones z Propósito z Uso adecuado : Acciones específicas frecuentes en una ventana – – – – z Que algo ocurra inmediatamente Mostrar una ventana o menú Dar valor a una propiedad Ventajas – – – – – – z Iniciar acciones, cambiar propiedades, mostrar pop-up Siempre visibles y fáciles de organizar adecuadamente Describen acciones de manera significativa Pueden estar dotados de g grandes áreas de selección Aspecto 3D Equivalentes de teclado Más rápido que acceder al menú Inconvenientes – – Consume espacio y limitación de cantidad a poner Requiere mover el puntero para seleccionar y mirar fuera del área de trabajo 23/03/2007 DAI 36 23/03/2007 Botones de comando (I) z Uso – – z Etiquetas – – – – z En ventanas con barra de menú: Acceso rápido a comandos críticos o frecuentes Sin barra: Acceso a todos los comandos Descripciones significativas monopalabra (idealmente) Primera letra de cada palabra en may F Fuentes t regulares l y del d l mismo i ttamaño ñ siempre i No numerar, centrada y consistencia Dimensiones – – Consistencia, tan grande como sea posible No más de 6 botones por ventana 23/03/2007 DAI Botones de comando (II) z Posición – – – – – – – Consistencia entre ventanas No colocarlos en “el hueco que queda” Para salir del diálogo: centrado y alineado horizontalmente abajo Para expandir invocar propiedad del diálogo: centrados y alineados verticalmente en la parte derecha Si está relacionado con un control: junto al control Si tiene relación con un grupo de controles: debajo o a la derecha del grupo Si por cuestiones c estiones de espacio se ponen cerca botones para salir y e expandir pandir propiedades z z – Si es abajo: salir a la derecha Si es a la derecha: salir abajo Espaciado adecuado y consistente entre botones adyacentes y los controles de pantallas 23/03/2007 DAI 37 23/03/2007 Botones de comando (III) z Activación por defecto – – – – – z Botón de confirmación Aplicar la actividad a realizar Acción positiva que no tenga resultados catastróficos Si es una acción destructiva, poner por defecto cancelar Usar tecla enter para activar botón por defecto Activación: – – Cuando el puntero se ponga sobre el botón, indicar de alguna forma visual que el botón está disponible para ser seleccionado Mostrar el botón de forma distintiva cuando se activa 23/03/2007 DAI Radio Buttons z Para escoger entre un conjunto de opciones mutuamente excluyentes z Ventajas – z Desventajas – – z Rapidez en acceso y comparación Consumo de espacio Opciones limitadas Uso apropiado – – – – – Para establecer valores, atributos y propiedades Opciones mutuamente excluyentes Cuando hay espacio Datos y opciones discretos, difíciles de recordar, que no cambian, comprensión más simple todas juntas No usar para comandos o para situar en estado activo/inactivo 23/03/2007 DAI 38 23/03/2007 Radio Buttons z Descripción de opciones – – – – Texto significativo monolínea, estilo frase A la derecha del botón separados 1 espacio Incluir opción “ninguna” si es de interés Desactivar las que no puedan aplicarse circunstancialmente z Tamaño: 2-8 opciones z Valores por defecto – – Poner uno por defecto En caso de que sea complicado (ej: hombre/mujer) poner un valor indeterminado por defecto 23/03/2007 DAI Radio Buttons z Estructura – – – z Organización – z Columnas con botones y etiquetas alineados a la izquierda En filas si no hay espacio vertical Borde para enfatizar la relación entre ellos Ordenar por frecuencia de uso o importancia (izqda->dcha; (izqda >dcha; arriba->abajo) Control asociado al radio button – Poner el control a la derecha y con “>” entre ambos si el radio button ejerce como etiqueta del control 23/03/2007 DAI 39 23/03/2007 Radio Buttons z Uso de equivalentes de teclado z Selección e indicación – Selección z z – Área lo más g grande p posible Mostrar visualmente la posición del cursor sobre la opción Activación z Distinguir la opción activada 23/03/2007 DAI Check Boxes z Activar una o varias opciones z Ventajas – z Desventajas – – – z Rapidez en acceso y comparación Consumo de espacio Número de opciones limitado Dificultad de alinear con otros controles Uso apropiado – – – – – – Para establecer valores, atributos y propiedades Opciones no excluyentes Cuando hay espacio Datos y opciones discretos, difíciles de recordar, que no cambian, comprensión más simple todas juntas Pueden tener efecto sobre otros controles Usar cuando los estados son claramente opuestos 23/03/2007 DAI 40 23/03/2007 Check Boxes z Descripción de opciones – – Monolínea, significativas, a la derecha de la casilla de selección Desactivar la no aplicable z Tamaño:1-8 opciones z Valores p por defecto – Activar el estado que marca el valor por defecto del control z Organización en base a frecuencia, uso, importancia z Controles relacionados: como radio button 23/03/2007 DAI Check Boxes z Etiquetas – – Para cada grupo de opciones, sin abreviar, situar encima o a la izqda del grupo Justificado con borde o primera opción si no hay borde z Equivalentes de teclado: como radio button z Selección e indicación: como radio button z No usar “(de)seleccionar todo” como check box z Estados: seleccionado, no seleccionado, intermedio 23/03/2007 DAI 41 23/03/2007 Group Box z Uso – – – z Relacionar visualmente en un control una serie de elementos Agrupar radio buttons, checkboxes Agrupar más de 1 control relacionado funcionalmente Pautas – – Sustantivación (1-2 palabras) como etiqueta o encabezado Sin : y con primera letra de cada palabra importante en May 23/03/2007 DAI Botones z z z z z z z JButton: Botón JCheckBox: Botón con casilla de activación JRadioButton: Botón con casilla de selección JMenuItem:Ítem de menú JCheckBoxMenuItem: Ítem de menú con activación JRadioButtonMenuItem: Ítem de menú con selección JToogleButton: Check y radio a la vez 23/03/2007 DAI 42 23/03/2007 Combo Box z Asignar el valor a un campo de texto mediante teclado o seleccíón z Ventajas – – – – z Inconvenientes – – – – z Consume espacio Scroll Difi lt d para recordar Dificultad d la l información i f ió del d l tipo ti d de iinformación f ió a iintroducir t d i Orden de las opciones Uso adecuado – – z Ilimitadas opciones siempre visibles Recuerda al usuario las opciones disponibles Flexibilidad Posibilidad de nuevas entradas Como List Box Cuando se requiere introducir información por teclado o cuando puede ser que la opción deseada no se encuentre en la lista Desplegables y contextuales 23/03/2007 DAI JComboBox z z z z z Elegir entre una lista de valores o introducir uno nuevo Ventaja: poco espacio en pantalla Alternativa a grupos de RadioButton setSelectedIndex/Item addItem ,insertItemAt 23/03/2007 DAI 43 23/03/2007 List Boxes z Propósito – z Ventajas – – – z Número ilimitado de opciones Recuerda las opciones disponibles Opciones siempre visibles Inconvenientes – z Mostrar colecciones de elementos mutuamente excluyentes (o no) Espacio scrolling Espacio, scrolling, cambios en lista, lista orden de la lista Uso adecuado – – – Seleccionar valores o atributos Cuando hay espacio suficiente Para datos y opciones… z z z – Cuya mejor representación sea textual No muy frecuentes, ni bien conocidos ni fáciles de recordar Cantidad variable Cuando no sea práctico usar radio buttons/checkboxes 23/03/2007 DAI List Boxes z Lista de opciones – – – – Etiquetas sin abreviar Sin límite de tamaño No más de 40 páginas de opciones (en ese caso, posibilidad de filtros o búsqueda) Se deben mostrar al menos 6-8 opciones sin scroll z z – Suficientemente ancho para mostrar la opción más larga z z Cuestiones de espacio (3 ítems) Elemento principal (más grande) Si no se puede puede, que sean distinguibles las opciones opciones, scroll horizontal horizontal, uso de … Organización – – – Orden que permita navegación sencilla Usar controles separados para cambiar el orden o filtrar ítems No mostrar opciones no válidas 23/03/2007 DAI 44 23/03/2007 List Boxes z Etiquetas – – Etiqueta arriba o a la izquierda de la lista Estilo consistente y desactivar en su caso z Selección e indicación: visualización z Activación: Requiere presionar un botón de comando 23/03/2007 DAI List Boxes z Selección única – – – z Si tiene campo de texto asociado, ponerlo arriba y las etiquetas (que puede ser única para ambos controles si se disponen muy próximos) a la izquierda del campo de texto Ambos mismo fondo Ofrecer valor por defecto Selección múltiple – – – Marcas de selección, Lista adicional de selección (Añadir, Eliminar) (De)Seleccionar todo 23/03/2007 DAI 45 23/03/2007 Listas desplegables y contextuales z Seleccionar un ítem de un conjunto mutuamente exclusivo cuando hay limitaciones de espacio z Ventajas – – – z Inconvenientes – – – z Número ilimitado de opciones Recordatorio de opciones Conserva espacio Acción extra para ver las opciones Necesidad de scroll Orden de los ítems Uso adecuado – – Similar listbox, cuando no sea práctico usarlos No usarlos si es importante ver todas las opciones juntas 23/03/2007 DAI Listas desplegables y contextuales z Botón prompt junto al campo de selección z Elementos de la lista y organizáción como listbox z Proporcionar valor por defecto z No mostrar elementos no aplicables 23/03/2007 DAI 46 23/03/2007 JList z z z z z z z Mostrar una lista de valores Ocupa más espacio que JComboBox Disposición fila, columna,multi Modelo de Selección(ListSelectionModel) – Única – Múltiple consecutiva – Múltiple int getMinSelectionIndex() ; int getMaxSelectionIndex() int[] getSelectedIndices() ; Object getSelectedValue() Object[] getSelectedValues() 23/03/2007 DAI JMenu z z z z JMenuBar, Jpopup, JMenuItem Definición de mnemónicos y teclas de acceso rápidos Separación entre opciones Ejemplo de opciones variadas – – – – – – – – z menuItem = new JMenuItem("Both text and icon", new ImageIcon("images/middle.gif")); menuItem.setMnemonic(KeyEvent.VK_B); menu.add(menuItem); rbMenuItem = new JRadioButtonMenuItem("A radio button menu item"); rbMenuItem setSelected(true); rbMenuItem.setSelected(true); rbMenuItem.setMnemonic(KeyEvent.VK_R); group.add(rbMenuItem); menu.add(rbMenuItem) Layout por defecto: BoxLayout, se puede cambiar para conseguir otras disposiciones 23/03/2007 DAI 47 23/03/2007 Slider z Para establecer una propiedad en un rango continuo, viendo la posición relativa del valor seleccionado z Ventajas – Representación espacial de la posición relativa – Distinción visual z Inconvenientes – Posible imprecisión – Consumo C d de espacio i – Más complejo que otros controles z Uso adecuado – Valorar una atributo con valores excluyentes – Rango de valores determinado en escala continua – Cuando tiene sentido el incremento en una escala para asignar los valores – Cuando la representación espacial pueda facilitar la comprensión 23/03/2007 DAI Slider z Escala – – – – – Mostrar el rango completo de valores Marcar posiciones bajas, intermedias y altas Proporcionar cuando sea posibles marcas de intervalos de escala Incrementos consistentes Permitir cambiar las unidades de medida z Cursor de posición z Botones para permitir movimientos con incremento mínimo z Etiquetas/detenciones para valores significativos z “Relleno” indicador de proporciones 23/03/2007 DAI 48 23/03/2007 JSlider z z z z z z Valores numéricos en una escala min max Alternativa: Spinner TickSpacing: avance en la escala JSlider(JSlider.VERTICAL, FPS_MIN, FPS MAX FPS_INIT); FPS_MAX, FPS INIT); getValue Combinación con JFormattedTextField para mejorar la apariencia de los números 23/03/2007 DAI Cajas de texto z Propósito – z Ventajas – z Flexible, familiar y poco espacio Desventajas – z Mostrar, editar e introducir información Uso de teclado y conocimiento de qué teclear Uso adecuado – – Para datos de ámbito no limitado, difíciles de categorizar y con longitud variables Cuando no es posible una lista de selección 23/03/2007 DAI 49 23/03/2007 ¿Multilínea? z 1 Línea – z Nombre de archivo, ruta de archivo, datos variables en un formulario, escribir un comando Multilínea – – Escribir, editar y leer pasajes de texto Usos típicos: z z Mostrar/editar ficheros Crear/leer email 23/03/2007 DAI Campos de texto estáticos z Uso adecuado – – z Mostrar una etiqueta de un control Mostrar una información determinada instruccional o descriptiva Seguir las pautas ya vistas: consistencia, etiquetas representativas,etc 23/03/2007 DAI 50 23/03/2007 JTextField z Introducción de texto. z Se dispara evento al llegar la indicador de fin de texto z setText, setEditable, selectAll z Cut, copy, paste (JTextComponent) 23/03/2007 DAI Pantallas no editables 23/03/2007 DAI 51 23/03/2007 JLabel z z z z z z Para mostrar textos e imágenes no seleccionables Alternativa no interactiva al botón ImageIcon icon = createImageIcon("images/middle.gif"); label1 = new JLabel("Image and Text", icon, JLabel.CENTER); Papel importante en accesibilidad setText, setIcon, setDisplayedMnemonic 23/03/2007 DAI Check Boxes z Activar una o varias opciones z Ventajas – z Desventajas – – – z Rapidez en acceso y comparación Consumo de espacio Número de opciones limitado Dificultad de alinear con otros controles Uso apropiado – – – – – – Para establecer valores, atributos y propiedades Opciones no excluyentes Cuando hay espacio Datos y opciones discretos, difíciles de recordar, que no cambian, comprensión más simple todas juntas Pueden tener efecto sobre otros controles Usar cuando los estados son claramente opuestos 23/03/2007 DAI 52 23/03/2007 Check Boxes z Descripción de opciones – – Monolínea, significativas, a la derecha de la casilla de selección Desactivar la no aplicable z Tamaño:1-8 opciones z Valores p por defecto – Activar el estado que marca el valor por defecto del control z Organización en base a frecuencia, uso, importancia z Controles relacionados: como radio button 23/03/2007 DAI Check Boxes z Etiquetas – – Para cada grupo de opciones, sin abreviar, situar encima o a la izqda del grupo Justificado con borde o primera opción si no hay borde z Equivalentes de teclado: como radio button z Selección e indicación: como radio button z No usar “(de)seleccionar todo” como check box z Estados: seleccionado, no seleccionado, intermedio 23/03/2007 DAI 53 23/03/2007 JProgressBar z Indica – – – z Combinación con cursor de espera – z Que se está ejecutando la tarea Cuánto puede tardar la tarea Cuánto se ha hecho ya container.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)) Alternativa: ProgressMonitor (Dialog) 23/03/2007 DAI JProgressBar Vs ProgressMonitor z z JProgressBar – Mayor control en su configuración – Se quieren mostrar en pantalla más componentes – Necesitamos más de 1 barra de progreso – Queremos reusar la barra de progreso ProgressMonitor – Queremos un diálogo para mostrar progreso – Estamos ejecutando tarea secundaria y al usuario no le interesa el progreso – Fácil forma de cancelar la tarea – Queremos mostrar un mensaje periódicamente – La tarea no lleva mucho tiempo 23/03/2007 DAI 54 23/03/2007 ToolTip z Información descriptiva sobre un control o elemento de pantalla z Ventajas – – – z Inconvenientes – – z Identificar un control Reducir el caos visual por exceso de etiquetas e información descriptiva Permite reducir el tamaño del control No es obvio, debe ser descubierto Su apariencia puede distraer Uso adecuado – – Identificar controles sin etiqueta Proporcionar información descriptiva adicional o de estado sobre un elemento de pantalla 23/03/2007 DAI ToolTip: Pautas z Mostrar tras una breve espera z En toolbars, usar una palabra como etiqueta z En otros elementos, usar una frase breve z Mostrarlos abajo-derecha respecto del puntero, completamente dentro de la pantalla – z Cajas de texto: centrarlas debajo Usarlos como suplemento al diseño 23/03/2007 DAI 55 23/03/2007 Baloon Tips z Propósito z Ventajas – – z Recuerdan información y estados útiles Inconvenientes – z Como Tool Tip Pueden dejar de ser útiles por abuso U adecuado Uso d d – – Mostrar recordatorios y notificaciones no críticas No usarlos para mostrar información crítica 23/03/2007 DAI Baloon Tips: Pautas z Generales – – – z Informar el cambio de un estado Cambiar estados que el usuario pueda no haberse dado cuenta No usarlos para sustituir ToolTips Contenido – – – Longitud máxima de 100 caracteres Título: En negrita, incluir el nombre del objeto y el estado del mismo Cuerpo: Descripción 1-2 frases; puede incluir sugerencias 23/03/2007 DAI 56 23/03/2007 JToolTip z Añadir mensajes a componentes cuando se pasa el ratón por encima z Set/getToolTipText z getToolTipTextLocation (devuelve la posición del ratón) 23/03/2007 DAI Pantallas editables 23/03/2007 DAI 57 23/03/2007 JColorChooser z Mostrar la paleta de colores z Posibilidad de seleccionar diferentes modelos de color: RGB, HSB, Muestras (ChooserPanel) z Set/getColor 23/03/2007 DAI JFileChooser z z z z z z z z Escoger archivo para cargar o guardar Filtros de archivos (setFileFilter) Vista de archivos(setFileView): iconos, nombres.. showOpen/SaveDialog getSelectedFile(s) setFileSelectionMode(archivos, directorios,ambos) setMultiSelectionMode GetCurrentDirectory, changeToParentDirectory 23/03/2007 DAI 58 23/03/2007 JTable z JTable table = new JTable(new MyTableModel()); 23/03/2007 DAI JTextArea z z z z z Campo de texto con número de filas y columnas indeterminado getRows, getColumns Append (string) Insert(string int) Insert(string, Propiedades de JTextField aplicables 23/03/2007 DAI 59 23/03/2007 Vista de árbol z Descripción – – – Tipo de List Box que muestra un conjunto de objetos Puede incluir botones para explorar Elementos que muestra: z z z z Iconos Gráficos (ej: check box) Líneas jerárquicas Uso adecuado – Mostrar una descripción de un conjunto de objetos para ilustrar su relación jerárquica 23/03/2007 DAI JTree z z z z z z z Mostrar datos jerárquicamente TreeModel como modelo de datos TreePath para rutas de selección: camino a nodo setSelectionMode(CONTIGUOUS_TREE_SELECTION, DISCONTIGUOUS_TREE_SELECTION, or SINGLE_TREE_SELECTION) getNextMatch tN tM t h setRootVisible putClientProperty: para definir el estilo 23/03/2007 DAI 60 23/03/2007 Usando HTML en componentes SWING z Uso de HTML para dar formato a textos z button = new JButton("<html><b><u>T</u>wo</b><br>lines</html>"); 23/03/2007 DAI Eligiendo controles (I) 23/03/2007 DAI 61 23/03/2007 23/03/2007 DAI 23/03/2007 DAI 62 23/03/2007 23/03/2007 DAI 63