##
CREAR UN LAYOUT

Se puede crear un Layout personalizado en base a la interface LayoutManager. Hay que redefinir los cinco métodos que utiliza este interface, lo cual puede no resultar sencillo, así que en lo posible se deben utilizar los métodos de colocación de componentes que proporciona AWT, fundamentalmente en el momento en que parezca que ninguno de los Layouts que hemos visto satisface nuestras exigencias, deberíamos volver a comprobar que el GridBagLayout, que es el más flexible, de verdad no cumple nuestros requerimientos.

No obstante, vamos a implementar un layout propio, MiLayout.java, para poder colocar los Componentes en posiciones absolutas del panel que contenga a este layout. Derivamos nuestro nuevo layout de LayoutManager y redefinimos los cinco métodos de la clase para que podamos posicionar los Componentes.

    import java.awt.*;

    public class MiLayout implements LayoutManager {

        public MiLayout() {
            }

        public void addLayoutComponent( String name,Component comp ) {
            }

        public void removeLayoutComponent( Component comp ) {
            }

        public Dimension preferredLayoutSize( Container parent ) {
            Insets insets = parent.insets();
            int numero = parent.countComponents();
            int ancho = 0;
            int alto = 0;

            for( int i=0; i < numero; i++ )
                {
                Component comp = parent.getComponent( i );
                Dimension d = comp.preferredSize();
                Point p = comp.location();
                if( ( p.x + d.width ) > ancho )
                    ancho = p.x + d.width;
                if( ( p.y + d.height ) > alto )
                    alto = p.y + d.height;
                }
            return new Dimension( insets.left + insets.right + ancho,
                insets.top + insets.bottom + alto );
            }

        public Dimension minimumLayoutSize( Container parent ) {
            Insets insets = parent.insets();
            int numero = parent.countComponents();
            int ancho = 0;
            int alto = 0;

            for( int i=0; i < numero; i++ )
                {
                Component comp = parent.getComponent( i );
                Dimension d = comp.preferredSize();
                Point p = comp.location();
                if( ( p.x + d.width ) > ancho )
                    ancho = p.x + d.width;
                if( ( p.y + d.height ) > alto )
                    alto = p.y + d.height;
                }
            return new Dimension( insets.left + insets.right + ancho,
                insets.top + insets.bottom + alto );
            }

        public void layoutContainer( Container parent ) {
            int numero = parent.countComponents();

            for( int i=0; i < numero; i++ )
                {
                Component comp = parent.getComponent( i );
                Dimension d = comp.preferredSize();
                comp.resize( d.width,d.height );
                }
            }
        }

Y ahora vamos a ver un ejemplo en que utilicemos nuestro Layout. Posicionaremos tres botones en el panel y un campo de texto con una etiqueta precediéndolo. La apriencia que tendrá en pantalla será la que se muestra en la figura:

    import java.awt.*;
    import java.applet.Applet;

    public class AwtLibre extends Applet {
        Button boton1,boton2,boton3;
        Label etiqueta;
        TextField texto;

        public void init() {
            setLayout( new MiLayout() );

            boton1 = new Button( "Aceptar" );
            boton2 = new Button( "Abrir" );
            boton3 = new Button( "Cerrar" );
            etiqueta = new Label( "Texto" );
            texto = new TextField( "",20 );

            add( boton1 );
            add( boton2 );
            add( boton3 );
            add( etiqueta );
            add( texto );

            boton1.move( 0,10 );
            boton2.move( 70,10 );
            boton3.move( 30,40 );
            etiqueta.move( 75,70 );
            texto.move( 120,70 );
            }
        }

Este código, AwtLibre.java, es el que genera la imagen anterior creando un applet que utiliza nuestro recién creado layout.

|  | ##### [Anterior] [Indice] [Siguiente]