Hacerlo sin Controlador de Distribución (Posicionamiento Absoluto)

Aunque es posible hacerlo sin un controlador de disposición, se debería utilizar un controlador disposición siempre que sea posible. Los controladores de disposición hacen más sencillo el redimensionado de un contenedor y se ajustan al 'Aspecto y Comportamiendo' dependientes de la plataforma y los diferentes tamaños de las fuentes. También pueden ser reutilizados fácilmente por otros contenedores y otros programas.

Si un contenedor personalizado no será reutilizado ni redimensionado, y controla normalmente los factores dependientes del sistema como el tamaño de las fuentes y la apariencia de los componentes (implementando sus propios controles si fuera necesario), entonces, el posicionamiento absoluto podría tener sentido.

Los Desktop panes, que contienen frames internos, están en esta categoría. El tamaño y posición de los frames internos no depende directamente de los tamaño del desktop pane. El programador determina el tamaño y situación iniciales del frame interno dentro del desktop pane, y luego el usuario puede mover o redimensionar los marcos. En esta situación un controladores de distribución es innecesario.

Otra situación en que el posicionamiento absoluto podría tener sentido es un contenedor personalizado que realice cálculos de tamaño y posición que son particulares del contenedor y que quizás requieran un conocimiento especializado del estado del contenedor. Esta es la situación de los split panes.

Aquí tenemos un applet que muestra una ventana cuyo panel de contenido usa posicionamiento absoluto

Pulsa sobre la imagen para ejecutar el applet.
Esta es una imagen del GUI del Applet. Para ejecutarlo pulsa sobre ella y el applet aparecerá en una nueva ventana del navegador.

Abajo podemos ver las declaraciones de las variables y la implementación del constructor de la clase window. Aquí puedes ver el programa completo. El programa se puede ejecutar como un applet, con la ayuda de AppletButton, o como una aplicación.

public class NoneWindow extends JFrame {
    . . .
    private boolean laidOut = false;
    private JButton b1, b2, b3;

    public NoneWindow() {
        Container contentPane = getContentPane();
        contentPane.setLayout(null);

        b1 = new JButton("one");
        contentPane.add(b1);
        b2 = new JButton("two");
        contentPane.add(b2);
        b3 = new JButton("three");
        contentPane.add(b3);

        Insets insets = contentPane.getInsets();
        b1.setBounds(25 + insets.left, 5 + insets.top, 75, 20);
        b2.setBounds(55 + insets.left, 35 + insets.top, 75, 20);
        b3.setBounds(150 + insets.left, 15 + insets.top, 75, 30);
        . . .
    }
    . . .
}

Ozito