Boton en la parte inferior derecha

De ChuWiki
Saltar a: navegación, buscar

Veamos un ejemplo sencillo de cómo colocar un botón en la esquina inferior derecha de una ventana en java.

Usando un panel con FlowLayout

Un JFrame tiene por defecto un BorderLayout. Este layout tiene cinco zonas: una parte central, una superior, una inferior, una lateral derecha y una lateral izquierda. Colocaremos en la parte inferior un JPanel que será el que contenga el botón.

¿Y cómo colocamos el botón en el lado derecho de este panel?. Lo más sencillo es poner al panel un FlowLayout usando en el constructor del mismo la constante FlowLayout.TRAILING. Esto hará que los componentes que le añadamos se alineen empezando por el lado derecho hacia la izquierda.

De esta forma, el botón quedará en el lado derecho del panel y el panel en el lado inferior de la ventana. El código completo del ejemplo es el siguiente

package com.chuidiang.ejemplos;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * @author Chuidiang
 */
public class BotonInferiorDerecha {

   public static void main(String[] args) {
      JFrame v = new JFrame();

      // Panel con FlowLayout que empieza a alinear componentes por la derecha.
      JPanel panel2 = new JPanel(new FlowLayout(FlowLayout.TRAILING));
      panel2.add(new JButton("el boton"));

      // El JFrame tiene un BorderLayout, colocamos el panel en el Sur (parte inferior).
      v.getContentPane().add(panel2, BorderLayout.SOUTH);

      v.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      v.pack();
      v.setVisible(true);
   }
}

Usando GridBagLayout

GridBagLayout es el posiblemente el layout de java más potente, pero es más complejo de entender y utilizar. Podemos hacer lo mismo usando este layout, ahorrándonos la creación del panel que contiene al botón a costa de "complicar" un poco más el código. El código con GridBagLayout sería el siguiente

      JFrame v = new JFrame();
      v.getContentPane().setLayout(new GridBagLayout());

      JLabel dummy = new JLabel();
      GridBagConstraints gc = new GridBagConstraints();
      gc.gridx=0;
      gc.gridy=0;
      gc.weightx=1.0;
      gc.weighty=1.0;
      v.getContentPane().add(dummy,gc);

      gc.gridx=1;
      gc.gridy=1;
      gc.weightx=0.0;
      gc.weighty=0.0;
      v.getContentPane().add(new JButton("el boton"),gc);

      v.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      v.pack();
      v.setVisible(true);

Veamos una pequeña explicación.

Creamos un JFrame y le ponemos el GridBagLayout. Ficticiamente imaginamos divido esta ventana en una matriz de 2x2. Eso es en este ejemplo, en tu caso concreto, deberás poner la matriz ficticia con las filas y columnas que necesites.

Creamos un JLabel por aquello de meter algo en la ventana, que irá en la posición 0,0 de la matriz (primera fila, primera columna). Por ello, en el GridBagConstraints ponemos gridx y gridy a 0. Como queremos que al estirar la ventana el botón no crezca, será el JLabel el que tenga que crecer, por ello ponemos weightx y weighty a 1.0. Ahora simplemente añadimos el JLabel usando este GridBagConstraints. Este JLabel de alguna manera será el componente principal de la ventana y el que ocupe su mayor parte, aunque no lo veremos puesto que no le hemos puesto ni etiqueta ni color de fondo. Insisto, en tu caso concreto en vez de JLabel pondrás los otros componentes de la ventana.

Finalemente, para el botón que nos interesa, lo ponemos en la última posición de abajo a la derecha de la matriz en la que ficticiamente hemos dividido la ventana, es decir, la posición 1,1 de nuestra matriz de 2x2. Por ello, gridx y gridy se ponen a 1. Como no queremos que el botón crezca al estirar la ventana, ponemos weightx y weighty a 0.0. Ya solo queda añadir el botón a la ventana usando este GridBagConstraints.

Enlaces