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.
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.
La otra opción sería meter un panel (JPanel) que por defecto ya presenta y layout de tipo FlowLayout.
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í.
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.
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.
-
- 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.
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.
That’s true