Paneles y Distribución
¿Cuál era el paso 2?
Seleccionar un controlador de distribución es el segundo paso en la creacción del panel Welcome. La clase DiveLog es el punto de entrada para la aplicación Dive Log y sólo contiene el método main que ésta aplicación necesita. Desde aquí, todas las otras clases que creamos son inicializadas, por eso no necesitamos otros métodos main.
Sin embargo, si que es necesario un controlador de distribución para cada clase.
Layout Managers
Antes de construir y añadir componentes a un contenedor, es bueno tener alguna idea de cómo queremos que se sitúen los componentes. Los objetos del mundo real, como los muebles de tu casa, están ordenados en un conjunto de localizaciones específicas, de acuerdo a los objetos que deben estar juntos y aquellos que deben estar separados. Por ejemplo, podría no tener sentido poner nuestro sillón al lado del televisor, pero si que tendría sentido colocar el sillón en frente del televisor con algún espacio entre los dos objetos.
Los objetos de aplicación también necesitan ser ordenados. Los controladores de distribución son objetos especiales que posicionan los objetos que creamos y añadimos al contenedor. Todo contenedor, como JFrame y Jpanel tienen un controlador de distribución asociado con ellos.
El conjunto primario de herramientas Swing consta de las clases de distribución proporcionadas por el AWT, que tiene cinco controladores de distribución:
- FlowLayout
- GridLayout
- BorderLayout
- CardLayout
- GridBagLayout
Además, Swing tiene varios controladores de distribución, como box, scroll pane, overlay, y viewport. Decidir que controlador usar depende de cómo queremos que se ordenen los componentes dentro del contenedor.
El control distribución más simple es FlowLayout porque coloca los componentes de izquierda a derecha. Hay usos límitados para esta distribución. Si tenemos sólo uno o dos componentes en nuestra aplicación, FlowLayout podría ser suficiente.
BorderLayout
El controlador BoderLayout es un controlador de distribución fácil-de-usar. Es popular porque podemos hacer mucho o poco con él.
Se podrían añadir hasta cinco componentes al controlador BorderLayout y ordenarlos en cualquiera de los cuatro bordes o en el centro. Este patrón es similar a las localizaciones geográficas ordenadas por Norte, Sur, Este , Oeste y Centro, de la imagen inferior:
Si la aplicación es redimensionada, los componentes también se redimensionan de foma conveniente, y el orden es preservado y mantenido por el controlador de distribución. Cada región se amplía para llenar el contenedor. Observa cómo las regiones North y South se extienden hastas los bordes exteriores. También observa que las áreas West, Center, y East no se extienden hasta los bordes superior e inferior.
Sólo se pueden añadir cinco componentes a un borderLayout, uno en cada región. Podemos evitar esta limitación añadiendo otro contenedor, como un JPanel, con su propia distribución dentro de ese contenedor. Por ejemplo, podríamos añadir un JPanel al panel South, y este nuevo JPanel también podría usar BorderLayout. Entonces podríamos añadir otros cinco componentes más al panel South. Podemos hacer esto indefinidamente y hacer distribuciones más complejas con diferentes controladores de distribución. Veremos un ejemplo de esta técnica más adelante.
Contrariamente a situar distribuciones dentro de distribuciones, no tenemos porque hacer uso de las cinco regiones del controlador BorderLayout.
Igual que la ilustración de arriba, la clase Welcome usa BorderLayout con sólo tres de sus regiones ocupadas por objetos.
Para empezar, necesitamos configurar el constructor de la clase, y llamar al método para usar BorderLayout para este contenedor Welcome.
| Sigue estos pasos... |
- Abre el fichero Welcome.java en tu editor de texto.
- Crea un constructor para esta clase:
public Welcome()
{ // Opens constructor
} // Closes constructor
- Inmediatamente despés del corchete abierto del constructor, llama al método setlayout:
setLayout(new BorderLayout());
- Además, selecciona el color de fondo de este panel:
setBackground(Color.white);
- Graba el fichero.
Nuestro código se debería parecer al del fichero Welcome.java.
|
El método setLayout viene de la clase Container y se hereda haciendo de esta clase un JPanel. El método selecciona la distribución para el contenedor inicializando un objeto layout que especificamos como argumento. En este caso, inicializamos un objeto de la clase BorderLayout, que hace que el cotenedor Welcome sea manejado por BorderLayout. Las instrucciones para añadir objetos a este contenedor en las localizaciones de BorderLayout se cubre más adelante.
Hasta este punto, ya hemos creado los componentes que posteriormente serán añadidos al panel y ordenados por el controlador de distibución.
Declaramos tres variables al principio de la clase Welcome. Dentro del constructor, creamos los objetos asignados a estas variables:
- Una imagen de bandera de buceo con un título.
- Un área de texto con un borde con título
- Una imagen de un buceador y un pez
| ¿Qué clases deberíamos inicializar para lo objetos image, text, y text area ? |
|
|