Designui Diseño de Aplicaciones JBuilder
Designui Diseño de Aplicaciones JBuilder
Designui Diseño de Aplicaciones JBuilder
con JBuilder ®
Borland ®
®
VERSIÓN 8 JBuilder
Borland Software Corporation
100 Enterprise Way, Scotts Valley, CA 95066-3249
www.borland.com
En el archivo deploy.html ubicado en el directorio raíz del producto JBuilder encontrará una lista completa de
archivos que se pueden distribuir de acuerdo con la licencia de JBuilder y la limitación de responsabilidad.
Borland Software Corporation puede tener patentes concedidas o en tramitación sobre los temas tratados en este
documento. Diríjase al CD del producto o al cuadro de diálogo Acerca de para la lista de patentes. La modificación
de este documento no le otorga derechos sobre las licencias de estas patentes.
COPYRIGHT © 1997-2003 Borland Software Corporation. Reservados todos los derechos. Todos los nombres de
productos y marcas de Borland son marcas comerciales o registradas de Borland Software Corporation en Estados
Unidos y otros países. Las otras marcas pertenecen de sus respectivos propietarios.
Si desea más información acerca de las condiciones de contrato de terceras partes y acerca de la limitación de
responsabilidades, consulte las notas de esta versión en su CD de instalación de JBuilder.
Impreso en EE.UU.
JBE0080WW21001designui 3E2R1002
0203040506-9 8 7 6 5 4 3 2 1
PDF
Índice de materias
Capítulo 1 Desplazamiento de componentes . . . . . . . 3-6
Presentación de los nombres de clase de los
Diseño visual en JBuilder 1-1 componentes . . . . . . . . . . . . . . . . . . 3-6
Convenciones de la documentación . . . . . . . 1-3
Iconos del árbol de componentes . . . . . . . 3-6
Asistencia a los desarrolladores . . . . . . . . . 1-5
Apertura del Inspector . . . . . . . . . . . . . . . 3-6
Cómo ponerse en contacto con el servicio
Resaltado de los valores de las propiedades . 3-8
técnico de Borland . . . . . . . . . . . . . . 1-5
Conversión de las propiedades en
Recursos en línea . . . . . . . . . . . . . . . . 1-5
variables de clase. . . . . . . . . . . . . . 3-8
World Wide Web . . . . . . . . . . . . . . . . 1-6
Definición de la exposición de las
Grupos de noticias de Borland . . . . . . . . 1-6
propiedades. . . . . . . . . . . . . . . . . 3-8
Usenet, grupos de noticias . . . . . . . . . . 1-6
Definición de los valores de las
Información sobre errores . . . . . . . . . . . 1-7
propiedades . . . . . . . . . . . . . . . . . . 3-9
Requisitos para poder diseñar visualmente
Definición de propiedades compartidas 3-10
una clase. . . . . . . . . . . . . . . . . . . . . . 1-7
Definición de propiedades con la lista
Comienzo por medio de asistentes. . . . . . . . 1-8
desplegable vacía . . . . . . . . . . . . 3-10
Los JavaBeans . . . . . . . . . . . . . . . . . . . 1-8
El Inspector . . . . . . . . . . . . . . . . . 3-10
Los contenedores . . . . . . . . . . . . . . . . 1-9
Tipos de contenedores . . . . . . . . . . . 1-9
Las bibliotecas de componentes . . . . . . . 1-11
Capítulo 4
Tratamiento de sucesos 4-1
Capítulo 2 Vinculación de código de tratamiento
de sucesos . . . . . . . . . . . . . . . . . . . . . 4-2
Introducción al diseñador 2-1 Creación del manejador de sucesos
Utilización del diseñador . . . . . . . . . . . . . 2-1
por defecto . . . . . . . . . . . . . . . . . . . 4-3
La superficie de diseño . . . . . . . . . . . . 2-3
Eliminación de manejadores de sucesos . . . 4-3
La paleta de componentes . . . . . . . . . . . 2-4
Conexión de controles y sucesos . . . . . . . . . 4-3
Utilización del botón Selección de Beans. 2-5
Adaptadores de sucesos estándar . . . . . . . . . 4-5
El Inspector . . . . . . . . . . . . . . . . . . . 2-6
Adaptadores anónimos de clase interna . . . 4-5
El árbol de componentes . . . . . . . . . . . 2-6
Elección del estilo de manejador de sucesos . 4-6
Categorías de diseñadores . . . . . . . . . . . . 2-7
Ejemplos: conexión y tratamiento de sucesos . . 4-7
Diseñador de interfaces de usuario. . . . . . 2-7
Presentación de un texto cuando se pulsa
Diseñador de menús . . . . . . . . . . . . . . 2-8
un botón . . . . . . . . . . . . . . . . . . . . 4-7
Diseñador de acceso a datos . . . . . . . . . 2-8
Apertura de un cuadro de diálogo desde
Diseñador por defecto . . . . . . . . . . . . . 2-9
un elemento de menú . . . . . . . . . . . . . 4-8
Combinaciones de teclas del diseñador . . . 2-9
Capítulo 3 Capítulo 5
El árbol de componentes y el Creación de interfaces de usuario 5-1
Selección de componentes en la interfaz
Inspector 3-1 de usuario . . . . . . . . . . . . . . . . . . . . . 5-2
Utilización del árbol de componentes . . . . . . 3-1 Añadir a contenedores anidados . . . . . . . 5-2
Apertura de tipos concretos de Desplazamiento y redimensionamiento de
diseñadores . . . . . . . . . . . . . . . . . . 3-3 componentes. . . . . . . . . . . . . . . . . . . . 5-3
Adición de componentes . . . . . . . . . . . 3-3 Gestión del diseño . . . . . . . . . . . . . . . . . 5-5
Corte, copia y pegado de componentes . . . 3-4 Agrupación de componentes. . . . . . . . . . 5-5
Eliminación de componentes . . . . . . . . . 3-5 Adición de componentes de aplicación y
Utilización de Deshacer y Volver a hacer . . 3-5 generación . . . . . . . . . . . . . . . . . . . 5-6
Cambiar el nombre de un componente . . . 3-5
i
Menús . . . . . . . . . . . . . . . . . . . . 5-6 La serialización . . . . . . . . . . . . . . . . . . . 7-7
Cuadros de diálogo . . . . . . . . . . . . . 5-7 Serialización de componentes en JBuilder . . 7-7
Componentes . . . . . . . . . . . . . . . . 5-9 Serialización de un objeto this . . . . . . . . . 7-8
Aspecto . . . . . . . . . . . . . . . . . . . . . . . 5-10 Utilización de personalizadores en el
Aspecto durante la ejecución . . . . . . . 5-10 diseñador. . . . . . . . . . . . . . . . . . . . . 7-10
Aspecto en la fase de diseño . . . . . . . . 5-12 Modificación de beans mediante
Comprobación de la interfaz de usuario personalizadores. . . . . . . . . . . . . . . 7-10
durante la ejecución . . . . . . . . . . . . . 5-13 Gestión de cadenas de conjunto de recursos. . 7-11
Capítulo 6 Capítulo 8
Diseño de menús 6-1 Gestores de diseño 8-1
Apertura del diseñador de menús . . . . . . . . 6-1 Acerca de los gestores de diseño . . . . . . . . . 8-1
Terminología de menús . . . . . . . . . . . . . . 6-2 Diseños null y XYLayout . . . . . . . . . . . . 8-2
Herramientas de diseño de menús. . . . . . . . 6-3 Conceptos básicos acerca de las propiedades
Creación de menús . . . . . . . . . . . . . . . . 6-4 de los diseños . . . . . . . . . . . . . . . . . 8-3
Adición de elementos de menú . . . . . . . . 6-5 Conceptos básicos acerca de las restricciones
Inserción y eliminación de menús de los diseños . . . . . . . . . . . . . . . . . 8-4
y elementos de menú. . . . . . . . . . . . . 6-5 Ejemplos de propiedades y restricciones de
Inserción de separadores . . . . . . . . . . . 6-6 los diseños . . . . . . . . . . . . . . . . . . . 8-4
Definición de teclas aceleradoras . . . . . . . 6-6 Selección de un nuevo diseño para un
Desactivación (atenuación) de elementos contenedor . . . . . . . . . . . . . . . . . . . . . 8-5
de menú . . . . . . . . . . . . . . . . . . . . 6-6 Modificación de las propiedades de los
Para desactivar un elemento de menú diseños . . . . . . . . . . . . . . . . . . . . . 8-5
Swing . . . . . . . . . . . . . . . . . . . . 6-7 Modificación de restricciones de diseños de
Creación de elementos de menú que componentes . . . . . . . . . . . . . . . . . . 8-6
utilicen marcas de selección . . . . . . . . . 6-7 Conceptos básicos acerca de las propiedades de
Creación de elementos de menú con tamaño . . . . . . . . . . . . . . . . . . . . . . . 8-6
botones de radio Swing . . . . . . . . . . . 6-7 Tamaño y ubicación de la ventana de la
Traslado de elementos de menú . . . . . . . . . 6-8 interfaz de usuario durante la ejecución . . . . 8-7
Creación de submenús . . . . . . . . . . . . . . 6-9 Dimensionamiento automático de una
Traslado de un menú a un submenú . . . . . 6-10 ventana con pack(). . . . . . . . . . . . . . . 8-8
Vinculación de sucesos de menú al código . . . 6-10 Cálculo de preferredSize para los
Ejemplo: Apertura de un cuadro de contenedores . . . . . . . . . . . . . . . . . . 8-9
diálogo desde un elemento de menú . . . . 6-11 Diseños portables . . . . . . . . . . . . . . 8-9
Creación de menús emergentes . . . . . . . . . 6-12 XYLayout . . . . . . . . . . . . . . . . . . . 8-9
Definición explícita del tamaño del
Capítulo 7 contenedor de la interfaz de usuario
Temas avanzados 7-1 utilizando setSize() . . . . . . . . . . . . . . 8-9
Gestión de la paleta de componentes . . . . . . 7-1 Preparación del tamaño de la interfaz de
Cómo añadir un componente a la paleta usuario para que pueda portarse a varias
de componentes. . . . . . . . . . . . . . . . 7-2 plataformas. . . . . . . . . . . . . . . . . . 8-10
Selección de una imagen para un botón de Colocación de una ventana en la pantalla . 8-10
la paleta de componentes . . . . . . . . . . 7-4 Inclusión en el código de las llamadas a
Cómo añadir un componente a la paleta de métodos de tamaño y posicionamiento . . 8-11
componentes . . . . . . . . . . . . . . . . . 7-6 Adición de gestores de diseño personalizados 8-12
Eliminación de una ficha o un componente Diseños suministrados con JBuilder . . . . . . 8-13
de la paleta de componentes . . . . . . . . 7-6 XYLayout . . . . . . . . . . . . . . . . . . . . . 8-14
Reorganización de la paleta de Alineación de componentes en XYLayout . 8-15
componentes . . . . . . . . . . . . . . . . . 7-7 Opciones de alineación para XYLayout. . . 8-15
ii
null . . . . . . . . . . . . . . . . . . . . . . . . 8-16 gridwidth, gridheight . . . . . . . . . . . . . 8-38
BorderLayout. . . . . . . . . . . . . . . . . . . . 8-16 Especificación de las restricciones
Definición de restricciones . . . . . . . . . . 8-17 gridwidth y gridheight en el
FlowLayout . . . . . . . . . . . . . . . . . . . . . 8-19 diseñador . . . . . . . . . . . . . . . . . 8-38
Alineación . . . . . . . . . . . . . . . . . . . . 8-19 gridx, gridy. . . . . . . . . . . . . . . . . . . 8-39
Espacio . . . . . . . . . . . . . . . . . . . . 8-20 Especificación de celdas en el
Orden de los componentes . . . . . . . . 8-20 diseñador . . . . . . . . . . . . . . . . . 8-39
VerticalFlowLayout . . . . . . . . . . . . . . 8-20 encuadres. . . . . . . . . . . . . . . . . . . . 8-40
Alineación . . . . . . . . . . . . . . . . . . 8-21 Especificación de valores de encuadre
Espacio . . . . . . . . . . . . . . . . . . . . 8-21 en el diseñador . . . . . . . . . . . . . . 8-40
Relleno horizontal . . . . . . . . . . . . . 8-21 ipadx, ipady . . . . . . . . . . . . . . . . . . 8-41
Relleno vertical . . . . . . . . . . . . . . . 8-22 Definición de las restricciones de
Orden de los componentes . . . . . . . . 8-22 tamaño adicional en el diseñador . . . 8-42
BoxLayout2 . . . . . . . . . . . . . . . . . . . 8-22 weightx, weighty . . . . . . . . . . . . . . . 8-43
GridLayout . . . . . . . . . . . . . . . . . . . . . 8-23 Establecimiento de las restricciones
Columnas y filas . . . . . . . . . . . . . . . . 8-23 weightx y weighty en el diseñador. . . 8-43
Espacio . . . . . . . . . . . . . . . . . . . . . 8-23 Ejemplos de cómo las restricciones de
CardLayout . . . . . . . . . . . . . . . . . . . . . 8-24 peso afectan al comportamiento de
Creación de un contenedor CardLayout. . . 8-24 los componentes . . . . . . . . . . . . . 8-44
Creación de los controles . . . . . . . . . . . 8-25 Código fuente de ejemplo de
Especificar el espacio. . . . . . . . . . . . . . 8-26 GridBagLayout. . . . . . . . . . . . . . . . 8-47
OverlayLayout2 . . . . . . . . . . . . . . . . 8-26 PaneLayout . . . . . . . . . . . . . . . . . . . . 8-50
GridBagLayout . . . . . . . . . . . . . . . . . . . 8-27 Variables PaneConstraint. . . . . . . . . . . 8-50
Área de visualización . . . . . . . . . . . . . 8-27 Cómo se añaden los componentes a
Acerca de GridBagConstraints . . . . . . . . 8-29 PaneLayout. . . . . . . . . . . . . . . . . . 8-51
Configuración manual de Creación de un contenedor PaneLayout
GridBagConstraints en el código en el diseñador . . . . . . . . . . . . . . . . 8-51
fuente . . . . . . . . . . . . . . . . . . . . 8-30 Modificación de la ubicación y del tamaño
Modificación del código de GridBagLayout del componente en el Inspector . . . . . . 8-53
para que funcione en el diseñador . . . . . 8-31 Creación de un prototipo de la interfaz de
Diseño visual de GridBagLayout en el usuario . . . . . . . . . . . . . . . . . . . . . . 8-54
diseñador . . . . . . . . . . . . . . . . . . . 8-31 Los diseños XYLayout y null en la creación
Conversión a GridBagLayout . . . . . . . . . 8-32 de prototipos . . . . . . . . . . . . . . . . . 8-54
Incorporación de componentes a un Diseño de las zonas de mayor tamaño en
contenedor GridBagLayout . . . . . . . . . 8-33 primer lugar . . . . . . . . . . . . . . . . . 8-54
Configuración de GridBagConstraints en el Guardar el trabajo antes de realizar
Editor de GridBagConstraints. . . . . . . . 8-34 experimentos . . . . . . . . . . . . . . . . . 8-55
Visualización de la rejilla . . . . . . . . . 8-35 Paneles y diseños anidados . . . . . . . . . . . 8-55
Utilización del ratón para cambiar
restricciones . . . . . . . . . . . . . . . . 8-35 Capítulo 9
Uso del menú contextual de Tutorial: Creación de un editor
GridBagLayout . . . . . . . . . . . . . . 8-35
GridBagConstraints . . . . . . . . . . . . 8-36
de texto en Java 9-1
Aspectos tratados en este tutorial . . . . . . . . . 9-2
ancla . . . . . . . . . . . . . . . . . . . . . . . 8-36
Código de ejemplo de este tutorial . . . . . . 9-3
Definición de la restricción de ancla
Paso 1: Configuración . . . . . . . . . . . . . . . 9-3
en el diseñador . . . . . . . . . . . . . . 8-37
Creación de un proyecto . . . . . . . . . . . . 9-4
expansión . . . . . . . . . . . . . . . . . . . . 8-37
Selección de las opciones de estilo de código
Especificación de la restricción expansión
del proyecto . . . . . . . . . . . . . . . . . . 9-5
en el diseñador . . . . . . . . . . . . . . 8-37
Utilización del Asistente para aplicaciones. . 9-6
iii
Supresión de la ocultación automática de Capítulo 10
JFrame . . . . . . . . . . . . . . . . . . . . . 9-8
Configuración del aspecto. . . . . . . . . . . 9-9
Tutorial: Creación de una interfaz
Paso 2: Cómo añadir un área de texto . . . . . . 9-10 de usuario con diseños anidados 10-1
Paso 3: Creación de menús . . . . . . . . . . . . 9-14 Paso 1: Creación del proyecto de interfaz de
Paso 4: Cómo añadir un cuadro de diálogo usuario . . . . . . . . . . . . . . . . . . . . . . 10-3
Selector de fuentes . . . . . . . . . . . . . . . . 9-16 Utilización del Asistente para proyectos . . 10-3
Definición del marco del cuadro de diálogo Paso 2: Generación de los archivos fuente
y las propiedades del título . . . . . . . . . 9-17 de la aplicación . . . . . . . . . . . . . . . . . 10-4
Creación de un suceso para lanzar el Selector Utilización del Asistente para
de fuente. . . . . . . . . . . . . . . . . . . . 9-17 aplicaciones . . . . . . . . . . . . . . . . . 10-4
Paso 5: Vinculación de sucesos de elemento de Paso 3: Modificación del diseño del panel
menú a Selector de fuentes . . . . . . . . . . . 9-19 de contenido . . . . . . . . . . . . . . . . . . . 10-7
Paso 6: Vinculación de sucesos de elementos Paso 4: Cómo añadir los paneles principales . 10-9
de menú a JColorChooser . . . . . . . . . . . . 9-21 Paso 5: Creación de barras de herramientas . 10-12
Paso 7: Adición de un manejador a un suceso Paso 6: Cómo añadir botones a las barras de
de menú para borrar el área de texto . . . . . 9-23 herramientas . . . . . . . . . . . . . . . . . . 10-13
Paso 8: Cómo añadir un cuadro de diálogo Paso 7: Cómo añadir componentes al panel
selector de archivos . . . . . . . . . . . . . . . 9-24 central . . . . . . . . . . . . . . . . . . . . . 10-16
Internacionalización de componentes Paso 8: Creación de una barra de estado . . . 10-17
Swing . . . . . . . . . . . . . . . . . . . . . 9-24 Paso 9: Conversión a diseños portables . . . 10-19
Paso 9: Cómo añadir código para leer texto Paso 10: Finalización del diseño . . . . . . . . 10-21
de un archivo . . . . . . . . . . . . . . . . . . . 9-25
Paso 10: Adición de código a los elementos de Capítulo 11
menú para guardar un archivo . . . . . . . . . 9-27 Tutorial de GridBagLayout 11-1
Paso 11: Cómo añadir código para comprobar Introducción . . . . . . . . . . . . . . . . . . . . 11-1
si se ha modificado un archivo . . . . . . . . . 9-30 Primera parte: Acerca de GridBagLayout . . . 11-2
Paso 12: Activación de los botones de la barra Descripción general de GridBagLayout. . . 11-2
de herramientas . . . . . . . . . . . . . . . . . 9-33 Definición de GridBagLayout . . . . . . . . 11-3
Definición del texto de la ayuda inmediata Área de visualización de los componentes . 11-4
del botón. . . . . . . . . . . . . . . . . . . . 9-33 Definición de GridBagConstraints. . . . . . 11-6
Creación de los sucesos de botón . . . . . . . 9-33 Dificultades de GridBagLayout . . . . . . . 11-7
Creación de un método fileOpen() . . . . . . 9-34 Ventajas de GridBagLayout . . . . . . . . . 11-8
Creación de un método helpAbout() . . . . . 9-35 Simplificación de GridBagLayout . . . . . . 11-8
Paso 13: Asociación del tratamiento de sucesos con Empiece por hacer un boceto en papel . 11-9
el área de texto . . . . . . . . . . . . . . . . . . 9-36 Utilice paneles y diseños anidados . . 11-11
Paso 14: Cómo añadir un menú contextual Utilización del diseñador visual
al área de texto . . . . . . . . . . . . . . . . . . 9-38 de JBuilder . . . . . . . . . . . . . . . 11-13
Paso 15: Visualización del nombre y del Creación de una interfaz de prototipo
estado del archivo en el título de la ventana . 9-39 en XYLayout . . . . . . . . . . . . . . 11-15
Paso 16: Distribución de la aplicación Segunda parte: Creación de diseños
Editor de texto a un archivo JAR . . . . . . . . 9-43 GridBagLayout en JBuilder . . . . . . . . . 11-17
Aspectos generales . . . . . . . . . . . . . . . 9-43 Acerca del diseño . . . . . . . . . . . . . . 11-17
Ejecución del Creador de recopilatorios . . . 9-44 Paso 1: Diseño de la estructura . . . . . . 11-18
Ejecución de la aplicación publicada Paso 2: Creación de un proyecto para
desde la línea de comandos . . . . . . . . . 9-50 este tutorial . . . . . . . . . . . . . . . . . 11-23
Modificación del archivo JAR y nueva Paso 3: Cómo añadir los componentes al
prueba de la aplicación . . . . . . . . . . . 9-51 contenedor . . . . . . . . . . . . . . . . . 11-23
iv
Cómo añadir el panel principal al marco Sugerencias diversas . . . . . . . . . . . . 11-62
de interfaz . . . . . . . . . . . . . . . . 11-24 Vuelva a XYLayout si debe hacer
Creación del panel izquierdo y adición ajustes significativos . . . . . . . . . . 11-62
de sus componentes . . . . . . . . . . 11-25 Elimine los pesos y expansiones antes
Creación del panel derecho y adición de efectuar los ajustes . . . . . . . . . 11-62
de sus componentes . . . . . . . . . . 11-28 Diseño visual del código GridBagLayout
Creación del panel inferior y añada sus ya escrito . . . . . . . . . . . . . . . . . . 11-62
componentes. . . . . . . . . . . . . . . 11-28 Diferencias en el código . . . . . . . . . 11-62
Paso 4: Conversión del panel exterior en Modificación del código para que
GridBagLayout . . . . . . . . . . . . . . . 11-29 funcione en el diseñador . . . . . . . 11-63
Paso 5: Conversión de los paneles Código generado por JBuilder en la
exteriores en GridBagLayout . . . . . . . 11-30 segunda parte . . . . . . . . . . . . . 11-63
Paso 6: Conversión del panel inferior en Otros recursos sobre GridBagLayout . 11-65
GridLayout . . . . . . . . . . . . . . . . . 11-31 GridBagConstraints. . . . . . . . . . . . . . . 11-66
Paso 7: Ajustes finales . . . . . . . . . . . . 11-31 Ancla . . . . . . . . . . . . . . . . . . . . . 11-66
Panel GridLayout . . . . . . . . . . . . . 11-32 Expansión . . . . . . . . . . . . . . . . . . 11-66
Paneles superiores . . . . . . . . . . . . 11-36 Encuadres . . . . . . . . . . . . . . . . . . 11-67
Conclusión . . . . . . . . . . . . . . . . . . 11-41 gridwidth, gridheight . . . . . . . . . . . . 11-67
Tercera parte: Sugerencias y técnicas . . . . . 11-42 ipadx, ipady . . . . . . . . . . . . . . . . . 11-68
Definición de restricciones individuales gridx, gridy. . . . . . . . . . . . . . . . . . 11-69
en el diseñador . . . . . . . . . . . . . . . 11-42 weightx, weighty . . . . . . . . . . . . . . 11-70
Ancla . . . . . . . . . . . . . . . . . . . . 11-42 Ejemplos de restricciones de Peso. . . . . . . 11-70
Expansión . . . . . . . . . . . . . . . . . 11-43
Encuadres . . . . . . . . . . . . . . . . . 11-43 Apéndice A
gridwidth, gridheight . . . . . . . . . . 11-45 Migración de archivos desde otros
ipadx, ipady . . . . . . . . . . . . . . . . 11-45
gridx, gridy . . . . . . . . . . . . . . . . 11-47
IDE Java A-1
VisualAge . . . . . . . . . . . . . . . . . . . . . A-1
weightx, weighty . . . . . . . . . . . . . 11-48
Forte . . . . . . . . . . . . . . . . . . . . . . . . A-2
Comportamiento de las restricciones
VisualCafé . . . . . . . . . . . . . . . . . . . . . A-2
de Peso . . . . . . . . . . . . . . . . . . 11-48
Modificación de restricciones mediante
el ratón . . . . . . . . . . . . . . . . . . . . 11-51
Índice I-1
Arrastrar componentes a celdas vacías . 11-52
Arrastre de componentes a celdas
ocupadas . . . . . . . . . . . . . . . . . 11-54
Arrastre de componentes grandes
a celdas pequeñas . . . . . . . . . . . . 11-56
Arrastre de los tiradores de
redimensionamiento negros a una
celda adyacente vacía. . . . . . . . . . 11-57
Adición de componentes . . . . . . . . . . 11-60
v
Tutoriales
Creación de una interfaz de usuario con Tutorial de GridBagLayout . . . . . . . . . . . 11-1
diseños anidados . . . . . . . . . . . . . . . . . 10-1
vi
Capítulo
Consulte
• “El Visualizador de aplicaciones” en Introducción a JBuilder si desea
repasar el diseño y la terminología del Visualizador de aplicaciones.
Creación de aplicaciones con JBuilder contiene los siguientes capítulos:
• Capítulo 2, “Introducción al diseñador”
Proporciona una descripción general de las herramientas de diseño
visual de JBuilder. Nombra las diferentes partes del diseñador, describe
lo que cada una de ellas realiza y cómo se relaciona con las otras.
Explica los diferentes tipos de diseñadores, como el diseñador de
interfaces de usuario y el de menús.
• Capítulo 3, “El árbol de componentes y el Inspector”
Explica cómo utilizar el árbol de componentes y el Inspector. Describe
cómo trabajan juntos para manejar los componentes de edición.
• Capítulo 4, “Tratamiento de sucesos”
Describe cómo añadir y eliminar manejadores de los sucesos de
componentes mediante el Inspector. Contiene ejemplos concretos
acerca de cómo codificar los manejadores de los sucesos más comunes
de los componentes de cuadros de diálogo de JBuilder.
Convenciones de la documentación
En la documentación de Borland para JBuilder, el texto con significado
especial se identifica mediante la tipografía y los símbolos descritos en la
siguiente tabla.
Recursos en línea
También puede obtener información de los siguientes recursos en línea:
Consulte
• Capítulo 11, “Migración de archivos desde otros IDE Java”
Los JavaBeans
Los JavaBeans son clases autocontenidas que no necesitan más clases para
estar completas. Están diseñados de tal modo que se pueden personalizar
y se comunican eficazmente entre sí, de forma que pueden interactuar sin
problemas. Expliquémoslo con un ejemplo: una rueda está diseñada para
girar alrededor de un eje central, y no necesita más mecanismos para ello.
Las ruedas se pueden personalizar de forma que encajen debajo de un
coche o dentro de una polea; de esta forma, interaccionan con otros
componentes del diseño para realizar una función más amplia.
Los JavaBeans deben aceptar estas funciones:
Además, los JavaBeans deben tener una clase BeanInfo. BeanInfo describe
su componente a las herramientas de diseño con claridad y eficacia. En
primer lugar, JBuilder busca la BeanInfo y, si no la encuentra, utiliza la
introspección para detectar las pautas de diseño del bean.
Los JavaBeans describen componentes. Los componentes son los elementos
básicos que utilizan las herramientas de diseño visual de JBuilder para
construir un programa. Para generar programas se seleccionan
componentes, se personalizan y se conectan. JBuilder de Borland se
suministra con un conjunto de componentes que puede utilizar
directamente y que aparecen en la paleta de componentes. Si desea
complementarlos, puede crear otros componentes o instalar componentes
de terceros.
Examine los JavaBeans por medio de BeanInsight. Elija Herramientas|
BeanInsight y escriba el nombre de un bean compilado para examinar sus
propiedades, sucesos, personalizadores, etc.
Consulte
• La especificación JavaBeans specification, en
http://www.javasoft.com/beans/docs/spec.html.
• “Gestión de la paleta de componentes” en la página 7-1
Los contenedores
Los contenedores son componentes que contienen y gestionan otros
componentes. Los contenedores amplían java.awt.Container.
Normalmente, los contenedores aparecen como paneles, marcos y cuadros
de diálogo durante la ejecución del programa. Por lo general, las
operaciones de diseño de JBuilder se realizan en contenedores.
Tipos de contenedores
• El componente de ventana es un contenedor independiente de alto nivel
que no tiene bordes, barra de título ni barra de menús. A pesar de que
puede utilizar un componente de ventana para implementar una
ventana emergente, como la pantalla de presentación, habitualmente se
utiliza una subclase de java.awt.Window en la interfaz de usuario, como
Introducción al diseñador
Capítulo2
En el ejemplo:
• El componente jScrollPane1 está seleccionado.
Esto se sabe porque aparece resaltado en el árbol de componentes, en la
superficie de diseño se ve su tirador, y es el componente activo del
Inspector.
• El puntero se encuentra en la superficie de diseño, sobre el componente
jToolBar.
La superficie de diseño
La superficie de diseño es el cuaderno de dibujo virtual. Aquí se pueden
añadir y eliminar componentes directamente, modificar el tamaño y ver el
aspecto general del diseño mientras se realiza.
Si se selecciona un componente visible de la superficie de diseño, aparece
en el Inspector, donde se pueden modificar sus propiedades.
Si desea anidar un componente dentro de un contenedor o activar sus
tiradores, seleccione el contenedor. En la mayoría de los gestores de
diseño es posible arrastrar los tiradores con el ratón para cambiar el
tamaño o la posición de los componentes.
Para ajustar el tamaño de la superficie de diseño, arrastre el borde
izquierdo del panel de contenido. Para ocultar los paneles de la izquierda
del Visualizador de aplicaciones, elija Ver|Ocultar todo. Tenga en cuenta
que esto incluye el árbol de componentes. Para volver a mostrar los
paneles de la izquierda, elija Ver|Mostrar todo.
Todas las propiedades que se pueden modificar en la superficie de diseño
se pueden modificar también en el Inspector.
Consulte
• Capítulo 8, “Gestores de diseño”
• “Utilización del árbol de componentes” en la página 3-1
• Capítulo 4, “Tratamiento de sucesos”
Localización de componentes
En los diseños complejos puede resultar difícil saber con certeza cuál de
varios componentes posibles está seleccionado en la superficie de diseño.
La barra de estado permite salir de dudas.
A medida que mueve el cursor del ratón, el nombre del componente sobre
el que en cada momento se encuentra aparece en la barra de estado
situada en la parte inferior del Visualizador de aplicaciones. Esto resulta
Consulte
• “Selección de componentes en la interfaz de usuario” en la página 5-2 si
desea más información sobre la manipulación de componentes en la
superficie de diseño.
La paleta de componentes
La paleta de componentes proporciona un acceso rápido a todas las
bibliotecas de componentes disponibles. Seleccione la pestaña que
contenga el tipo de componente deseado. Si desea ver una etiqueta de
ayuda inmediata con el nombre de un componente, coloque el cursor
sobre su icono. La paleta de componentes se puede personalizar.
Los componentes se añaden de las siguientes formas:
• Seleccione un componente de la paleta y haga clic en la superficie de
diseño, en el lugar donde desee que aparezca la esquina superior
izquierda del componente.
Éste se coloca en la superficie de diseño, con la esquina superior
izquierda en el lugar donde se ha hecho clic. El componente aparece
también en el árbol de componentes.
• Seleccione un componente de la paleta y haga clic en la ubicación
jerárquica adecuada, en el árbol de componentes.
El componente se coloca en el árbol. Si es visible, también aparece en el
lugar adecuado de la superficie de diseño.
• Elija Edición|Añadir componente.
Se abre el cuadro de diálogo CVS Añadir: Seleccione una biblioteca,
elija un componente y pulse Aceptar.
El componente aparece en el árbol de componentes. Si es visible,
también aparece en el lugar adecuado de la superficie de diseño.
Consulte
• “Adición de componentes” en la página 3-3
• “Gestión de la paleta de componentes” en la página 7-1
Consulte
• “Adición y configuración de bibliotecas” en Creación de aplicaciones con
JBuilder.
El Inspector
El Inspector muestra las propiedades y los sucesos del componente
seleccionado, y permite modificarlos por medio de menús contextuales,
campos de texto y otros controles. Los editores personalizados se pueden
utilizar en combinación con el Inspector. Seleccione un componente en el
árbol de componentes o en la superficie de diseño. Sus propiedades y
sucesos se muestran en el Inspector.
Haga clic en la pestaña Propiedades para mostrar y modificar las
propiedades de un componente. Haga clic en la pestaña Sucesos para
mostrar y modificar los sucesos de un componente.
Para ajustar el tamaño del Inspector, arrastre su borde izquierdo.
Consulte
• “Apertura del Inspector” en la página 3-6
• “Utilización de personalizadores en el diseñador” en la página 7-10
El árbol de componentes
El árbol de componentes permite acceder a los distintos tipos de
diseñadores disponibles y proporciona una vista jerárquica de los
componentes del archivo activo. También actúa como administrador de
componentes, y permite añadir, eliminar y reorganizar los componentes
en la jerarquía de diseño.
Para seleccionar un tipo de diseñador, seleccione la carpeta
correspondiente en el árbol de componentes: Menú, Interfaz de usuario,
Acceso a datos o Por defecto. Cuando se pulsa la pestaña Diseño, el
diseñador abre automáticamente el tipo de diseñador adecuado para el
contenedor del archivo activo. Si lo desea, puede elegir otros diseñadores
para trabajar con los componentes que se encuentran en el archivo activo o
a los que se hace referencia en él.
Seleccione un componente en el árbol de componentes para ponerle el
foco en la superficie de diseño. Sus propiedades y sucesos se muestran en
el Inspector.
Consulte
• “Utilización del árbol de componentes” en la página 3-1
• “Apertura del Inspector” en la página 3-6
Categorías de diseñadores
JBuilder proporciona distintos diseñadores para cuatro amplias categorías
de JavaBeans:
• Diseñador de interfaces de usuario
• Diseñador de menús
JBuilder Enterprise • Diseñador de acceso a datos
• Diseñador por defecto
Estos diseñadores proporcionan conjuntos de funciones que facilitan el
diseño de los componentes del tipo correspondiente. Cambie de un tipo
de diseñador a otro activando los componentes que están dentro del
diseñador que desea abrir. Cambie de estas tres formas:
• Haga doble clic en uno de los componentes del tipo de diseñador que se
desea en el árbol de componentes.
• Seleccione un componente del tipo de diseñador deseado en el árbol de
componentes y pulse Intro.
• Haga clic con el botón derecho en un componente del tipo de diseñador
deseado en el árbol de componentes y seleccione Activar el diseñador.
Consulte
• Capítulo 5, “Creación de interfaces de usuario”
Diseñador de menús
Los componentes de menú se derivan de java.awt.MenuComponent. En la fase
de diseño JBuilder los presenta en la carpeta Menú del árbol de
componentes y ofrece un diseñador de menú especial.
Consulte
• Capítulo 6, “Diseño de menús”
Consulte
• “Componentes” en la página 5-9
• “Componentes DataExpress” en la Guía del desarrollador de bases de datos.
Atajos de desplazamiento
El ratón, la tecla Tab por sí sola, la combinación Ctrl + Tab y las teclas de
flecha permiten desplazarse por el diseñador. Combine estos atajos de
teclado con la tecla Mayús para cambiar el foco en orden inverso. Cuando
se pulsa Tab o Ctrl + Tab el foco se desplaza por el siguiente orden:
• Panel de proyectos
• Árbol de componentes
• Paleta de componentes
• Superficie de diseño (utilice Ctrl + Tab para moverla)
• Inspector
Atajos de acción
A continuación, se proporciona una lista de atajos de ratón y teclado que
facilitan el trabajo en el diseñador:
El árbol de componentes y
Capítulo3
el Inspector
El árbol de componentes y el Inspector permiten acceder a todos los
componentes del archivo activo, y a todas sus propiedades y sucesos. El
árbol de componentes muestra qué diseñador se está utilizando, qué
componentes hay en el archivo activo y cuál de ellos se encuentra
seleccionado. El Inspector muestra las propiedades y los sucesos del
componente seleccionado. Seleccione un componente en la superficie de
diseño o en el árbol de componentes. Sus propiedades se muestran en el
Inspector. Cambie el nombre de un componente en el árbol de
componentes o en el Inspector.
Adición de componentes
Los componentes se pueden añadir de dos formas: arrastrando y
colocando con el ratón o seleccionando por medio de los menús y el
teclado.
Consulte
• Capítulo 8, “Gestores de diseño,” para obtener más información sobre
null, XYLayout y otros gestores de diseños.
Cortar Ctrl+X
Copiar Ctrl+C
Pegar Ctrl+V
Eliminación de componentes
Para borrar un componente, selecciónelo en la superficie de diseño o en el
árbol de componentes. A continuación, seleccione Edición|Borrar, utilice
el atajo de teclado definido en su configuración de teclado o pulse
la tecla Supr.
Desplazamiento de componentes
Para desplazar un componente con el ratón, arrástrelo a su nueva
posición. Por medio del teclado:
1 Seleccione el componente que desea desplazar.
2 Córtelo. Para ello, haga clic con el botón derecho del ratón y seleccione
Cortar, o elija Edición|Cortar.
3 Seleccione el componente o carpeta que se encuentra inmediatamente
por encima del lugar en el que desea pegar el componente.
4 Pegue el nuevo componente. Para ello, haga clic con el botón derecho
del ratón y seleccione Pegar, o elija Edición|Pegar.
Icono Explicación
El archivo actual.
Consulte
• Capítulo 4, “Tratamiento de sucesos”
• “Utilización de personalizadores en el diseñador” en la página 7-10
para aprender cómo trabajan los personalizadores con el Inspector.
• Capítulo 9, “Tutorial: Creación de un editor de texto en Java” donde
puede adquirir práctica en el uso del inspector.
Consulte
• Ejemplo de “Los valores de las propiedades”.
• “Definición de la exposición de las propiedades”, más adelante.
El Inspector
La información que presenta el Inspector de JBuilder se encuentra en la
clase BeanInfo del bean o procede de la introspección del bean. Si no se ha
especificado ningún editor de propiedades para una propiedad de la clase
BeanInfo del bean (o si el bean no tiene una clase BeanInfo), el Inspector
utiliza un editor por defecto basado en el tipo de datos del valor de la
propiedad. Por ejemplo, si una propiedad toma una cadena, su editor
permite escribir una cadena.
Ejemplo
Por ejemplo, una JTable tiene una propiedad model que acepta objetos de
tipo TableModel. Si añade componente JTable al diseño, en el diseñador de
interfaces de usuario, y después pulsa la flecha de la lista desplegable en
la propiedad model en el Inspector, el valor de la lista desplegable es
<ninguno>.
Nota En algunos casos, puede que deba añadir a mano el objeto a la clase.
Tratamiento de sucesos
Capítulo4
Consulte
• “Apertura del Inspector” en la página 3-6
• “Requisitos para poder diseñar visualmente una clase” en la página 1-7
Consulte
• “Conexión de controles y sucesos” en la página 4-3
// Proporciona ActionPerformed:
public void actionPerformed(ActionEvent e) {
adaptee.jMenuFileExit_actionPerformed(e);
}
}
JBuilder también crea una línea de código en el método jbInit(). Esta línea
conecta el código fuente del componente con el método de tratamiento de
sucesos, por medio de EventAdapter. Para ello, añade un monitor. El
método de monitor toma un parámetro del adaptador EventAdapter
correspondiente.
En el ejemplo facilitado arriba, el EventAdapter se genera en el lugar. Su
parámetro de constructor es la referencia this al Marco, que contiene el
método para el tratamiento del suceso. Por ejemplo, la línea de código
siguiente es la que realiza esta operación en la aplicación Hola a todos:
jButton1.addActionListener(new Marco1_jButton1_actionAdapter(this));
El nombre de la clase de adaptador es arbitrario. Lo único que importa es
que coincida la referencia.
JBuilder crea la clase adaptador por medio de la implementación del
método que contiene la interfaz ActionListener. El método que trata el
suceso seleccionado realiza una llamada a otro método del componente
adaptado (Marco1) para generar la respuesta deseada.
void jButton1_focusGained(FocusEvent e) {
// El código de respuesta al suceso va aquí
}
Frame1_jButton1_focusAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
}
Compare este código con el ejemplo de código de adaptador estándar
mostrado anteriormente. JBuilder generó ese código mediante una clase
adaptador estándar. Las dos maneras de utilizar los adaptadores
proporcionan el código que gestiona los sucesos focusGained, pero el
planteamiento del adaptador anónimo es más compacto.
Consulte
• Capítulo 9, “Tutorial: Creación de un editor de texto en Java”
Creación de interfaces de
Capítulo5
usuario
Para crear una buena interfaz de usuario no basta con saber programar.
Existen muchos libros en los que se tratan importantes aspectos como la
facilidad de manejo y los principios del diseño eficaz. En este capítulo se
tratan las herramientas que proporciona JBuilder para facilitar el proceso
de implementación del diseño de la interfaz de usuario. Esto incluye
determinadas tareas:
• Creación de un proyecto que contenga un contenedor principal de
interfaz de usuario, como un marco, un panel o un cuadro de diálogo.
• Adición de componentes al contenedor de interfaz de usuario; pueden
ser otros contenedores, controles visuales y componentes de base de
datos.
• Definición de los valores de las propiedades.
• Vinculación de código a los sucesos de componentes.
• Definición de diseños de contenedor y restricciones de componentes.
JBuilder facilita este proceso mediante asistentes para crear los archivos
básicos del proyecto y herramientas de diseño visual para agilizar las
tareas de diseño de la interfaz de usuario.
Consulte
• “El Asistente para aplicaciones” en la ayuda en línea.
• “Adición de componentes” en la página 3-3
• “Resaltado de los valores de las propiedades” en la página 3-8
Cuando todos los componentes que desea seleccionar estén dentro del
rectángulo, suelte el botón del ratón. Si es necesario, puede utilizar
Ctrl+clic para añadir o eliminar individualmente componentes del grupo
seleccionado.
Consulte
• “Adición de componentes” en la página 3-3 si desea más información
sobre la forma de añadir componentes independientes o agrupados.
• “Atajos de acción” en la página 2-9
Para ello:
1 Seleccione el contenedor al que desea añadir el componente.
Selecciónelo en el árbol de componentes o en el diseñador. La barra de
estado indica si se ha elegido el contenedor adecuado.
2 Seleccione en la paleta el componente que desea añadir.
3 Suelte el componente en el supercontenedor, en la superficie de diseño,
mientras mantiene pulsado el botón del ratón.
4 Pulse la tecla Alt y manténgala pulsada mientras suelta el botón del
ratón.
También puede añadir un componente fácilmente en un contenedor que
se encuentre en un diseño anidado soltándolo en el contenedor destino en
el árbol de componentes del panel de estructura.
Cuando el componente se encuentre en el nuevo contenedor, podrá
modificar sus restricciones para establecer su posición exacta.
4 Suelte el botón del ratón cuando el perfil del control tenga el tamaño
deseado.
Para redimensionar un componente, modifique sus restricciones en el
Inspector o utilice el ratón:
1 Haga clic en el componente en la superficie de diseño o en el árbol de
componentes, para seleccionarlo.
Cuando un componente se encuentra seleccionado, en su perímetro
aparecen unos pequeños cuadrados denominados tiradores o cuadros de
dimensionamiento. En algunos contenedores aparece en el centro un
tirador adicional, denominado cuadro de desplazamiento.
Consulte
• “Corte, copia y pegado de componentes” en la página 3-4 si desea más
información sobre la forma de desplazar componentes y cambiar su
tamaño por medio del ratón.
Agrupación de componentes
Algunos componentes en la paleta son contenedores que sirven para
agrupar los componentes de forma que se comporten como uno solo en la
fase de diseño.
Por ejemplo, podría agrupar una fila de botones en un Panel para crear una
barra de herramientas. También puede utilizar un contenedor para crear
un grupo personalizado de botones, barras de estado o casillas de
selección.
Cuando se añaden componentes a un contenedor, se crea una relación
entre el contenedor y los componentes que contiene. Todas las
operaciones que realice con los contenedores en fase de diseño, como
mover, copiar o borrar, afectan también a todos los componentes
agrupados dentro de ellos.
Para agrupar componentes situándolos dentro de un contenedor:
1 Añada un contenedor a la interfaz de usuario. Si utiliza null o XYLayout,
puede arrastrarlo para dimensionarlo.
Menús
Para añadir menús a la interfaz de usuario:
1 Haga clic en uno de los siguientes componentes de barra de menú o
menú contextual de la paleta de componentes:
Consulte
• Capítulo 6, “Diseño de menús”
Cuadros de diálogo
El Asistente para cuadros Existen dos maneras de incorporar un cuadro de diálogo al proyecto
de diálogo es una automáticamente:
característica de JBuilder
SE y Enterprise.
• Utilice uno que ya existe de la paleta de componentes.
• Cree uno personalizado mediante el Asistente para cuadros de diálogo
en la galería de objetos (Archivo|Nuevo).
Para añadir un cuadro de diálogo de la paleta:
1 Seleccione uno de los componentes de diálogo, como JFileChooser, de la
paleta de componentes. Se encuentran en la pestaña Contenedores
Swing, o en la pestaña Más dbSwing de las ediciones SE y Enterprise.
2 Suéltelo en la carpeta IU del árbol de componentes.
Nota En función de qué tipo de cuadro de diálogo sea, se coloca en la carpeta
IU o en la carpeta Por defecto del árbol de componentes.
3 Vincule sucesos al elemento de menú que presentará el cuadro de
diálogo durante la ejecución. Utilice la pestaña Sucesos del Inspector o
escriba el código fuente.
Sugerencia Seleccione cualquier componente dbSwing del árbol de componentes y
cambie la propiedad frame a this para que puedan verse durante la
ejecución.
Para crear un cuadro de diálogo personalizado con el Asistente para
cuadros de diálogo:
1 Seleccione Archivo|Nuevo y, a continuación, haga doble clic en el
icono Asistente para cuadros de diálogo en la galería de objetos.
2 Asigne un nombre a la clase cuadro de diálogo y elija la clase básica de
la que desea que herede.
3 Haga clic en Aceptar para cerrar el cuadro de diálogo.
En el proyecto se crea una clase shell de cuadro de diálogo, a la que se
añade un componente Panel dispuesto para la configuración en el
diseñador.
Consulte
• Capítulo 9, “Tutorial: Creación de un editor de texto en Java,” para ver
ejemplos de utilización de componentes de cuadros de diálogo
modales.
Componentes
Es una característica de Los componentes de base de datos son componentes JavaBean que
JBuilder Enterprise. controlan datos y, a menudo, se vinculan a componentes de interfaz de
usuario enlazados a datos. A veces no se muestran por sí mismos en la
interfaz de usuario. Se encuentran en la ficha DataExpress de la paleta de
componentes.
Para añadir un componente de base de datos a la clase por medio del
ratón:
1 Abra la pestaña DataExpress de la Paleta de componentes y haga clic en
el componente que desee.
2 Suéltelo en el árbol de componentes o en la superficie de diseño.
Aunque no se puede ver el componente en el Diseñador de interfaces,
aparece en la carpeta Acceso a datos del árbol de componentes.
3 Modifique sus propiedades y añada manejadores de sucesos como lo
haría con otros componentes.
Consulte
• “Aplicaciones de base de datos JBuilder” en la Guía del desarrollador de
bases de datos si desea más información sobre el uso de los componentes
de base de datos.
Aspecto
En el desarrollo multiplataforma los diseños deben tener un aspecto y un
comportamiento predecibles en todas las plataformas con las que el
programa vaya a ser compatible. La mayoría de los desarrolladores
trabajan principalmente con una plataforma. Resulta difícil prever el
aspecto de una interfaz de usuario en las plataformas con las que el
desarrollador no está familiarizado.
JBuilder proporciona varios procedimientos directos para cambiar el
aspecto durante la ejecución y durante el diseño.
//UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}
catch(Exception e) {
}
}
}
JBuilder utiliza el siguiente método para determinar el aspecto del
programa:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Este método detecta automáticamente la plataforma en la que se ejecuta el
programa y adapta el aspecto en consecuencia.
La línea de código que establece la sentencia aspecto se encuentra dentro
del bloque try/catch. El método setLookAndFeel() lanza un número de
excepciones que necesitan ser capturadas y gestionadas explícitamente.
// Aspecto Motif:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
Importante Si desea que el programa se ejecute con el aspecto Motif, selecciónelo en el
diseñador de modo que pueda ver el resultado final. Motif deja más
espacio alrededor de algunos componentes, como los botones.
Consulte
• “Ejecución de programas en Java”, en Creación de aplicaciones con
JBuilder.
• “Generación de programas en Java”, en Creación de aplicaciones con
JBuilder.
• “Compilación de programas en Java”, en Creación de aplicaciones con
JBuilder.
• “Depuración de programas en Java”, en Creación de aplicaciones con
JBuilder.
• “Depuración de programas en Java”, en Creación de aplicaciones con
JBuilder.
Diseño de menús
Capítulo6
Terminología de menús
La terminología básica de las partes fundamentales de un menú es la
siguiente:
• Un menú es una lista de opciones o elementos de menú que el usuario
utiliza durante la ejecución.
• Los elementos de menú son las opciones que ofrecen los menús. Estos
elementos pueden tener determinados atributos, por ejemplo, que estén
desactivados (atenuados) cuando no están disponibles para el usuario,
o que incluyan una marca de selección para activarlos/desactivarlos.
• La barra de menús aparece en la parte superior del marco y está formada
por menús que contienen elementos individuales.
• Un submenú es un menú anidado que se abre haciendo clic en la flecha
que aparece a la derecha de un determinado elemento de menú.
• Los métodos abreviados de teclado se visualizan a la derecha del elemento
de menú, y pueden ser específicos de una interfaz concreta. Por
ejemplo, en muchos editores se utiliza Ctrl+X para indicar la operación
Edición|Cortar.
• El separador es una línea a lo largo del menú que separa visualmente los
distintos grupos de elementos de menú.
Herramienta Acción
Añade un espacio vacío para un nuevo menú a la izquierda del
menú seleccionado o un nuevo elemento de menú por encima del
elemento de menú seleccionado.
Inserta una barra de separación inmediatamente encima del
elemento de menú seleccionado.
Crea un espacio vacío para un submenú anidado vacío y añade
una flecha a la derecha del elemento de menú seleccionado.
Nota Haga clic con el botón derecho sobre un elemento de menú del diseñador
para ver un menú emergente que contiene muchos de estos comandos.
Creación de menús
Los menús deben estar asociados a un contenedor Marco o JMarco. Para
crear un menú en la aplicación, es necesario crear antes un archivo de
componente frame. Para ello, realice una de las operaciones siguientes:
• Cree una aplicación con el Asistente para aplicaciones. En el Paso 2 del
Asistente, marque Generar barra de menús.
• Abra el archivo de un componente frame (marco).
• Utilice el Asistente para marcos con el fin de añadir un archivo Marco al
proyecto.
Para añadir un componente de menú a la interfaz de usuario:
1 Seleccione el archivo Marco o JMarco en el panel de proyecto.
2 Haga clic en la pestaña Diseño de la parte inferior del Visualizador de
aplicaciones.
3 Seleccione el marco principal de la interfaz de usuario en la superficie
de diseño o en el árbol de componentes.
4 Haga clic en el componente de menú deseado en la ficha AWT o en la
ficha Contenedores Swing de la paleta de componentes.
5 Colóquelo en cualquier parte de la superficie de diseño o en el árbol de
componentes.
• El componente MenuBar o JMenuBar se adjunta al Marco principal de la
interfaz de usuario y aparece en la parte superior de la aplicación.
• El componente PopupMenu o JPopupMenu aparece cuando el usuario hace
clic con el botón derecho del ratón en la interfaz de usuario. Los
menús emergentes no tienen barra de menús.
El componente menú añadido muestra un nodo en el árbol de
componentes y sus propiedades se muestran en el Inspector.
Por cada uno de los menús que desee incluir en la aplicación, debe añadir
un componente de menú al contenedor de destino de la interfaz de
usuario. El primer control MenuBar que se añade al contenedor de la
interfaz de usuario se considera el control MenuBar actual de la interfaz de
usuario. No obstante, en una aplicación se puede crear más de una barra
de menús. Los nombres de las barras de menú se muestran en el Inspector en
el marco de la propiedad MenuBar. Para cambiar el MenuBar actual, seleccione
uno de los menús de la lista desplegable de la propiedad MenuBar.
Inserción de separadores
El separador introduce una línea horizontal entre elementos de menú.
Puede utilizar los separadores para agrupar elementos de una lista de
menú o, sencillamente, para marcar una división visual.
Para insertar un separador en un menú:
1 Seleccione el elemento de menú por encima del cual desee colocar el
separador.
2 Haga clic en el botón Insertar separador de la barra de herramientas.
El separador se inserta encima del elemento de menú seleccionado.
Creación de submenús
Muchas aplicaciones tienen menús que contienen listas desplegables
situadas junto a un elemento de menú con el fin de proporcionar
comandos adicionales relacionados. Este tipo de listas se indican con una
flecha a la derecha del elemento de menú. JBuilder permite tantos niveles
de menús anidados, o submenús, como desee incorporar al menú. Sin
embargo, para realizar un diseño óptimo, es preferible que no utilice más
de dos o tres niveles de menú en el diseño de la interfaz de usuario.
Cuando se traslada un menú de la barra de menús hacia otro menú, sus
elementos se convierten en un submenú. Análogamente, si traslada un
elemento de menú hacia otro submenú, sus elementos subordinados
formarán otro menú anidado dentro del submenú.
Puede mover un elemento de menú hacia otro submenú o crear un
sustituto en un nivel anidado junto a un elemento que ya exista y, a
continuación, para anidar el menú, soltarlo sobre el sustituto.
Si hace doble clic sobre el valor del suceso se muestra el código fuente.
El cursor se sitúa en el nuevo método de gestión de sucesos de
actionPerformed, donde puede escribirse el código.
4 Dentro de las llaves de apertura y cierre, introduzca o modifique el
código que desea que se ejecute cuando el usuario haga clic en este
comando de menú.
Consulte
• “Vinculación de código de tratamiento de sucesos” en la página 4-2
• “Conexión de controles y sucesos” en la página 4-3
Temas avanzados
Capítulo7
Consulte
• “Las bibliotecas” en Creación de aplicaciones con JBuilder.
La serialización
Serializar un objeto es el proceso de convertirlo en una secuencia de bytes y
guardarlo como archivo en un disco o enviarlo a través de la red. Cuando
se efectúa una solicitud para recuperar un objeto de un archivo, o de otro
punto de la red, la secuencia de bytes se paraleliza y recupera su estructura
original.
En el caso de los JavaBeans, la serialización permite guardar fácilmente el
estado inicial de todas las instancias de un tipo de clase o un bean. Si el
bean se serializa en un archivo y después se paraleliza, la próxima vez que
se utilice, se recupera exactamente como lo dejó el usuario.
Advertencia Tenga mucho cuidado cuando serialice componentes. No lo intente si no
conoce exactamente las implicaciones y ramificaciones del proceso.
Consulte
• “Serialización” en Procedimientos iniciales con Java.
• El artículo “Object Serialization” de Sun en
http://java.sun.com/j2se/1.3/docs/guide/serialization/.
Consulte
• “Creación de JavaBeans con BeansExpress” en Creación de aplicaciones
con JBuilder.
• “Bean Customization” en
http://java.sun.com/docs/books/tutorial/javabeans/
customization/index.html
Consulte
• “Internacionalización de programas con JBuilder” en Creación de
aplicaciones con JBuilder.
• Asistente para la extracción de recursos (Asistentes|Recursos de
cadenas) en la ayuda en línea.
Gestores de diseño
Capítulo8
Consulte
• “XYLayout” en la página 8-14
• “Paneles y diseños anidados” en la página 8-55
• “Laying out components within a container” en Java Language Tutorial
en la dirección web
http://java.sun.com/docs/books/tutorial/uiswing/index.html/
Diseños portables
Los diseños portables, como FlowLayout y BorderLayout, calculan su valor
preferredSize utilizando una combinación de las normas de diseño y el
valor preferredSize de los componentes que se hayan añadido al
contenedor. Si alguno de los componentes es un contenedor (por ejemplo
un Panel), el valor preferredSize de dicho Panel se calcula en función de su
diseño y sus componentes, repitiendo el cálculo en tantos niveles de
contenedores anidados como sea necesario.
Para obtener más información acerca del cálculo de preferredSize de los
distintos diseños, consulte las descripciones de los distintos diseños.
XYLayout
XYLayout es una función En el caso de los contenedores XYLayout, el preferredSize del contenedor
de JBuilder SE y viene definido por los valores especificados en las propiedades width
Enterprise. (anchura) y height (altura) del diseño XYLayout. Por ejemplo, si cuenta con
las líneas de código siguientes en la inicialización del contenedor:
xYLayoutN.setWidth(400);
xYLayoutN.setHeight(300);
Y si utiliza xYlayoutN como gestor de diseño del contenedor, su valor
preferredSize será de 400 por 300 píxeles.
Si uno de los paneles anidados en la interfaz de usuario tiene un diseño
XYLayout, su tamaño preferredSize viene determinado por las llamadas a
setWidth() y setHeight() del diseño, y ese es el valor que emplea el panel
para calcular el preferredSize del siguiente contenedor externo.
Por ejemplo, en la aplicación por defecto del Asistente para aplicaciones,
el panel anidado que ocupa el centro del diseño BorderLayout del marco
tiene inicialmente el diseño XYLayout y su tamaño es 400 × 300. Esto afecta
notablemente al tamaño global del marco cuando se empaqueta, ya que el
panel anidado informará de que su preferredSize es de 400×300. El marco
global tendrá esas dimensiones, más el tamaño necesario para admitir a
los demás componentes en torno a él en el BorderLayout del marco.
Consulte
• Documentación del concepto de los asistentes de diseño personalizado
de OpenTools.
• El ejemplo de LayoutAssistant,
<jbuilder>/samples/OpenToolApi/LayoutAssistant/LayoutAssistant.jpx.
Consulte
• “Paneles y diseños anidados” en la página 8-55.
• Capítulo 10, “Tutorial: Creación de una interfaz de usuario con diseños
anidados”
XYLayout
Es una característica de XYLayout es un gestor de diseño personalizado de JBuilder. XYLayout sitúa
JBuilder SE y Enterprise. los componentes en un contenedor en coordenadas x,y específicas,
relativas a la esquina superior izquierda del contenedor.
Independientemente del tipo de pantalla, el contenedor siempre
mantendrá las posiciones x,y relativas de los componentes. Sin embargo,
cuando redimensiona un contenedor con un XYLayout, los componentes no
vuelven a posicionarse ni redimensionarse.
Importante Si cambia un diseño a XYLayout en el Inspector del diseñador, JBuilder
añade esta sentencia de importación al código fuente:
com.borland.jbcl.layout.* . Más adelante, cuando termine su interfaz de
usuario y cambie XYLayout a un diseño más portable, antes de la
distribución, la sentencia de importación no se elimina. Es necesario que la
elimine manualmente si no desea importar esa clase.
Figura 8.1 Ejemplo de XYLayout
Consulte
• “Gestores de diseño” en la página 8-1
null
Diseño null significa que no se ha asignado ningún gestor de diseño al
contenedor. No especificar un diseño es muy similar al XYLayout, en el
sentido de que permite situar los componentes en los contenedores en
unas determinadas coordenadas x,y relativas a la esquina superior
izquierda del contenedor. Las coordenadas x,y de cada componente se
especifican en su propiedad constraints. Más adelante, puede cambiar a
un diseño portable más apropiado a sus necesidades. Asegúrese de
especificar un gestor de diseño para el contenedor antes de la distribución,
porque de otra manera los componentes no se ajustarán cuando
redimensione el supercontenedor ni a las distintas configuraciones de los
usuarios y sistemas.
BorderLayout
BorderLayout organiza los componentes de los contenedores en áreas
denominadas North (Norte), South (Sur), East (Este), West (Oeste) y
Center (Centro). Éstas son las restricciones de colocación de BorderLayout.
• A los componentes que se encuentran en North y South se les aplica su
altura recomendada y ocupan todo el ancho del contenedor.
• A los componentes que se encuentran en East y West se les aplica su
anchura recomendada y ocupan todo el espacio vertical libre existente
entre las áreas North y South.
• Los componentes que se encuentran en Center se amplían hasta ocupar
todo el espacio restante.
Definición de restricciones
Por ejemplo, para poner una barra de herramientas a lo largo de la parte
superior de un contenedor de BorderLayout, podría crear un panel de
botones FlowLayout y colocarlo en el área Norte del contenedor. Esto se
hace mediante la selección del panel y cambiando a North su propiedad
constraints, en el Inspector.
Consulte
• “Paneles y diseños anidados” en la página 8-55
FlowLayout
FlowLayout ordena los componentes en filas de izquierda a derecha y
después de arriba a abajo, utilizando el preferredSize natural de cada
componente. FlowLayout alinea tantos componentes en una fila como le es
posible y se desplaza a continuación a la línea siguiente. Normalmente,
FlowLayout se utiliza para ordenar botones en un panel. En el AWT de Java,
todos los paneles (incluidas las applets) utilizan FlowLayout por defecto.
Figura 8.3 Ejemplo de FlowLayout
Alineación
IZQUIERDA—agrupa los componentes en el borde izquierdo del
contenedor.
CENTRO—centra los componentes en el contenedor.
DERECHA—agrupa los componentes en el borde derecho del contenedor.
La alineación por defecto en FlowLayout es CENTRO.
Espacio
El espacio por defecto entre componentes de un FlowLayout es de 5 píxeles.
Para cambiar el espacio horizontal o vertical, seleccione el objeto
FlowLayout en el árbol de componentes. A continuación, modifique el valor
de píxeles de la propiedad hgap (espacio horizontal) o vgap (espacio
vertical) en el Inspector.
VerticalFlowLayout
Es una característica de VerticalFlowLayout distribuye los componentes en columnas, de arriba
JBuilder SE y Enterprise. hacia abajo y de izquierda a derecha, en función del PreferredSize natural
de cada contenedor. VerticalFlowLayout alinea tantos componentes en una
columna como le es posible y se desplaza a la línea siguiente.
Normalmente, VerticalFlowLayout se utiliza para ordenar botones en un
panel.
Figura 8.4 Ejemplo de VerticalFlowLayout
Alineación
ARRIBA—agrupa los componentes en la parte superior del contenedor.
MEDIO—centra verticalmente los componentes en el contenedor.
ABAJO—agrupa los componentes, de forma que el último se encuentre en
la parte inferior del contenedor.
La alineación por defecto en un VerticalFlowLayout es ARRIBA.
Con el fin de cambiar la alineación, seleccione el objeto VerticalflowLayout
que se muestra bajo el contenedor que controla en el árbol de
componentes y, a continuación, asigne un valor a la propiedad alignment
en el Inspector.
Espacio
El espacio por defecto entre componentes de un VerticalFlowLayout es de 5
píxeles.
Para cambiar el espacio horizontal o vertical, seleccione el objeto
VerticalFlowLayout en el árbol de componentes. A continuación, modifique
el valor de píxeles de la propiedad hgap (espacio horizontal) o vgap (espacio
vertical) en el Inspector.
Relleno horizontal
horizontalFill establece un indicador de bordes para que los componentes
se expandan horizontalmente hasta ocupar toda la anchura del
contenedor.
Figura 8.5 Ejemplo de horizontalFill
Relleno vertical
verticalFill establece un indicador para que el último componente se
expanda hasta ocupar la altura libre restante del contenedor.
Figura 8.6 Ejemplo de verticalFill
BoxLayout2
Es una característica de BoxLayout2 es el diseño BoxLayout de Swing integrado como bean para que
JBuilder SE y Enterprise. pueda seleccionarse en el Inspector. Combina las funciones de
FlowLayout y de VerticalFlowLayout en un solo gestor de diseño.
Cuando se crea un contenedor BoxLayout2, se especifica si su eje principal
es el eje x (disposición de izquierda a derecha) o el eje y (disposición de
arriba hacia abajo). Los componentes se disponen de izquierda a derecha
(o de arriba hacia abajo) por el mismo orden en el que se han añadido al
contenedor.
Consulte
• BoxLayout en la documentación de Swing.
GridLayout
GridLayout sitúa los componentes en una rejilla de celdas organizadas en
filas y columnas. GridLayout expande los componentes, de manera que
llenen todo el espacio disponible dentro de su celda. Todas las celdas
tienen exactamente el mismo tamaño y la rejilla es uniforme. Cuando se
redimensiona un contenedor GridLayout, GridLayout cambia el tamaño de la
celda, de forma que las celdas sean lo más grande posible, teniendo en
cuenta el espacio disponible para el contenedor.
Figura 8.7 Ejemplo de GridLayout
Columnas y filas
Puede especificar el número de columnas y filas de una rejilla. La regla
básica de GridLayout es que se puede asignar cero a las columnas o a las
filas, pero no a ambas. Una de estas (filas o columnas) debe tener un valor
distinto de cero, de forma que el administrador de GridLayout pueda
calcular el otro valor.
Por ejemplo, si especifica cuatro columnas y cero filas para una rejilla que
tiene 15 componentes, GridLayoutcrea cuatro columnas de 4 filas y la
última fila contiene tres componentes. Por otro lado, si especifica tres filas
y cero columnas, GridLayout crea tres filas con cinco columnas completas.
Espacio
Además del número de filas y columnas, puede especificar el número de
píxeles que debe separar las celdas, por medio del espacio horizontal
(hgap) y el espacio vertical (vgap). El valor por defecto del espacio
horizontal y el vertical es cero.
CardLayout
CardLayout coloca los componentes (normalmente paneles) uno encima de
otro en una pila parecida a una baraja de cartas. Sólo se ven de uno en
uno, y se pueden inspeccionar utilizando otro control para seleccionar qué
panel se coloca en la parte superior.
Figura 8.8 Ejemplo de CardLayout
Especificar el espacio
Mediante el Inspector, puede especificar el espacio horizontal y vertical
que rodea a una pila de componentes en un CardLayout.
1 Seleccione en el árbol de componentes el objeto CardLayout que aparece
inmediatamente debajo del contenedor que controla.
OverlayLayout2
Es una característica de OverlayLayout2 es el diseño OverlayLayout de Swing integrado como bean
JBuilder SE y Enterprise. para que pueda seleccionarse en el Inspector. Es muy similar a
CardLayout en el sentido de que superpone los componentes.
A diferencia de CardLayout, que sólo deja ver los componentes de uno en
uno, permite ver simultáneamente varios componentes; basta declararlos
transparentes en el contenedor. Por ejemplo, pueden superponerse varias
imágenes transparentes en el contenedor para obtener un gráfico
compuesto.
Consulte
• OverlayLayout en la documentación de Swing.
GridBagLayout
GridBagLayout es un diseño extremadamente flexible y potente que ofrece
un mayor nivel de control que GridLayout para situar componentes en una
rejilla. GridBagLayout sitúa los componentes horizontal y verticalmente en
una rejilla rectangular dinámica. No es necesario que todos los
componentes tengan el mismo tamaño y también pueden ocupar varias
celdas.
Figura 8.9 Ejemplo de GridBagLayout
Consulte
• Capítulo 11, “Tutorial de GridBagLayout”
Área de visualización
La definición de una celda de rejilla se hace del mismo modo en
GridBagLayout que con GridLayout: una celda tiene una columna de ancho
y una fila de alto. No obstante, a diferencia de GridLayout, donde todas las
celdas tienen el mismo tamaño, las celdas de GridBagLayout pueden
Consulte
• “How to use GridBagLayout” en el tutorial de Java de Sun.
• “GridBagLayout” en la documentación del JDK.
Acerca de GridBagConstraints
GridBagLayout se sirve de un objeto GridBagConstraints para determinar la
información relativa al diseño de los componentes incluidos en el
contenedor GridBagLayout. Dado que no existe una relación unívoca entre
los componentes del contenedor y el objeto GridBagConstraints, es
necesario adaptar éste a cada uno de aquellos.
Los componentes GridBagLayout disponen de las siguientes restricciones:
• ancla
• gridx, gridy
• ipadx, ipady
• gridwidth, gridheight
• expansión
• encuadres
• weightx, weighty
GridBagConstraints permite controlar:
• La posición absoluta o relativa de los componentes.
• El tamaño absoluto o relativo de los componentes.
• El número de celdas que ocupa cada componente.
• Cómo se ocupa el área de visualización no utilizada en la celda.
• La cantidad de peso que se asigna a los componentes con el objeto de
controlar cómo utilizan la parte adicional del espacio disponible. Esto
determina cómo se comporta el componente cuando se cambia el
tamaño del contenedor.
Si desea una explicación detallada de las restricciones, con
recomendaciones para utilizarlas y configurarlas en el diseñador, consulte
los temas dedicados a cada una de ellas, que aparecen a continuación.
Consulte
• Capítulo 11, “Tutorial de GridBagLayout”
Conversión a GridBagLayout
Si opta por crear primero un prototipo a partir de otro diseño, como
XYLayout, la conversión a GridBagLayout resulta mucho más limpia y sencilla
si cuida la alineación de los paneles y los componentes cuando los coloque
por primera vez, especialmente la alineación a la izquierda y a la parte
superior. Tenga presente que está diseñando una rejilla. Intente colocar los
componentes en una rejilla imaginaria y recurra a paneles anidados para
reducir al mínimo el número de filas y columnas.
El empleo de XYLayout para crear prototipos cuenta con la ventaja de
proporcionar funciones de alineación de componentes en su menú
contextual.
XYLayout es una función Dado que el diseñador de interfaces de usuario convierte el contenedor de
de JBuilder SE y XYLayout en GridBagLayout, asigna valores de restricciones a los
Enterprise. componentes en función del lugar que éstos ocupaban antes de realizar la
conversión. Por lo general, solamente se requieren ajustes menores, si es
que se requiere alguno.
Al efectuar la conversión a GridBagLayout, se asignan restricciones de peso a
ciertos tipos de componentes (aquellos para los que normalmente sería
previsible un aumento de tamaño cuando el contenedor se amplíe en
tiempo de ejecución, como áreas de texto, campos, cuadros de grupo y
listas). Si necesita introducir retoques en el diseño después de la
conversión a GridBagLayout, se facilitará mucho la tarea si elimina
previamente las restricciones de peso de los componentes (asignarles el
valor cero).
Basta con que un componente tenga una restricción de peso mayor que
cero para que sea difícil predecir cómo cambiará su tamaño en el
diseñador, dadas las complejas interacciones entre los componentes del
contenedor.
Es fácil detectar un GridBagLayout cuyos componentes tienen pesos no
nulos, ya que los componentes no se agrupan en el centro del contenedor.
En lugar de ello, ocupan todo el espacio disponible hasta los bordes del
contenedor.
Sugerencia Cuando se anulan todos los pesos de los componentes de un GridBagLayout,
existen dos posibilidades:
• Si el contenedor es lo bastante amplio para la rejilla, los componentes se
agrupan en el centro del contenedor, con el espacio libre alrededor de
los bordes de la rejilla.
• Si el contenedor es demasiado pequeño para los componentes, la rejilla
se amplía hasta superar los bordes del contenedor y los componentes
situados fuera de los bordes del contenedor quedan ocultos. Basta con
aumentar el tamaño del contenedor hasta que dé cabida a todos los
componentes. Si el contenedor GridBagLayout que está diseñando consta
Consulte
• Consulte “GridBagConstraints” en la página 8-36 para más detalles
acerca de las restricciones de peso.
Visualización de la rejilla
La superficie de diseño muestra una rejilla optativa que permite ver
exactamente qué sucede con cada celda y componente del diseño.
• Para visualizar esta rejilla, haga clic sobre un componente del
contenedor GridBagLayout y elija Mostrar rejilla. Junto a la opción de
menú, aparece una marca de selección.
• Para ocultar la rejilla temporalmente, aunque Mostrar rejilla esté
seleccionada, haga clic en un componente que no se encuentre en el
contenedor GridBagLayout (también sirve el propio contenedor). La rejilla
solamente está visible cuando un componente de GridBagLayout está
seleccionado.
• Si desea ocultarla permanentemente, haga clic con el botón derecho en
un componente y seleccione de nuevo Mostrar rejilla para que
desaparezca la marca de selección.
GridBagConstraints
El siguiente apartado presenta las distintas GridBagConstraints por
separado. Define cada una de ellas y especifica los valores válidos y por
defecto; indica, igualmente, el modo de proceder para definir visualmente
esa restricción en el diseñador.
Consulte
• Capítulo 11, “Tutorial de GridBagLayout,” si desea más información
sobre el establecimiento de restricciones GridBagConstraint en el
diseñador.
ancla
Cuando el componente sea más pequeño que el área en que se visualiza,
utilice la restricción ancla para indicar al gestor de diseño dónde debe
situar el componente dentro del área.
La restricción ancla sólo afecta al componente dentro de su propia área de
visualización, en función de la restricción expansión del componente. Por
ejemplo, si el valor de la restricción expansión de un componente es
GridBagConstraints.BOTH (AMBAS, es decir que toda el área de
visualización está ocupada, horizontal y verticalmente), la restricción
ancla no tiene efecto alguno porque el componente ocupa la totalidad del
área disponible. Para que la restricción ancla tenga efecto, asigne a la
restricción expansión el valor GridBagConstraints.NONE (ANULADA),
GridBagConstraints.HORIZONTAL (HORIZONTAL) o
GridBagConstraints.VERTICAL
expansión
Si el área de visualización en la que se inserta un componente es superior a
este último, la restricción expansión le permite indicar al gestor de diseño
las zonas del área que debe asignar al componente.
En el caso de la restricción ancla, las restricciones de expansión solamente
afectan al componente dentro de su área de visualización. Las
restricciones de expansión indican al gestor de diseño que debe expandir el
componente para que ocupe el área completa que se le da.
gridwidth, gridheight
Utilice estas restricciones para especificar el número de celdas de las que
se compone una fila (gridwidth) o una columna (gridheight) del
componente. El valor de esta restricción se introduce en número de celdas,
no en píxeles.
gridx, gridy
Utilice estas restricciones para especificar la posición de la celda donde se
encuentra la esquina superior izquierda del componente. Por ejemplo,
gridx=0 es la primera columna de la izquierda, mientras que gridy=0 es la
primera fila de la parte superior. Por lo tanto, un componente que tenga
las restricciones gridx=0 y gridy=0 se situará en la primera celda de la rejilla
(arriba a la izquierda).
GridBagConstraints.RELATIVE especifica que el componente debe situarse de
forma relativa al componente anterior, como se explica a continuación:
• Cuando se utiliza con gridx, indica que el componente debe situarse
inmediatamente a la derecha del último componente añadido.
• Cuando se utiliza con gridy, indica que el componente debe situarse
inmediatamente debajo del último componente añadido.
encuadres
Utilice encuadres para especificar el espacio externo (márgenes) en píxeles,
que media entre el componente y los bordes de su área de visualización.
La propiedad encuadre establece un espacio constante entre el borde del
componente y el borde de la celda que lo contiene. Por lo tanto, encuadre
actúa como "frontera" del componente, con el objeto de mantenerlo
alejado de los bordes de la celda. Por ejemplo, si altera la anchura de un
componente ampliando el encuadre a la izquierda y a la derecha y supera
los límites de la celda, ésta se expande para acomodar tanto al
componente como a sus encuadres. Debido a ello, las restricciones expansión
y tamaño adicional nunca restan espacio a los encuadres.
ipadx, ipady
Estas restricciones indican el tamaño adicional de un componente:
• ipadx especifica el número de píxeles que debe añadirse a la anchura
mínima del componente.
• ipady especifica el número de píxeles que debe añadirse a la altura
mínima del componente.
Utilice ipadx e ipady para especificar el número de píxeles con los que se
quiere incrementar el tamaño mínimo del componente, es decir, el tamaño
adicional que se le quiere dar. Por ejemplo, la anchura del componente
será, al menos, la anchura mínima más ipadx en píxeles. El código sólo lo
añade una vez y lo divide por igual entre ambos lados del componente.
De forma parecida, la altura del componente será de, al menos, la altura
mínima más ipady en píxeles.
Ejemplo
Cuando se añaden a un componente que tiene un tamaño recomendado
de 30 píxeles de ancho y 20 píxeles de alto:
Después:
weightx, weighty
Las restricciones de peso permiten establecer cómo se distribuye el
espacio adicional de los contenedores GridBagLayout, horizontal (weightx) y
verticalmente (weighty), cuando se redimensionan. Los pesos determinan
qué parte del espacio adicional deben obtener las celdas y los
componentes cuando se aumenta el tamaño del contenedor más allá de su
tamaño por defecto.
Los valores de peso son del tipo double y se expresan como una
proporción. Sólo se admiten los valores positivos. Se admiten todos los
formatos de proporción. Asigne mentalmente un peso total a los
componentes de la misma fila o columna y reparta ese peso entre los
componentes. Cuando sume todos los pesos de los componentes, deberá
obtener el peso total que había calculado.
• Un peso vertical de fila determina la altura de la fila en relación con las
otras filas. Este peso es igual al valor weighty mayor de los componentes
de la fila. El factor determinante es la altura, que se mide en el eje y.
• Un peso horizontal de la columna determina la anchura de la columna
en relación con las otras columnas. Este peso es igual al valor weighty
mayor de los componentes de la columna. El factor determinante es la
anchura, que se mide en el eje x.
En teoría, sólo los componentes mayores de una fila o columna
determinarán el diseño, por lo que sólo necesita que un componente por
fila o columna determine el peso.
Consulte
• “GridBagConstraints” en la documentación del JDK.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
//Construir el marco
public Marco1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Inicialización de componente
private void jbInit() throws Exception{
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(400, 300));
this.setTitle("Sort");
jPanel1.setLayout(gridBagLayout3);
jPanel2.setBorder(BorderFactory.createRaisedBevelBorder());
jPanel2.setLayout(gridBagLayout2);
jLabel1.setFont(new java.awt.Font("SansSerif", 0, 12));
jLabel1.setForeground(Color.black);
jLabel1.setText("Available columns");
jList1.setBorder(BorderFactory.createLoweredBevelBorder());
jButton1.setFont(new java.awt.Font("SansSerif", 0, 12));
jButton1.setBorder(BorderFactory.createRaisedBevelBorder());
jButton1.setText("Add to Sort");
jCheckBox1.setText("Case insensitive");
jCheckBox1.setFont(new java.awt.Font("Dialog", 0, 12));
jButton2.setText("Remove from Sort");
jButton2.setBorder(BorderFactory.createRaisedBevelBorder());
jButton2.setFont(new java.awt.Font("SansSerif", 0, 12));
jCheckBox2.setFont(new java.awt.Font("Dialog", 0, 12));
jCheckBox2.setText("Descending");
jPanel3.setLayout(gridBagLayout1);
jPanel3.setBorder(BorderFactory.createRaisedBevelBorder());
jList2.setBorder(BorderFactory.createLoweredBevelBorder());
jLabel2.setFont(new java.awt.Font("SansSerif", 0, 12));
jLabel2.setForeground(Color.black);
jLabel2.setText("Sorted columns");
jButton3.setText("Help");
jButton4.setText("OK");
jButton5.setText("Cancel");
jPanel4.setLayout(gridLayout1);
gridLayout1.setHgap(10);
gridLayout1.setVgap(10);
contentPane.add(jPanel1, BorderLayout.CENTER);
jPanel1.add(jPanel2, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0
,GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(6, 10, 0, 19), 0, 2));
jPanel2.add(jList1, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0
,GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 7, 0, 9), 160, 106));
jPanel2.add(jButton1, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(8, 7, 0, 9), 90, 2));
jPanel2.add(jCheckBox1, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(11, 13, 15, 15), 31, 0));
jPanel2.add(jLabel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(4, 7, 0, 15), 54, 8));
jPanel1.add(jPanel3, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0
,GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(6, 9, 0, 0), 0, 2));
jPanel3.add(jList2, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0
,GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 7, 0, 9), 160, 106));
jPanel3.add(jButton2, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(8, 7, 0, 9), 50, 2));
jPanel3.add(jCheckBox2, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(11, 13, 15, 15), 56, 0));
jPanel3.add(jLabel2, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(4, 7, 0, 15), 67, 8));
jPanel1.add(jPanel4, new GridBagConstraints(0, 1, 2, 1, 1.0, 1.0
,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(15, 71, 13, 75), 106, 0));
jPanel4.add(jButton4, null);
jPanel4.add(jButton5, null);
jPanel4.add(jButton3, null);
}
PaneLayout
Es una característica de PaneLayout permite especificar el tamaño de un componente en relación
JBuilder SE y Enterprise. con componentes del mismo nivel. PaneLayout, aplicado a un panel o a un
marco, permite controlar el porcentaje del contenedor que tendrán los
componentes en relación a los otros, pero no crea barras de división
desplazables entre los paneles.
Figura 8.10 Ejemplo de PaneLayout
Variables PaneConstraint
Los componentes PaneConstraints tienen una restricción que consta de
cuatro variables:
Consulte
• “Diseños suministrados con JBuilder” en la página 8-13 para obtener
más información sobre las restricciones de diseño.
Consulte
• Capítulo 10, “Tutorial: Creación de una interfaz de usuario con diseños
anidados,” para trabajar en el tutorial de construcción de una interfaz
de usuario.
• Capítulo 5, “Creación de interfaces de usuario,” para obtener más
información sobre cómo usar el diseñador.
de texto en Java
En este detallado tutorial se utiliza JBuilder para crear, comprobar y
ejecutar una aplicación en Java llamada “Editor de texto”. Esta aplicación
es un simple editor de textos capaz de leer, escribir y modificar archivos
de texto.
Podrá definir el color del texto, así como el color de fondo del área de
edición de texto. También se podrá configurar la fuente de texto en las
ediciones JBuilder Professional y Enterprise del tutorial.
Apenas invertirá dos horas en leer este tutorial.
Consulte
• Capítulo 1, “Diseño visual en JBuilder”
• “El Visualizador de aplicaciones” en Introducción a JBuilder.
• “Generación de programas en Java” en Creación de aplicaciones con
JBuilder.
• “Depuración de programas en Java” en Creación de aplicaciones con
JBuilder.
Paso 1: Configuración
En este tutorial se va a crear un editor de texto que permite crear,
modificar y guardar archivos.
Las funcionalidad para crear archivos se añade después de crear otras
funciones. En primer lugar vamos a encargarnos de los métodos de
apertura y modificación de archivos. Para ello se necesita un archivo con
el que trabajar.
1 Con el administrador de archivos, cree un archivo de texto llamado
tester.txt.
Asegúrese de que tiene acceso completo de lectura y escritura, y que
este archivo se puede modificar a voluntad sin que afecte a ningún
trabajo.
2 Ponga el texto en él. Puede copiar y pegar el texto que aparece abajo:
Algo de texto para utilizar.
El texto que se extiende más de una línea para comprobar que el corte de
línea funciona apropiadamente y se muestra como debería.
3 Guarde el archivo.
Creación de un proyecto
El Asistente para proyectos crea un proyecto de JBuilder en el que
trabajar.
1 Elija Archivo|Nuevo proyecto para iniciar el Asistente para proyectos.
2 Realice los siguientes cambios en el Paso 1:
• Nombre: Editor de texto
Nota Por defecto, JBuilder utiliza este nombre de proyecto como el
nombre del directorio del proyecto y el nombre del paquete de las
clases contenidas.
• Seleccione la opción Generar archivo de notas del proyecto.
Cuando se activa esta opción, el Asistente para proyectos crea un
archivo HTML para las notas del proyecto y lo añade.
• Si tiene otros proyectos abiertos, desactive la opción Añadir proyecto
al grupo activo. Este proyecto es independiente.
3 Acepte las restantes opciones por defecto del Paso 1.
4 Pulse Siguiente para ir al Paso 2 del Asistente para proyectos.
5 Acepte las vías de acceso por defecto del Paso 2.
6 Pulse Siguiente para ir al Paso 3 del Asistente para proyectos.
7 Rellene los campos optativos de la clase Javadoc.
a En el campo Título, escriba Tutorial Editor de texto.
b En el campo Descripción, escriba Tutorial de demostración de las
funciones de diseño visual de JBuilder.
c Escriba su nombre en el campo @author.
Si lo desea, deje en blanco los otros campos.
Esta información se guarda en el archivo HTML del proyecto. Se utiliza
en los comentarios de Javadoc cuando selecciona la opción Crear
comentarios de cabecera, presente en muchos de los asistentes de
JBuilder, como los asistentes para aplicaciones y clases.
8 Acepte los restantes valores por defecto de esta ficha.
9 Pulse Finalizar para crear el proyecto.
Consulte
• “Gestión de las vías de acceso” en Creación de aplicaciones con JBuilder.
• “Creación y gestión de proyectos” en Creación de aplicaciones con JBuilder
Consulte
• “Elección del estilo de manejador de sucesos” en la página 4-6.
Consulte
• “Aspecto” en la página 5-10.
Consulte
• “BorderLayout” en la página 8-16.
El Asistente para aplicaciones crea un componente JMarco que es el
contenedor principal de la interfaz. Este componente JMarco es el
componente this, que contiene un objeto JPanel llamado contentPane, que
ya utiliza BorderLayout. Lo único que hay que hacer ahora es añadir los
componentes del área de texto a contentPane.
Para ello, se añadirá un panel de desplazamiento y se colocará un
componente de área de texto dentro de él. El panel de desplazamiento
proporciona barras de desplazamiento al área de texto.
1 Seleccione la pestaña TextEditFrame, en la parte superior del editor.
2 Haga clic en la pestaña Diseño si aún no está seleccionada.
2 lineWrap = true
3 wrapStyleWord = true
A continuación, compile el programa y ejecútelo para ver qué aspecto
ofrece.
1 Seleccione Proyecto|Ejecutar Make del proyecto en el menú.
Este comando compila todos los archivos del proyecto. Genera los
archivos TextEditClass.class y TextEditFrame.class en el subdirectorio
classes del directorio del proyecto. Debería compilarse sin errores.
2 Pulse el botón Ejecutar en la barra de herramientas de JBuilder, pulse F9
o seleccione Ejecutar|Ejecutar proyecto en la barra de menús.
Ahora la interfaz de usuario de ejecución ofrecerá un aspecto similar al
siguiente:
En el tutorial seguido por El diseñador de menús se puede utilizar para crear y modificar menús. Se
los usuarios de JBuilder van a crear elementos de menú, añadir un menú e insertar una barra de
Personal se omite el separación.
elemento de menú
Edición|Fuente. Existen varias formas de acceder a estos comandos. En este tutorial se
muestran muchas de ellas. Cuando decida cuál es el acceso que prefiere,
podrá elegir el modo para utilizarlo en lo sucesivo con los comandos
similares.
1 Haga clic en la pestaña Diseño de TextEditFrame.java, si aún no está
seleccionada.
2 Abra el diseñador de menús. Haga doble clic en jMenuFileExit en la
carpeta Menú, en el árbol de componentes, o selecciónelo y pulse Intro.
De esta forma, la superficie de diseño da paso al diseñador de menús,
con jMenuFileExit seleccionado.
3 Introduzca un elemento de menú por medio de la barra de
herramientas del diseñador de menús:
a Pulse el botón Insertar menú de la barra de herramientas del
diseñador de menús.
b Escriba Nuevo directamente en la posición del nuevo elemento de
menú.
c Pulse Intro para aceptar el texto escrito.
4 Introduzca un elemento de menú por medio del menú contextual del
diseñador de menús:
a Seleccione el elemento de menú Archivo en la superficie de diseño.
El menú Archivo se amplía.
b Haga clic con el botón derecho del ratón en el elemento de menú
Salir.
De esta forma, se muestra un menú con todos los comandos del
diseñador.
c Elija Insertar elemento de menú en el menú contextual del diseñador
de menús.
d Seleccione el campo de texto en la ficha Propiedades del Inspector.
e Escriba Abrir.
f Pulse Intro para aceptar el texto escrito y bajar a la línea siguiente.
5 Inserte otros dos elementos de menú. Cree los siguientes elementos de
menú con una de las técnicas explicadas arriba:
a Guardar
b Guardar como
6 Ahora, inserte una barra entre los elementos Salir y Guardar como:
a Seleccione el elemento de menú Salir.
b Pulse el botón Insertar separador.
El menú Archivo ya está terminado. Vamos a crear el menú Edición.
1 Haga clic con el botón derecho en la barra principal de menús y
seleccione Insertar menú.
Así se crea un menú entre los menús Archivo y Ayuda.
2 Escriba Edición como nombre de este menú.
3 Pulse Intro para descender hacia la siguiente entrada vacía. No es
necesario pulsar Insert aquí porque este menú no contiene ningún
elemento después de la entrada actual.
Nota En el diseñador de menús siempre aparece una línea en blanco en la
parte inferior de los menús. No es un elemento de menú; sólo es un
marcador utilizado por JBuilder. Para añadir encima el nuevo
elemento, se debe utilizar Insertar elemento de menú.
Sugerencia Para borrar una entrada, selecciónela y haga clic en el botón Borrar de
la barra de herramientas, o pulse la tecla Supr dos veces. La primera vez
que se pulsa la tecla Supr se borra el texto de la entrada. La segunda vez
elimina la entrada del menú.
4 Siga creando el menú Edición. Utilice la técnica que prefiera para
añadir los elementos. Añada tres elementos de menú:
a Fuente (JBuilder SE y Enterprise)
b Color del texto
c Color de fondo
Si alguna entrada tiene una longitud superior al área de edición, el
texto se desplazará automáticamente a medida que escriba. Cuando
pulse Intro, el diseñador de menús ajustará el ancho del menú con el
objeto de adaptarse al elemento más largo de la lista.
5 Cierre el diseñador de menús con un doble clic en cualquier
componente de la carpeta de la interfaz de usuario del árbol de
componentes.
Consulte
• “Creación de menús” en la página 6-4.
4 Haga doble clic en el valor de este suceso, o pulse Intro para crear el
suceso.
Si el método de tratamiento del suceso es nuevo, esta operación
generará un stub vacío para el método en el código fuente.
Independientemente de si el método es nuevo o ya existe, el foco de
ventana cambiará a código fuente en el editor y colocará el cursor
dentro del método de tratamiento de sucesos.
En el caso de un método nuevo de tratamiento de sucesos, como es el
caso, verá que la sección principal del método no contiene todavía
código alguno.
Sugerencia Para ahorrar tiempo al escribir el código, puede copiar y pegar los
ejemplos de arriba, desde el visualizador de ayuda a su código, de la
forma siguiente:
a Seleccione el código en el Visualizador de la ayuda y cópielo. En este
ejemplo, resalte todo el método de tratamiento de sucesos. No olvide
comprobar que las llaves de apertura y cierre son correctas en
número.
b Elija Edición|Copiar en el menú del Visualizador de la ayuda o
utilice el atajo de teclas correspondiente a la asignación de teclado.
c Haga clic en la pestaña Fuente para abrir el editor en el Visualizador
de aplicaciones.
d Resalte el código que desea sustituir. En este ejemplo, resalte todo el
método en el código fuente.
Advertencia Tenga cuidado al pegar. No elimine ninguna llave importante, como
la de cierre en la definición de clases.
e Seleccione Edición|Pegar en el menú principal de JBuilder o utilice
el correspondiente método abreviado de teclado.
f Compruebe el nivel de sangrado del código insertado y ajústelo para
que coincida con su código. Coloque un sangrado en un bloque. Para
ello, seleccione el texto y pulse la tecla Tab.
3 Guarde y ejecute la aplicación y escriba algo en el área de texto.
4 Seleccione el texto y utilice el elemento de menú Edición|Fuente para
cambiar la fuente.
5 Salga de la aplicación “Editor de texto” y cierre el panel de mensajes de
JBuilder.
En esta aplicación se cambia la fuente de la totalidad del área de texto, no
sólo la del texto seleccionado. La configuración de fuente no es
permanente, por lo que cuando se cierra la aplicación y se vuelve a abrir se
muestra de nuevo el texto por defecto. En este tutorial no se incluye el
código que activa estas funciones, pero puede hacerlo después como un
ejercicio independiente.
Consulte
• “Internacionalización de programas con JBuilder” en Creación de
aplicaciones con JBuilder.
• “Adición y configuración de bibliotecas” en Creación de aplicaciones con
JBuilder.
• “Optimización de importaciones” en Creación de aplicaciones con
JBuilder.
in.close();
catch(IOException e) {
statusBar.setText("Error al abrir "+fileName);
}
}
try {
// Abrir el archivo del nombre actual.
File file = new File (currFileName);
this.dirty = false;
switch (value) {
case JOptionPane.YES_OPTION:
dlg.setModal(true);
dlg.show();
3 Introduzca la llamada a helpAbout(); en jMenuHelpAbout_actionPerformed()
de manera que el método quede como sigue:
//Realizar Ayuda | Acerca de
public void jMenuHelpAbout_actionPerformed(ActionEvent e) {
helpAbout();
}
4 Ahora, guarde y ejecute la aplicación. Pruebe los botones Abrir,
Guardar y Acerca de. Compárelos con los elementos de menú Archivo|
Abrir, Archivo|Guardar y Ayuda|Acerca de.
5 Salga de la aplicación “Editor de texto” y cierre el panel de mensajes de
JBuilder.
Consulte
• La documentación de la API relacionada con el componente
DBTextDataBinder. Para leerlo,
a Pulse la pestaña Fuente de TextEditFrame.java.
b Seleccione dBTextDataBinder1 en el panel de estructura. Se encuentra
dentro del componente TextEditFrame.
La declaración dBTextDataBinder1 aparece resaltada en el editor.
c Coloque el cursor dentro del nombre de la clase DBTextDataBinder.
d Haga clic con el botón derecho del ratón y seleccione Buscar
definición.
En el editor se abre el archivo de código fuente DBTextDataBinder.
e Haga clic en la pestaña Doc para ver la documentación de la API.
Cierre la aplicación “Editor de Texto” antes de proseguir con el siguiente
paso.
Para ello, debe crear un método para actualizar la barra de título, que
habrá de llamarse desde los lugares en los que el código cambia el nombre
de archivo actual o el indicador dirty. Este nuevo método se llamará
updateCaption().
1 Dentro del panel de estructura, haga clic en el método
jMenuFileExit_actionPerformed(ActionEvent e). De esta forma, traslada el
cursor a dicho método de tratamiento de sucesos y lo resalta en el
editor.
2 Coloque el cursor justo encima de este método e introduzca el siguiente
bloque de método updateCaption:
// Actualiza la barra de título de la aplicación para mostrar el nombre del
archivo y su estado de modificación.
void updateCaption() {
String caption;
if (currFileName == null) {
// Sintetizar el nombre "Sin título" si todavía no tiene nombre.
caption = "Sín título";
}
else {
caption = currFileName;
}
try
{
// Abrir el archivo del nombre actual.
File file = new File (currFileName);
void document1_insertUpdate(DocumentEvent e) {
if (!dirty) {
dirty = true;
updateCaption(); // <---- HERE
}
}
void document1_removeUpdate(DocumentEvent e) {
if (!dirty) {
dirty = true;
updateCaption(); // <---- HERE
}
}
6 Ejecute la aplicación y observe cómo cambia la barra de título cuando
se realizan las operaciones siguientes:
• Cambie el nombre del archivo, utilizando Archivo|Guardar como.
• Escriba en el área de texto, para hacer que el archivo cambie a
modificado. Observe que en la barra de título aparecerá el asterisco *
tan pronto como se escriba.
• Guarde el archivo, para anular el valor de modificación.
• Si utiliza SE o Enterprise, pruebe a realizar estas acciones con el
menú contextual.
¡Enhorabuena! Ha utilizado las herramientas de diseño visual de JBuilder
para crear un editor de texto que funciona, escrito enteramente en Java. Si
utiliza JBuilder Personal ya ha completado el tutorial. Compare su código
con el del ejemplo, <jbuilder>/samples/SimpleTextEditor.
Aspectos generales
La distribución es un tema avanzado que requiere algo de estudio y
experiencia para su comprensión. El Creador de recopilatorios de JBuilder
reduce esta complejidad y ayuda a crear un archivo de revisiones con
todos los requisitos necesarios para la distribución.
Consulte también
• “Utilización del Creador de recopilatorios” en Creación de aplicaciones
con JBuilder.
• “Understanding the Manifest” en
http://java.sun.com/docs/books/tutorial/jar/basics/manifest.html
Consulte
• Si desea más información sobre la forma en que Java busca las vías de
acceso, consulte, "How Classes Are Found" en
http://java.sun.com/j2se/1.3/docs/tooldocs/findingclasses.html.
Consulte
• “Depuración de programas en Java”, en Creación de aplicaciones con
JBuilder.
• La sede web de Sun sobre las herramientas básicas, en
http://java.sun.com/j2se/1.3/docs/tooldocs/tools.html#basic.
• El tutorial de Sun sobre archivos Jar en
http://java.sun.com/docs/books/tutorial/jar/index.html.
Nota Las imágenes de pantalla en este tutorial utilizan el aspecto Metal del
entorno de desarrollo integrado de JBuilder y del entorno de ejecución de
la aplicación.
Consulte
• “Creación y gestión de proyectos” en Creación de aplicaciones con
JBuilder.
• “Gestión de las vías de acceso” en Creación de aplicaciones con JBuilder.
• “Cómo genera JBuilder las vías de acceso” en el capítulo “Gestión de
las vías de acceso” de Creación de aplicaciones con JBuilder si desea más
información sobre el segundo paso del Asistente para proyectos.
• “Localización de archivos en el capítulo “Gestión de las vías de acceso”
de Creación de aplicaciones con JBuilder.
estructura, por lo que deberá cambiar siempre que desee ver el árbol.
También puede agrandar el diseñador arrastrando sus bordes.
Puede que tenga que modificar el tamaño del marco this o la posición
de los paneles después de ejecutar la aplicación. Antes de agrandar
ningún panel, seleccione this y auméntelo. A continuación, al ejecutar
la aplicación, redimensione la ventana de la aplicación. Observe que los
paneles no se redimensionan al mismo tiempo que la ventana. Esta es la
razón por la que no debe dejar el diseño en XYLayout o en null. Al final
del tutorial, al cambiar el diseño de contentPane a BorderLayout, los
paneles se redimensionarán de forma correcta al mismo tiempo que la
ventana.
4 Salga de la aplicación.
5 Haga clic con el botón derecho del ratón en la pestaña Aplicacion1 del
panel de mensajes y, a continuación, seleccione la opción Eliminar
todas las pestañas para cerrar este panel.
Esto pasa porque los botones están en su tamaño mínimo para mostrar el
texto y la parte superior de BorderLayout sólo puede estirarse
horizontalmente, no verticalmente. Por lo tanto, los botones no se pueden
ajustar. A través de este ejemplo, puede ver que el BorderLayout no es la
mejor opción para diseños más complicados que contengan barras de
herramientas. Es mejor usarlo sólo cuando tenga varios componentes que
necesiten rellenar Center, North, South, East, y West (Centro, Norte, Sur,
Esto es todo. A pesar de que la fase de aprendizaje parece lenta, una vez
que se familiarice con los distintos diseños podrá planificarlos e
implementarlos con mayor facilidad.
Es fácil comprender que el uso de varios niveles de paneles puede ser
bastante tedioso y complicado, incluso con los diseños más fáciles. Tiene
más sentido aprender el manejo de GridBagLayout. De este modo, los
diseños de interfaz serán mucho más sencillos y fáciles de controlar. Se
utilizarán diseños anidados, pero sólo de uno o dos niveles de
profundidad. GridBagLayout controla el resto del comportamiento del
diseño.
Para un tutorial acerca de GridBagLayout, consulte el Capítulo 11, “Tutorial
de GridBagLayout”.
Para aprender a escribir código que responda a sucesos de usuario en sus
aplicaciones, consulte el tutorial en pantalla denominado “Creación de un
editor de textos en Java”.
Tutorial de GridBagLayout
Capítulo11
Introducción
En este tutorial se explica en profundidad el GridBagLayout y la forma de
crear un contenedor de interfaz de GridBagLayout con las herramientas de
diseño visual de JBuilder. El objetivo de este tutorial consiste en
proporcionar al usuario un amplio conocimiento de la forma en que
GridBagLayout funciona en JBuilder y demostrarle la forma de simplificar el
diseño de GridBagLayout. Aunque esta información está dirigida al trabajo
con JBuilder, gran parte se refiere al uso de GridBagLayout en general.
Las imágenes de este tutorial se han elaborado en Windows. Sin embargo,
los ejemplos son válidos para otras plataformas, ya que las funciones
básicas de JBuilder y GridBagLayout son siempre las mismas.
Importante Este tutorial utiliza XYLayout para el diseño de la interfaz de usuario. Si
dispone de JBuilder Personal, sustituya XYLayout por diseño null.
El tutorial de GridBagLayout está dividido en tres apartados:
• “Primera parte: Acerca de GridBagLayout” en la página 11-2
En la primera parte del tutorial se explica en qué consisten el gestor
GridBagLayout y qué son los objetos GridBagConstraints. Da una
descripción detallada de cada una de las restricciones y explica cómo
configurarlas en el diseñador visual de JBuilder. Aquí se explica
también la complejidad de GridBagLayout y se enseñan las formas de
simplificar su diseño por medio del diseñador.
• “Segunda parte: Creación de diseños GridBagLayout en JBuilder” en la
página 11-17
En la segunda parte se recorren los pasos necesarios para crear un
cuadro de diálogo con GridBagLayout. Muestra cómo planificar la
Definición de GridBagLayout
En Java, para crear una interfaz de usuario se añaden componentes a un
objeto contenedor, como Marco o Panel, y se utiliza el gestor de diseño para
controlar el tamaño y la posición de los objetos dentro del contenedor. Por
defecto, todos los objetos contenedores tienen un objeto de gestor de
diseño que controla su diseño.
GridBagLayout es un gestor de diseño muy flexible y avanzado que
implementa la interfaz LayoutManager2 y determina el lugar y la forma
en que debe dar diseño a los objetos a partir de las restricciones
GridBagConstraints. Coloca los componentes en horizontal y en vertical
en una rejilla rectangular dinámica, pero proporciona más control en el
tamaño y la posición de los componentes que GridLayout (donde todas las
celdas de la rejilla tienen el mismo tamaño y cada una contiene un
componente).
A diferencia de GridLayout, los componentes de GridBagLayout no tienen por
qué tener el mismo tamaño y pueden abarcar varias celdas. Además, no es
necesario que las columnas y las filas de la rejilla tengan la misma anchura
y altura.
GridBagLayout controla la colocación de sus componentes a partir de los
valores de sus objetos GridBagConstraints, los tamaños mínimos y el
tamaño recomendado del contenedor.
Figura 11.1 Ejemplo de GridBagLayout
En el ejemplo anterior, algunos botones ocupan sólo una celda (una fila y
una columna) de la rejilla, pero otros abarcan varias celdas (se extienden
por varias filas y columnas). Se puede ver el número exacto de celdas que
ocupa cada componente en el diseñador, cuando se muestra la rejilla de
un contenedor GridBagLayout. La diferencia entre el área de visualización
de los componentes y el área que ocupan se explica en el siguiente tema de
ayuda, "Área de visualización de los componentes".
Figura 11.3 Área de visualización – tres celdas en sentido horizontal, tres celdas en sentido
vertical
Definición de GridBagConstraints
GridBagLayout se sirve de un objeto GridBagConstraints para determinar la
información relativa al diseño de los componentes incluidos en el
contenedor GridBagLayout. Dado que no existe una relación unívoca entre
los componentes del contenedor y el objeto GridBagConstraints, es
necesario adaptar éste a cada uno de aquéllos.
GridBagConstraints controla:
• La posición absoluta o relativa de los componentes.
• El tamaño absoluto o relativo de los componentes.
• El número de celdas que ocupa cada componente.
• La forma en que se ocupa el espacio sin ocupar en el área de
visualización de un componente.
• La cantidad de relleno interno y externo de cada componente.
• Qué cantidad de Peso se asigna a los componentes para controlar qué
componentes utilizan una parte mayor del espacio disponible. Esto
controla el comportamiento del componente cuando se cambia el
tamaño del contenedor o se muestra la interfaz en distintas
plataformas.
Los componentes GridBagLayout disponen de las siguientes restricciones:
• ancla
• expansión
• gridx, gridy
• gridwidth, gridheight
• encuadres
• ipadx, ipady
• weightx, weighty
Consulte
• java.awt.GridBagConstraints.html en
http://java.sun.com/j2se/1.3/docs/api/java/awt/GridBagConstraints.html
• java.awt.GridBagLayout.html en
http://java.sun.com/j2se/1.3/docs/api/java/awt/GridBagLayout.html
Dificultades de GridBagLayout
Cuando se empiezan a modificar las restricciones de un diseño
GridBagLayout es frecuente que se obtengan resultados inesperados que
pueden parecer incomprensibles. La mayor dificultad de la asignación de
restricciones a componentes de contenedores GridBagLayout es la
comprensión del efecto que tendrán las modificaciones efectuadas en un
componente sobre los demás componentes de la rejilla. El
comportamiento de las restricciones de un componente depende de los
demás componentes del contenedor y sus restricciones. Por ejemplo, si se
eliminan los valores de peso de un componente, la posición de los otros
puede variar.
En los dos ejemplos que se presentan a continuación, se muestra el efecto
del cambio del valor de la restricción weighty de Área 4, de 1,0 a 0,0.
Observe cómo se contrae la fila y cómo se expande la fila inferior.
Figura 11.5 El valor de la restricción weighty de Área 4 es 1.0:
Ventajas de GridBagLayout
GridBagLayout proporciona un control absoluto del comportamiento de los
componentes y la forma en que se muestran cuando se cambia el tamaño
del contenedor o se presenta en plataformas de otro tipo. De esta forma, se
garantiza que la aplicación distribuida tendrá el aspecto y el
comportamiento apropiados en todas las plataformas aceptadas.
La mayoría de los manuales y tutoriales evitan tratar en profundidad
GridBagLayout y en muchos se desaconseja su uso. Es posible realizar gran
parte del trabajo de diseño de la interfaz de usuario con una combinación
de otros diseños.
Si ha intentado utilizar GridBagLayout alguna vez, habrá descubierto que es
muy complejo y de difícil utilización al principio. Si pretende que el
diseño funcione correctamente tal y como se desea, hay que aplicarse a la
aburrida tarea de comprobar y modificar errores de las restricciones en el
código y, a continuación, compilar y ejecutar para ver si funciona. Hasta
que se entiende por completo el comportamiento de las distintas
restricciones y el efecto que ejercen sus modificaciones en el diseño,
GridBagLayout resulta muy difícil de utilizar.
Como ocurre con todas las situaciones complejas, la forma más sencilla de
utilizar esta herramienta consiste en simplificarla.
Simplificación de GridBagLayout
JBuilder proporciona una forma mucho más sencilla de efectuar el trabajo
de diseño con GridBagLayout, por lo que incluso los principiantes en la
programación con Java pueden utilizarlo. Mediante una combinación del
diseñador visual, XYLayout o null de JBuilder, y las extraordinarias
funciones de conversión de diseño de JBuilder, todo el código de diseño
inicial se genera automáticamente, con lo que se libera al programador de
la mayor parte del tedioso trabajo de tanteo y le deja solamente los últimos
ajustes.
Las siguientes sugerencias sirven para facilitar la comprensión de
GridBagLayout tanto a los principiantes en Java como a programadores
expertos, con el fin de acelerar su trabajo de diseño de interfaces:
• Empiece por hacer un boceto en papel.
• Utilice paneles y diseños anidados.
• Utilice el diseñador visual de JBuilder.
• Cree una interfaz de prototipo en XYLayout.
Consulte
• “Creación de una interfaz de prototipo en XYLayout” en la
página 11-15.
También se puede utilizar un solo panel para los tres botones de la parte
inferior, de forma que GridBagLayout controle los demás componentes por
separado, en lugar de anidarlos en paneles. Esto puede funcionar si se
pone especial atención en asignar a todos los componentes de la parte
superior la misma anchura en los dos lados. Sin embargo, GridBagLayout
crea más columnas según el lugar donde termine cada componente, lo que
complica mucho más el diseño y lo hace más difícil de controlar.
Observe que la conversión ha creado seis columnas en esta ocasión. (De
nuevo, se ha cambiado el color de fondo de los componentes
transparentes para que se aprecie fácilmente dónde terminan y demostrar
cómo se calculan las columnas y filas.)
Figura 11.18 Resultados de la conversión sin paneles anidados en las columnas superiores
Figura 11.22 Posibles resultados sin paneles internos y sin la alineación homogénea de
componentes
Nota Dado que el diseño por defecto de jPanel es FlowLayout, esto se puede
aprovechar provisionalmente para añadir los botones al panel. Cuando
se sueltan botones en un panel FlowLayout, el gestor de diseño los centra
a una distancia horizontal regular. Después, puede pasar directamente
a GridLayout sin necesidad de utilizar XYLayout.
5 Cambie la propiedad text de los tres botones para que muestren
Aceptar, Cancelar y Ayuda, por este orden. El gestor de diseño ajusta la
anchura de los botones para alojar el texto. No se preocupe por
cambiarlos de tamaño o posición, porque cuando convierta este panel
en GridLayout todos los botones tendrán el mismo tamaño, altura y
anchura.
¡Enhorabuena! Ya ha terminado con el diseño inicial. Guarde el archivo
antes de continuar.
Panel GridLayout
Cuando se convierte jPanel4 en GridLayout, los botones que contiene se
expanden completamente, de forma que no queda ningún espacio vacío.
Introduzca un pequeño hueco entre los botones. Consiste simplemente en
asignar un valor para la propiedad hgap del propio GridLayout.
Expansión
Seleccione jPanel4 en el árbol de componentes y pulse el botón de puntos
suspensivos para que la propiedad constraints del Inspector abra el editor
de GridBagConstraints. Si se examinan los valores de restricción
asignados a jPanel4, se puede observar que sus restricciones de expansión
horizontales y verticales están activadas. Cuando ocurre esto,
GridBagLayout expande el panel para llenar por completo el área de
visualización, hasta llegar al borde de los encuadres definidos. Si no hay
Encuadres, el panel llena el área de visualización hasta el borde de las
celdas.
Éste no es el comportamiento deseado para este panel GridLayout, ya que lo
que se desea es que los botones del panel tengan el tamaño preferente.
Para conseguirlo, es necesario eliminar las restricciones de Expansión del
panel.
Para eliminar las restricciones de Expansión vertical y horizontal a la vez,
marque Ninguna como valor de restricción en el editor de
GridBagConstraints y pulse Aceptar
Figura 11.37 Restricciones de Expansión
Tamaño adicional
Tamaño adicional (ipadx , ipady) cambia el tamaño real del panel
añadiendo un número específico de píxeles a su anchura o altura mínima.
El tamaño mínimo del panel GridLayout tiene el tamaño suficiente para
mostrar los botones en su tamaño mínimo, además de la anchura
establecida en la propiedad hgap de GridLayout. En el caso de los botones
existe la propiedad margin, que también se incluye en el cálculo de su
tamaño mínimo.
Si desea asignar a los botones y al panel el tamaño mínimo, no es
necesario que haga nada más con la restricción Tamaño adicional. Si desea
que los botones del panel GridLayout tengan un tamaño superior al
mínimo, puede indicar cuántos píxeles se deben añadir. También se
pueden reducir los botones por medio de valores negativos.
Ancla
Para asegurarse de que jPanel4 permanece centrado en su área de
visualización, se debe asignar el valor Center a la restricción Ancla. Dado
que el panel se ha centrado antes de la conversión en GridBagLayout, es
probable que la restricción Ancla ya tenga el valor Center. De todas formas,
se debe abrir el editor de GridBagConstraints para comprobar que la
configuración es la siguiente:
Figura 11.40 Restricciones de Ancla
Encuadres
Los Encuadres definen la zona que no puede ocupar un componente,
entre sus bordes y los de su área de visualización. Se pueden comparar
con los márgenes de una página. El número de píxeles del Encuadre no
varía cuando se cambia el tamaño del contenedor.
Si la Expansión del componente se encuentra activada, llena el área de
visualización hasta los Encuadres. Cuando se cambia el tamaño del
contenedor, el componente se expande hasta alcanzar los Encuadres.
En el caso de este panel GridLayout, dado que se ha desactivado la Expansión
y se ha anclado en el centro del área de visualización, no sirve de nada
añadir Encuadres a los bordes izquierdo y derecho del área de
visualización. Lo único que se debe hacer aquí es comprobar que los
Encuadres izquierdo y derecho tienen el mismo valor (cero).
Sin embargo, es necesario definir los Encuadres superior e inferior para que
quede algo de espacio por encima y debajo de jPanel4. En el editor de
restricciones GridBagConstraints, asígneles un valor de 15 píxeles.
Figura 11.41 Restricciones de los Encuadres
Paneles superiores
Es necesario efectuar algunas tareas de limpieza y ajuste de restricciones
en jPanel2, jPanel3 y sus componentes.
gridwidth y gridheight
Primero, abra el editor de GridBagConstraints para cada uno de los
componentes de jPanel1, y en el área Rejilla, compruebe que cada
componente sólo especifica un valor de 1 celda para los valores de
anchura y altura (gridwidth y gridheight). Corríjalo si no es así.
Nota No ajuste los valores X o Y en el área Rejilla.
Sugerencia Puede modificar a la vez los valores de restricciones para todos los
componentes de un contenedor GridBagLayout. Mantenga pulsada la tecla
Ctrl y seleccione todos los componentes, a continuación, haga clic con el
botón derecho sobre uno de ellos y seleccione Restricciones. Cambie las
que desee y haga clic en Aplicar o Aceptar.
Expansión
A continuación hay que hacer que todos los componentes (con excepción
de los botones) y sus contenedores llenen el área de visualización. Igual
que ocurría con el panel GridLayout, no es conveniente que los botones se
expandan cuando se cambie el tamaño del marco.
De nuevo, y trabajando con un panel a la vez, seleccione cada componente
de Jpanel2 y jPanel3, salvo el botón, y elija Ambas en la restricción
Expansión. Haga clic con el botón derecho en el centro de los componentes
y utilice el menú contextual.
Por último se debe hacer que los paneles llenen el área de visualización
del contenedor GridBagLayout principal. Compruebe que jPanel2 y jPanel3
también tienen el valor Ambas, en la restricción Expansión.
Ancla
Los dos paneles y sus componentes de etiqueta, lista y casilla de selección
tienen el valor Ambas en la restricción Expansión. Dado que los dos
componentes llenan su área de visualización en horizontal y en vertical,
las restricciones Ancla no tienen ningún efecto, porque no hay espacio en el
área de visualización para mover el componente.
Si desea comprobarlo, pruebe a cambiar las restricciones Ancla de estos
componentes, ejecutar el programa y cambiar de tamaño el contenedor.
Comprobará que no ocurre ningún cambio.
Los únicos componentes de estos paneles sobre los que el Ancla puede
tener efecto son los botones, que carecen de Expansión. Dado que no llenan
su área de visualización, se pueden desplazar por ella. Para asegurarse de
que los botones permanecen centrados en su área de visualización, asigne
el valor Center a la restricción Ancla.
Encuadres
Dado que los componentes de estos dos paneles tienen los mismos
Encuadres, asegúrese de que presentan el mismo aspecto. Ninguno de los
componentes necesita Encuadres izquierdo y derecho, ya que los paneles
que los contienen son invisibles y controlan el espaciado del contenedor
principal. Sin embargo, los Encuadres superior e inferior añaden algo de
espacio entre los componentes de los paneles.
Configure los valores de Encuadre de los componentes de jPanel2 y jPanel3
en el área Encuadre del editor de GridBagConstraints de la siguiente
forma:
Por último, para poner algo de espacio entre la parte superior y los lados
de estos dos paneles y el contenedor exterior (jPanel1), asigne los
siguientes valores a la restricción Encuadres de jPanel2 y jPanel3:
Top = 10, Left = 10, Bottom = 0, Right =10
Nota No es necesario definir Encuadres para la parte inferior, ya que los Encuadres
de la parte superior del panel GridLayout se ocupan de este espacio.
ipadx, ipady
Un lugar de este diseño donde la restricción ipadx (tamaño adicional
horizontal) resulta adecuada para controlar el tamaño del botón Añadir a
la clasificación es jPanel3. Si se deja ipadx en cero para los dos botones, el
botón Añadir a la clasificación se muestra en el tamaño mínimo, que no
coincide con el tamaño del botón Eliminar de la clasificación.
Se puede utilizar el tamaño adicional horizontal (ipadx) para aumentar la
anchura del botón y asignarle la misma que al otro.
1 Seleccione el botón Eliminar de la clasificación y abra el editor de
GridBagConstraints. Asegúrese de que los valores de la altura y
anchura de Tamaño adicional son cero y que las restricciones Expansión
tienen todavía el valor Ninguna.
2 A continuación, seleccione el botón Añadir a la clasificación e
introduzca un valor de 33 píxeles para la anchura del Tamaño
adicional. Esta cifra es la utilizada en los botones de la interfaz de
ejemplo. Si en su interfaz tiene un resultado distinto, experimente con
distintos valores hasta dar con uno que funcione.
weightx y weighty
Como se dijo anteriormente, si desea que los componentes de un
contenedor cambien de tamaño según se cambia el del contenedor, tiene
que asignar valores de restricción weightx y/o weighty al menos a un
componente horizontal y verticalmente. Las restricciones de peso
especifican cómo distribuir el espacio extra creado en el contenedor
cuando éste es redimensionado.
Si desea que el tamaño de los componentes pueda aumentar, ha de
establecer las restricciones de Peso y/o Altura, además de las restricciones
de Expansión para una dirección (horizontal o vertical). Por ejemplo, si un
componente tiene la restricción de peso (weightx), pero no la restricción
expansión horizontal, el espacio adicional se asigna al tamaño adicional
entre los bordes izquierdo y derecho del componente y los bordes de la
celda. Aumenta la anchura de la celda sin variar el tamaño del
componente. Si un componente tiene las restricciones de peso (weightx o
weighty) y las restricciones de expansión, el espacio adicional se añade a la
celda y el componente se amplía para ocupar ese incremento de tamaño
en la dirección de la restricción expansión (en este caso, horizontal).
En primer lugar se extrajeron todos los valores de las restricciones de Peso
definidos en la conversión. Éste fue el resultado:
Figura 11.45 Sin restricciones de Peso, antes de redimensionar
Conclusión
¡Enhorabuena! Ya ha completado este tutorial y entiende mejor el
funcionamiento de GridBagLayout y las distintas restricciones
GridBagConstraints.
En este ejercicio se puede apreciar claramente que para crear un diseño
GridBagLayout con el aspecto y el comportamiento deseados es necesario
hacer varias pruebas. JBuilder simplifica este proceso, ya que crea
rápidamente el código de GridBagLayout inicial y el programador sólo tiene
que ajustarlo.
Para ello:
a Seleccione el componente en la superficie de diseño.
b Haga clic con el botón derecho sobre el componente o componentes
y seleccione Constraints, para ver el Editor de GridBagConstraints.
c Haga clic en el valor deseado de la zona Ancla y pulse Aceptar.
De este modo, cambiará el valor de la restricción en el código y el
componente se colocará en su nuevo punto de anclaje, en la superficie
de diseño.
Nota Mover el componente con el ratón actualiza el valor de la restricción Ancla
en el editor GridBagConstraints. De igual forma, cuando se cambia el
valor de la restricción en el editor de GridBagConstraints, el componente
se coloca en su nueva posición en la superficie de diseño.
Expansión
La manera más rápida de especificar las restricciones de expansión en un
componente consiste en utilizar el menú contextual de ese componente en
la superficie de diseño.
1 Haga clic con el botón derecho sobre el componente en la superficie de
diseño para abrir el menú contextual.
2 Realice una de las operaciones siguientes:
• Seleccione Expansión horizontal para establecer el valor
HORIZONTAL.
• Seleccione Expansión vertical para establecer el valor VERTICAL.
• Seleccione Expansión horizontal y Expansión vertical para asignarles el
valor AMBAS (para ello es necesario abrir dos veces el menú
contextual).
• Seleccione Eliminar relleno para establecer el valor ANULADA.
También puede definir la restricción expansión en el Editor de
GridBagConstraints.
1 Haga clic con el botón derecho sobre el componente, en la superficie de
diseño, y seleccione Restricciones; esto mostrará el Editor de
GridBagConstraints.
2 Seleccione el valor de restricción que desea en la zona Expansión y
pulse Aceptar.
Figura 11.48 Restricciones de Expansión en el Editor de GridBagConstraints
Encuadres
La superficie de diseño muestra tiradores azules de redimensionamiento
en los componentes seleccionados de GridBagLayout para señalar la
ubicación y el tamaño de sus encuadres. El tamaño de los Encuadres se
varía arrastrando los tiradores azules con el ratón.
Si el valor de Encuadre es cero, sólo se ve un tirador azul en el lado
correspondiente de la celda, como se muestra a continuación.
Figura 11.49 Encuadres con valor cero en la parte superior e inferior del componente
gridwidth, gridheight
También puede definir los valores de las restricciones gridwidth y
gridheight en el Editor de GridBagConstraints.
1 Haga clic con el botón derecho sobre el componente, en la superficie de
diseño, y seleccione Restricciones; esto mostrará el Editor de
GridBagConstraints.
2 En el área Rejilla, introduzca el valor de gridwidth, en el campo
Anchura, o el de gridheight, en el campo Altura. Indique el número de
celdas que ha de ocupar el componente en la celda o la columna.
Figura 11.52 Restricciones gridwidth y gridheight en el Editor de GridBagConstraints
ipadx, ipady
Es posible especificar el Tamaño adicional (ipadx o ipady) de un
componente haciendo clic en los tiradores negros que aparecen en los
bordes del componente y arrastrándolos con el ratón, para ampliarlo o
reducirlo. Si se asigna al componente un tamaño mayor que el preferente
Figura 11.54 Después: jButton2 gridwidth = 2 celdas, ipadx aumentado hasta 194
Si desea controlar con más precisión los valores de ipadx e ipady, el Editor
de GridBagConstraints le permitirá especificar el número exacto de
píxeles.
1 Haga clic con el botón derecho sobre el componente, en la superficie de
diseño, y seleccione Restricciones; esto mostrará el Editor de
GridBagConstraints.
2 En el área Tamaño adicional, indique el número de píxeles deseado en
los campos Anchura y Altura.
Figura 11.55 Tamaño adicional en el Editor de GridBagConstraints
Nota Los valores negativos hacen que el componente sea menor que su tamaño
recomendado y son perfectamente válidos.
gridx, gridy
Puede emplear el ratón para seleccionar la celda cuya esquina superior
derecha ha de ocupar el componente. Basta hacer clic cerca de la esquina
superior izquierda del componente y arrastrarlo hasta la celda deseada. Si
desplaza componentes que ocupen varias celdas, cerciórese de hacer clic
en la esquina superior izquierda del componente; si no lo hace así,
obtendrá resultados no deseados. En ocasiones, debido a los valores de las
restricciones del componente, cuando éste se desplaza a otra celda
mediante el ratón se alteran otras restricciones (por ejemplo, puede
cambiar el número de celdas ocupado por el componente).
El Editor de GridBagConstraints permite modificar con más precisión
gridx y gridy sin alterar accidentalmente otras restricciones.
1 Haga clic con el botón derecho sobre el componente, en la superficie de
diseño, y seleccione Restricciones; esto mostrará el Editor de
GridBagConstraints.
2 En el área Rejilla, introduzca el número de columnas para el valor X o el
número de filas para el valor Y. Si desea que el valor sea de tipo
RELATIVO, introduzca -1.
Figura 11.56 Rejilla en el Editor de GridBagConstraints
weightx, weighty
Si desea aumentar el tamaño de las celdas, weightx y weighty deben tener
un valor distinto de cero.
Para definir en la superficie de diseño las restricciones de peso de un
componente, haga clic con el botón derecho sobre él y elija Peso horizontal
o Peso vertical. Con ello, se elige el valor 1.0.
Para eliminar las restricciones de peso (asignarles el valor cero), haga clic
con el botón derecho sobre el componente y elija Eliminar Pesos. Esto se
puede hacer en varios componentes de un contenedor: mantenga pulsada
la tecla Mayús mientras selecciona los componentes deseados, haga clic con
el botón derecho del ratón y elija Eliminar Pesos.
Si desea que las restricciones de peso tengan un valor distinto de 0.0 y 1.0,
puede introducir el que desee mediante el Editor de GridBagConstraints.
1 Haga clic con el botón derecho sobre el componente o componentes y
seleccione Restricciones, para ver el Editor de GridBagConstraints.
2 Introduzca un valor comprendido entre 0.0 y 1.0 en los campos X e Y de
la zona Peso y, a continuación, pulse Aceptar.
Figura 11.57 Restricciones de Peso en el Editor de GridBagConstraints
Importante Las restricciones de peso pueden hacer que sea difícil de predecir el
comportamiento en cuanto al tamaño en el diseñador. Por ello, la
definición de estas restricciones debe ser el último paso en el diseño de
GridBagLayout.
Figura 11.58 Todos los componentes tienen restricciones de Peso cero en la misma
dirección
Nota Si, una vez establecidas las restricciones de Peso de los componentes,
existe más espacio del deseado en las celdas, reduzca el tamaño del
marco de la interfaz de usuario hasta conseguir la cantidad de
espacio adicional que desee. Para ello, seleccione el marco this en el
árbol de componentes haga clic en los tiradores negros y arrástrelos
hasta que el marco adquiera el tamaño deseado.
Figura 11.66 Desplazamiento del jButton2 al mismo tamaño o a una celda mayor
Observe que, en este caso, el desplazamiento del jButton2 a una celda vacía
bajo jButton1 también provoca que se elimine una columna de la rejilla, ya
que ningún componente la necesita. Los valores de las restricciones para
los demás componentes se modifican de forma automática para adaptarse
a este cambio (por ejemplo, gridwidth cambia de 2 a 1 en el caso de los
componentes que ocupaban antes las columnas 1 y 2).
Nota La primera columna en la rejilla es la número 0.
Este es un buen ejemplo, no obstante, de que modificar un diseño después
de que el contenedor se ha convertido a GridBagLayout puede ser engañoso,
ya que pueden producirse resultados inesperados.
Si el componente que está desplazando es mayor que la celda a la que
desea trasladarlo, GridBagLayout coloca el componente en dos celdas y, a
continuación, aplica las restricciones de expansión y de Encuadre.
Por ejemplo, si la restricción de expansión para jButton3 está configurada en
HORIZONTAL y la arrastra a la celda sobre jButton2, que es más pequeña
que el tamaño del botón, GridBagLayout hace que el botón ocupe las
columnas 1 y 2.
Figura 11.67 Antes de desplazar el jButton3, con la restricción de Expansión configurada en
HORIZONTAL
Figura 11.68 Desplazamiento del jButton3 a una celda más pequeña sobre el jButton2
Figura 11.77 Después del arrastre, jButton2 tiene gridheight de valor 2 con Encuadres sin
cambios
Figura 11.80 Después de arrastrar, las celdas son mayores, el Tamaño adicional ha
aumentado
Adición de componentes
Al añadir un componente nuevo al contenedor GridBagLayout, el lugar
donde se pulsa para soltar el componente determina las columnas o filas
que se crean para adaptarse a él.
Nota Las restricciones de Expansión y de Encuadre para un componente nuevo
que se añade a GridBagLayout tienen un valor None.
• Para crear una fila sobre un componente, haga clic en la parte superior
de éste.
• Para crear una fila bajo un componente, haga clic en la parte inferior de
éste.
• Para crear una columna a la izquierda de un componente, haga clic a la
izquierda de éste.
• Para crear una columna a la derecha de un componente, haga clic a la
derecha de éste.
Después de seleccionar un componente en la paleta de componentes,
vigile la barra de estado mientras mueve el ratón sobre la rejilla para ver
qué sucede. La barra de estado indica la columna y la fila que ocupará el
componente (posiciones gridx y gridy), y si se va a crear una fila o una
columna para alojarlo.
Los ejemplos siguientes muestran la adición de un nuevo componente en
cada lado de jButton1:
Figura 11.81 Si hace clic sobre jButton1, se crea una fila para jButton3 sobre jButton1
Figura 11.82 Si hace clic a la izquierda de jButton1, se crea una columna para jButton3 a la
izquierda de jButton1
Figura 11.83 Si hace clic debajo de jButton1, se crea una fila para jButton3 debajo de jButton1
Figura 11.84 Si hace clic a la derecha de jButton1, se crea una columna para jButton3 a la
derecha de jButton1
Sugerencias diversas
Vuelva a XYLayout si debe hacer ajustes significativos
Si no ha obtenido el resultado deseado en la conversión, o necesita añadir
componentes, vuelva a XYLayout, efectúe los cambios y vuelva a convertir
el diseño en GridBagLayout. Esto puede ser más rápido y fácil que intentar
añadir componentes en GridBagLayout. Es mejor dejar que JBuilder realice
la tarea de calcular y asignar las restricciones.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//import com.borland.jbcl.layout.*;
//Construir el marco
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
JLabel jLabel1 = new JLabel();
JList jList1 = new JList();
public Marco1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Inicialización de componente
GridBagConstraints.WEST, GridBagConstraints.BOTH,
new Insets(0, 0, 2, 0), 0, 4));
jPanel2.add(jList1, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0,
GridBagConstraints.WEST, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 128, 128));
jPanel2.add(jButton1, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(7, 0, 0, 0), 0, 0));
jPanel2.add(jCheckBox1, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.BOTH,
new Insets(6, 0, 0, 0), 0, 0));
jPanel1.add(jPanel3, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(10, 10, 0,10), 0, 0));
jPanel3.add(jLabel2, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.BOTH,
new Insets(0, 0, 2, 0), 0, 4));
jPanel3.add(jList2, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 128, 128));
jPanel3.add(jButton2, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(7, 0, 0, 0), 32, 0));
jPanel3.add(jCheckBox2, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.BOTH,
new Insets(6, 0, 0, 0), 0, 0));
jPanel1.add(jPanel4, new GridBagConstraints(0, 1, 2, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(12, 59, 12, 59), 0, 0));
jPanel4.add(jButton5, null);
jPanel4.add(jButton3, null);
jPanel4.add(jButton4, null);
}
//Sobreescrito para salir de System Close
GridBagConstraints
Ancla
Descripción:
Cuando el componente sea más pequeño que el área en que se visualiza,
utilice la restricción ancla para indicar al gestor de diseño dónde debe
situar el componente dentro del área.
La restricción ancla sólo afecta al componente dentro de su propia área de
visualización, en función de la restricción expansión del componente. Por
ejemplo, si el valor de la restricción expansión de un componente es
GridBagConstraints.BOTH (AMBAS, es decir que toda el área de
visualización está ocupada, horizontal y verticalmente), la restricción
ancla no tiene efecto alguno porque el componente ocupa la totalidad del
área disponible. Para que la restricción ancla tenga efecto, asigne a la
restricción expansión el valor GridBagConstraints.NONE (ANULADA),
GridBagConstraints.HORIZONTAL (HORIZONTAL) o
GridBagConstraints.VERTICAL
Los valores válidos son:
GridBagConstraints.CENTER
GridBagConstraints.NORTH
GridBagConstraints.NORTHEAST
GridBagConstraints.EAST
GridBagConstraints.SOUTHEAST
GridBagConstraints.SOUTH
GridBagConstraints.SOUTHWEST
GridBagConstraints.WEST
GridBagConstraints.NORTHWEST
El valor por defecto es:
GridBagConstraints.CENTER
Expansión
Descripción:
Si el área de visualización en la que se inserta un componente es superior a
este último, la restricción expansión le permite indicar al gestor de diseño
las zonas del área que debe asignar al componente.
En el caso de la restricción ancla, las restricciones de expansión solamente
afectan al componente dentro de su área de visualización. Las
restricciones de expansión indican al gestor de diseño que debe expandir el
componente para que ocupe el área completa que se le da.
Encuadres
Descripción:
Utilice encuadres para especificar el espacio externo (márgenes) en píxeles,
que media entre el componente y los bordes de su área de visualización.
La propiedad encuadre establece un espacio constante entre el borde del
componente y el borde de la celda que lo contiene. Por lo tanto, encuadre
actúa como "frontera" del componente, con el objeto de mantenerlo
alejado de los bordes de la celda. Por ejemplo, si altera la anchura de un
componente ampliando el encuadre a la izquierda y a la derecha y supera
los límites de la celda, ésta se expande para acomodar tanto al
componente como a sus encuadres. Debido a ello, las restricciones expansión
y tamaño adicional nunca restan espacio a los encuadres.
Los valores válidos son:
insets = new Insets(n,n,n,n)
Superior, Izquierdo, Inferior y Derecho (donde cada uno de los
parámetros representa el número de píxeles existente entre el área de
visualización y el correspondiente borde de la celda).
Los valores por defecto son:
insets = new Insets(0,0,0,0)
gridwidth, gridheight
Descripción:
Utilice las restricciones gridwidth y gridheight para establecer el número de
celdas de una fila (gridwidth) o columna (gridheight) que utiliza el
ipadx, ipady
Descripción:
Utilice ipadx e ipady para especificar el número de píxeles con los que se
quiere incrementar el tamaño mínimo del componente, es decir, el tamaño
adicional que se le quiere dar. Por ejemplo, la anchura del componente
será, al menos, la anchura mínima más ipadx en píxeles. El código sólo lo
añade una vez y lo divide por igual entre ambos lados del componente.
De forma parecida, la altura del componente será de al menos la altura
mínima más ipady en píxeles.
Estas restricciones indican el tamaño adicional de un componente:
• ipadx especifica el número de píxeles que debe añadirse a la anchura
mínima del componente.
• ipady especifica el número de píxeles que debe añadirse a la altura
mínima del componente.
Ejemplo:
Cuando se añaden a un componente que tiene un tamaño mínimo
recomendado de 30 píxeles de ancho y 20 píxeles de alto:
• Si ipadx= 4, el componente tiene una anchura de 34 píxeles.
• Si ipady= 2, el componente tiene una altura de 22 píxeles.
Los valores válidos son:
ipadx=nn, ipadx=nn
El valor por defecto es:
ipadx, ipady
gridx, gridy
Descripción:
Utilice estas restricciones para especificar la posición de la celda donde se
encuentra la esquina superior izquierda del componente. Por ejemplo,
gridx=0 es la primera columna de la izquierda, mientras que gridy=0 es la
primera fila de la parte superior. Por lo tanto, un componente que tenga
las restricciones gridx=0 y gridy=0 se situará en la primera celda de la rejilla
(arriba a la izquierda).
GridBagConstraints.RELATIVE especifica que el componente debe situarse de
forma relativa al componente anterior, como se explica a continuación:
• Cuando se utiliza con gridx, indica que el componente debe situarse
inmediatamente a la derecha del último componente añadido.
• Cuando se utiliza con gridy, indica que el componente debe situarse
inmediatamente debajo del último componente añadido.
Los valores válidos son:
gridx=nn, gridy=nn
GridBagConstraints.RELATIVE (-1)
El valor por defecto es:
gridx=1, gridy=1
weightx, weighty
Descripción:
Las restricciones de peso permiten establecer cómo se distribuye el
espacio adicional de los contenedores GridBagLayout, horizontal (weightx) y
verticalmente (weighty), cuando se redimensionan. Los pesos determinan
qué parte del espacio adicional deben obtener las celdas y los
componentes cuando se aumenta el tamaño del contenedor más allá de su
tamaño por defecto.
Los valores de los pesos son de tipo double y se especifican con un número
de 0.0 a 1.0, ambos inclusive. Un cero significa que el componente no debe
obtener espacio adicional, mientras que 1.0 significa que el componente
debe obtener la totalidad del espacio disponible.
• El peso de una fila es el resultado de sumar los valores máximos de
weightx de todos los componentes de la fila.
• El peso de una columna es el resultado de sumar los valores máximos
de weighty de todos los componentes de la columna.
Importante Si desea aumentar el tamaño de las celdas, weightx y weighty deben tener
un valor distinto de cero.
Los valores válidos son:
weightx=n.n, weighty=n.n
El valor por defecto es:
weightx=0.0, weighty=0.0
Figura 11.88 Sólo restricciones de Peso (weightx) horizontales en los cuatro componentes
Figura 11.89 Sólo restricciones de Peso (weighty) verticales en los cuatro componentes.
Consulte
• “Requisitos para poder diseñar visualmente una clase” en la página 1-7.
VisualAge
No es necesario llevar a cabo modificaciones en el caso de archivos
VisualAge. Las herramientas de diseño visual de JBuilder son capaces de
reconocer estos archivos si cumplen los requisitos de un archivo diseñable
visualmente. Utilice el Asistente para Proyecto para código existente con
el fin de crear un proyecto que importe el árbol de código fuente. El
asistente para Proyecto para código existente es una característica de
JBuilder SE y Enterprise.
Consulte
• “Creación de proyectos a partir de archivos anteriores” en Creación de
aplicaciones con JBuilder
Forte
Los archivos Java creados en Forte se han de modificar de la siguiente
manera:
1 Cree un método jbInit().
2 Ponga el código de inicialización de la interfaz de usuario en el método
jbInit(). Esto incluye código que añade componentes al contenedor y
que configura el tratamiento de sucesos, pero no el código que ejecuta
ese tratamiento.
3 Ponga todas las declaraciones de componentes fuera del método
jbInit() al nivel de clase.
VisualCafé
El asistente para la importación de proyectos de VisualCafé automatiza el
proceso de conversión a JBuilder de proyectos creados en VisualCafé. Este
asistente se encuentra en la ficha Proyecto de la galería de objetos.
Para importar un proyecto desde VisualCafé:
1 Seleccione Archivo|Nuevo.
Se abre la galería de objetos.
2 Seleccione la ficha Proyecto.
3 Seleccione el icono Importar proyecto de VisualCafé.
4 Para abrir el asistente, haga doble clic en el icono, pulse Aceptar o pulse
la tecla Intro.
Consulte
• El tema el “Asistente para importar proyectos VisualCafé” en la ayuda
en línea. Pulse el botón Ayuda del asistente o elija Ayuda|Temas de
ayuda, abra la ficha Buscar y escriba visualcafe.
Índice I-1
código paleta de componentes 2-4
generado por los sucesos 4-3, 4-6 Panel 1-9
componentes preferredSize 8-6
agrupar 11-11 preinstalados 7-1
ajenos a la interfaz, relacionados con datos 2-8 presentar nombres de clases 3-6
alinear 8-15 propiedades
añadir alignmentX 8-6
a contenedores anidados 5-2 alignmentY 8-6
al botón Selección de Beans 2-5 que no son de la interfaz de usuario 2-9
al diseño 3-3 redimensionar 5-3
componentes no visuales a la interfaz 5-6 serialización 7-7
asignar valores a propiedades 3-10 Swing
AWT comparación 1-11
comparación 1-11 trasladar 5-3
Swing, dbSwing 1-11 visuales 2-7, 2-8
base de datos 5-6, 5-9 Window 1-9
buscar en la superficie de diseño 2-3 comprobar
cambiar el nombre en el árbol 3-5 interfaces de usuario 5-13
contenedores 1-9 conjunto de recursos
para agrupación 5-5 almacenar valores de propiedad String 7-11
convertir a GridBagLayout 11-60 contenedores
cortar, copiar y pegar componentes 3-4 colocar la interfaz de usuario en la pantalla 8-10
DataExpress 2-8 componentes 5-5
dbSwing descripción general 1-9
comparación 1-11 dimensionar
de base de datos automáticamente 8-8
añadir a la interfaz 5-6, 5-9 explícitamente 8-9
de menú 2-8, 6-1 GridBagLayout
menú emergente 2-9 añadir componentes 8-33
de terceros 7-2 área de visualización 8-27
definición de propiedades compartidas 3-10 diseñar visualmente 8-31
del cuadro de diálogo ejemplo 8-47
cuadros de diálogo emergentes 2-9 modificar el código fuente para su
descripción general 1-8 diseño 8-31
Dialog 1-9 visualizar la rejilla 8-35
disponer en rejillas 8-23, 8-27 GridLayout 8-23
eliminar en el diseño de interfaces de propiedad preferredSize 8-9
usuario 3-5 seleccionar diseño 8-1
Frame 1-9 tamaño de pantalla de la interfaz 8-7
gestionar en el árbol de componentes 3-1 Window, Frame, Dialog, Panel 1-9
Inspector 2-6 controles
interfaz de usuario 2-7 componentes
agrupar 5-5 de interfaz de usuario 2-7
añadir a paleta de componentes 7-1 de menú 2-8
seleccionar 5-2 visuales 2-7, 2-8
manipular en diseños de interfaces de convenciones de la documentación 1-3, 1-4
usuario 3-4, 5-3 cortar, copiar y pegar
maximumSize 8-6 componentes JavaBean 3-4
minimumSize 8-6 crear
modificar restricciones de diseño 8-6 interfaces de usuario 8-54
modificar y desplazar en el árbol de menús 6-1, 6-4
componentes 2-6 añadir elementos 6-5
no visuales desactivar elementos 6-6
añadir a la interfaz 5-6, 5-9 diseñador
Índice I-3
la superficie de diseño 2-3
diseño visual
F
vista jerárquica 2-6 FlowLayout 8-19
diseños alinear
añadir personalizados 8-12 componentes 8-19
anidados 8-55 espacio 8-20
BorderLayout 8-16 orden de componentes 8-20
BoxLayout2 8-22 Forte
cambiar 8-3, 8-4 migrar archivos a JBuilder A-2
CardLayout 8-24 fuentes
columnares 8-20 Convenciones empleadas en la documentación
combinar columnas y filas 8-22 de JBuilder 1-3
diseño por defecto 8-1
ejemplos G
de las propiedades 8-4
de restricciones 8-4 gestores de diseño 8-1
en filas 8-19 añadir personalizados 8-12
FlowLayout 8-19 descripción general 8-1
GridBagLayout 8-27 diseño por defecto 8-1
GridLayout 8-23 no asignados 8-16
IU prototipo 8-54 seleccionar en el Inspector 8-5
null 8-16 getAlignmentX() 8-6
OverlayLayout 8-26 getAlignmentY() 8-6
OverlayLayout2 8-26 getMaximumSize() 8-6
PaneLayout 8-50 getMinimumSize() 8-6
portables 8-9 getPreferredSize() 8-6
realizar un prototipo de diseño de interfaz 8-54 GridBagConstraints 8-29, 11-66
rejillas de datos 8-23 ancla 8-36
seleccionar en el Inspector 8-1 definición de las restricciones 8-36
suministrados con JBuilder 8-13 encuadres 8-40
tutorial 10-1 escribir el código fuente a mano 8-30
VerticalFlowLayout 8-20 expansión 8-37
XYLayout 8-9, 8-14 gridheight 8-38
gridwidth 8-38
gridx 8-39
E gridy 8-39
editores ipadx 8-41
de GridBagConstraints 8-34 ipady 8-41
de JavaBeans modificación 8-35
Inspector 2-6 weightx 8-43
de propiedades weighty 8-43
GridBagConstraints 8-34 GridBagLayout 8-27
personalizadores 7-10 agrupar componentes 11-11
ejemplos conversión 8-32
llamar a un cuadro de diálogo desde el definición 11-3
menú 4-8 descripción general 11-2
llamar a un cuadro de diálogo desde un ejemplo 11-3
elemento de menú 6-11 menú contextual de los componentes 8-35
espacio simplificado 11-8
FlowLayout 8-20 sugerencias y técnicas 11-42
VerticalFlowLayout 8-21 tutorial 11-1
exponer propiedades en el Inspector 3-8 ventajas 11-8
GridLayout 8-23
columnas y filas 8-23
Índice I-5
O definir 3-6, 3-10
exponer como variable de clase 3-8
objeto 'this' modificación 3-6
serialización 7-8 modificar diseños 8-3
OverlayLayout 8-26 resaltar valores en el Inspector 3-8
pulsaciones de teclas
P teclas de método abreviado del diseñador 2-9
pack() 8-7
dimensionar contenedores
R
automáticamente 8-8 redimensionar
utilizar en código fuente 8-11 componentes 5-3
paleta de componentes 2-4 rejilla
añadir presentar en el diseñador 11-13
componentes 7-2 resaltar valores de las propiedades 3-8
páginas 7-6 restricciones
eliminar BorderLayout 8-16
componentes 7-6 CardLayout 8-24
fichas 7-6 configuración en el diseñador UI 11-42
gestionar 7-1 de ancla 8-36, 11-42, 11-66
imágenes de botón 7-4 de diseños
reorganizar 7-7 cambiar en GridBagLayout 8-35
Selección de Beans (botón) 2-5 configurar con el Editor de
PaneLayout 8-50 GridBagConstraints 8-34
añadir componentes 8-51 ejemplos 8-4
crear en el diseñador de interfaces de rejillas 8-29
usuario 8-51 de expansión 8-37, 11-66
ubicación y tamaño del panel 8-53 configuración en el diseñador 11-43
variables de GridBagLayout
PaneConstraint 8-50 modificar mediante ratón 11-51
paneles de gridx 8-39
añadir al contenedor CardLayout 8-24 de ipadx 8-41
anidación 8-55, 11-11 de ipady 8-41
cambiar en CardLayout 8-24 de los Encuadres 8-40, 11-67
de estructura configuración en el diseñador 11-43
árbol de componentes 3-1 de peso 11-70
y diseños anidados 11-11 configuración en el diseñador 11-48
tutorial 10-1 ejemplos 11-70
personalizadores 7-10 weightx 8-43
personalizar weighty 8-43
añadir fichas a paleta de componentes 7-6 de rejilla
plataformas gridwidth, gridheight 11-67
convenciones 1-4 gridx, gridy 11-69
portabilidad de tamaño adicional
dimensionar contenedores 8-10 configuración en el diseñador 11-45
preferredSize 8-6, 8-9 ipadx, ipady 11-45, 11-68
propiedades definir BorderLayout 8-17
alignmentX 8-6 FlowLayout 8-19
de los diseños GridBagConstraints 11-66
cambiar 8-5 GridBagLayout 8-27, 8-29, 8-34, 8-35, 8-36
ejemplos 8-4 gridheight 8-27, 8-38
definición GridLayout 8-23
en el Inspector 3-8, 3-9 gridwidth 8-27, 8-38
en varios componentes 3-10 gridwidth, gridheight 11-67
Índice I-7
I-8 Diseño de aplicaciones con JBuilder