JTable: Fijar ancho de las columnas

De ChuWiki

Normalmente en un JTable las columnas cogen el ancho adecuado para mostrar los datos, dentro de lo posible y de los datos iniciales que tenga en el momento de visualizarlo. A veces esto no es suficiente y queremos hacer que alguna columna tenga un ancho determinado. Vamos a ver cómo hacerlo.

Si hemos creado así el JTable

DefaultTableModel modelo = new DefaultTableModel();
modelo.addColumn("columna 1");
modelo.addColumn("columna 2");
modelo.addRow(new String [] {"11","12"});
modelo.addRow(new String [] {"21","22"});
JTable tabla = new JTable(modelo);

las columnas se llaman "columna 1" y "columna 2". Podemos obtener un TableColumn -clase que representa una columna- de la columna que nos interese pidiéndoselo al JTable por su nombre

TableColumn columna = tabla.getColumn("columna 1");

Este TableColumn tiene métodos para fijar el ancho. Los métodos son los siguientes:

  • columna.setPreferredWidth(anchoEnPixels) -- Fija el ancho preferido de la columna en pixels. En el momento de visualizar el JTable la columna tendrá, si es posible, este ancho. Luego el usuario puede modificarlo.
  • columna.setMinWidth(anchoEnPixels) -- Este fija el ancho mínimo que puede tener la columna. El usuario no podrá reducir la columna menos de este ancho.
  • columna.setMaxWidth(anchoEnPixels) -- Este fija el ancho máximo que puede tener la columna. El usuario no puede hacer la columna más ancha.

Si fijamos simultánemante el mínimo y el máximo con el mismo valor, la columna tendrá un ancho fijo y no se podrá modificar.