Tengo una JTable con varias columnas. Quiero una columna en particular para cambiar el tamaño. Lo que esperaba era usar setPreferredWidth, la columna cambiaría el tamaño a ese tamaño, o el tamaño de los contenidos de modo que no se produjera el truncado y dejara que el resto de las columnas ocupen el espacio restante, pero en su lugar, todas las columnas, incluyendo el que cambié de tamaño, divide por igual todo el espacio de la mesa; como si setPreferredWidth hiciera nada en absoluto. En efecto, quiero poder establecer el ancho de una columna y hacer que se reduzca a ese tamaño sin truncar el contenido (¿he insistido demasiado en eso?) De modo que todas las columnas que no se han redimensionado se hayan llenado el espacio restante. El uso de setMaxWidth trunca el contenido (¿mencioné que no me gustó eso?) ¿Cómo puedo redimensionar/reducir una columna sin que trunque y sin hacerlo absolutamente nada? Aquí está el código erróneo:TableColumn setPreferredWidth no funciona
for (int i = 0, x = 0; i < table.getColumnModel().getColumnCount(); i++)
if ((x = model.getColumnWidth(i)) > -1)
table.getColumnModel().getColumn(i).setPreferredWidth(x);
La tabla está en un JPanel (MyListPanel - BorderLayout), que se encuentra en otro JPanel (GridBagLayout) que se añade con:
new GridBagConstraints(0, 3, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 0, 0, 2), 0, 0))
EDIT: Este es el constructor de mi subclase de JPanel:
public MyListPanel(boolean showHeader, String title, ColData...columns) {
super(new BorderLayout());
model = new MyListTableModel(columns);
table = new JTable(model);
table.addFocusListener(this);
add(table);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
setTitle(title);
if (showHeader)
add(table.getTableHeader(), BorderLayout.NORTH);
for (int i = 0, x = 0; i < table.getColumnModel().getColumnCount(); i++)
if ((x = model.getColumnWidth(i)) > -1)
table.getColumnModel().getColumn(i).setPreferredWidth(x);
setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
}
Y MyListTableModel.ColData:
public static class ColData {
private int index;
private String title;
private int width;
public ColData(int _index, String _title, int _width) { index = _index; title = _title; width = _width; }
}
no hace el truco :( –