Gestores de ditribución (layouts) en java

Gestores de ditribución (layouts) en java

Para organizar los componentes de una interfaz de usuario, debemos utilizar un conjunto de clases llamadas gestores de distribución.
Los gestores ayudan a adaptar los componentes que se desean incorporar a un contenedor.
A continuación echaremos un vistazo a los principales gestores de distribución los veremos a continuación.

BorderLayout

Es el gestor de distribución por defecto del objeto contentPane para los marcos y ventanas. NO CONFUNDIR CON LOS PANELES JPanel

Divide un contenedor en cinco secciones: norte, sur, este, oeste y centro. Cada región solo puede contener un componente y es identificada por la constante correspondiente:
NORTH, SOUTH, EAST, WEST, CENTER.

Si el constructor no lleva argumentos, no existen huecos entre los componentes. Si lleva argumentos, éstos se corresponderían con los huecos horizontales y verticales respectivamente.

Los componentes se añaden mediante el método add que tiene como primer argumento el componente a añadir y como segundo la constante que indica a qué parte asignar los componentes.

BorderLayout

FlowLayout

Dispone los componentes en filas de izquierda a derecha, de forma similar a las líneas de texto en un párrafo. ES EL GESTOR DE DITRIBUCIÓN POR DEFECTO DE LA CLASE JPanel.
Por defecto, los componentes de cada fila se centrarán cuando se use el constructor FlowLayout() sin argumentos. Puede indicarse la alineación por medio del constructor mediante las variables de clase:

    • FlowLayout.LEFT
    • FlowLayout.RIGHT
    • FlowLayout.CENTER

También se puede cambiar mediante un constructor el espacio vertical y horizontal entre componentes (5px por defecto).

Muy útil para realizar un menú.

Veamos dos ejemplos partiendo del código visto con anterioridad. El primer caso no utilizaremos JPanel por lo tendremos que cambiar el layout por defecto de contentPane.

FlowLayout

La otra opción sería meter un panel (JPanel) que por defecto ya presenta y layout de tipo FlowLayout.

FlowLayout con Jpanel

BoxLayout

Para los componentes que van a los lados necesitamos algo similar al FlowLayout, pero que lo haga en vertical.

El BoxLayout es algo más elaborado que el FlowLayout en el sentido de que permite tanto orientación horizontal como vertical. Sin embargo, aunque también se puede hacer, no es tan evidente el hacer que los componentes se peguen arriba, abajo, a la izquierda o a la derecha.

El código para nuestra barra de botones vertical en el lado izquierdo quedaría así.

BoxLayout

El constructor del BoxLayout es más complejo que el del FlowLayout. Debemos pasarle el contenedor al que lo estamos añadiendo, es decir, el parámetro panel (en el ejemplo). También debemos pasarle si queremos orientación vertical BoxLayout.Y_AXIX u orientación horizontal BoxLayout.X_AXIS.

GridLayout

Ordena componentes en una cuadrícula de filas y columnas.

Si el constructor no recibe ningún argumento, se utiliza una columna por componente, en una sola fila.

Si el constructor recibe dos argumentos, el primero indicará el número de filas y el segundo el de columnas.

Existe la posibilidad de utilizar otro constructor en el que además de filas y columnas se indica la separación entre ellas.

GridLayout

Posicionamiento absoluto

Cuando se colocan los componentes en contenedores utilizando los controladores de posicionamiento, se compensarán automáticamente las diferencias que se puedan encontrar entre resoluciones de pantalla de distintas plataformas.

Los componentes también se pueden colocar utilizando posicionamiento absoluto, es decir, indicando la posición y el tamaño de un componente en coordenadas absolutas indicadas en pixeles.

En este caso, es más difícil conseguir que la apariencia de la interfaz de usuario sea uniforme en cualquier plataforma.

El posicionamiento absoluto se realiza con el método setBounds de la clase Component, el cual tiene los siguientes constructores:

    • setBounds(int x, int y, int width, int height), siendo x e y las coordenadas con respecto a la parte superior izquierda del contenedor.
    • setBounds(Rectangle r)

También se puede realizar el posicionamiento con setLocation (int x, int y). En este caso, puede ser necesario utilizar setSize (int ancho,int alto) para fijar el tamaño.

En cualquier caso, será necesario utilizar setLayout(null) para eliminar el gestor de distribución por defecto.

Posicionamiento absoluto

By Xurxo González Tenreiro

Informático de mente inquieta con grandes ideas en el ámbito de la progamación. Especialista en el desarrollo web e interesado en el análisis SEO. Me encanta mi labor en el ámbito de la divulgación por lo cual he ampliado mis horizontes al ámbito de la educación y formación en el desarrollo de aplicaciones web. También como gestor de contenidos web soy muy puntilloso con la divulgación y la elaboración de publicaciones en la red.

2 comments

  1. The next time I read a blog, Hopefully it does not disappoint me just as much as this particular one. After all, Yes, it was my choice to read through, but I truly thought you would probably have something interesting to talk about. All I hear is a bunch of whining about something you could fix if you weren’t too busy looking for attention.

Leave a comment

Your email address will not be published.