Musisz ustawić autoResize na WYŁ. (setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
), ale aby zmienić rozmiar kolumn, potrzebujesz również metody pomocnika.
To jest wewnątrz klasy niestandardowej, która rozciąga JTable, ale można równie dobrze odnosi się do istniejącego JTable:
public void resizeColumnWidth() {
int cumulativeActual = 0;
int padding = 15;
for (int columnIndex = 0; columnIndex < getColumnCount(); columnIndex++) {
int width = 50; // Min width
TableColumn column = columnModel.getColumn(columnIndex);
for (int row = 0; row < getRowCount(); row++) {
TableCellRenderer renderer = getCellRenderer(row, columnIndex);
Component comp = prepareRenderer(renderer, row, columnIndex);
width = Math.max(comp.getPreferredSize().width + padding, width);
}
if (columnIndex < getColumnCount() - 1) {
column.setPreferredWidth(width);
cumulativeActual += column.getWidth();
} else { //LAST COLUMN
//Use the parent's (viewPort) width and subtract the previous columbs actual widths.
column.setPreferredWidth((int) getParent().getSize().getWidth() - cumulativeActual);
}
}
}
połączeń resizeColumnWidth() po dodaniu wiersza.
ewentualnie dodać detektor do stołu, tak, że kolumny są zmniejszane, gdy sama tabela zmieniany:
public MyCustomJTable() {
super();
addHierarchyBoundsListener(new HierarchyBoundsAdapter() {
@Override
public void ancestorResized(HierarchyEvent e) {
super.ancestorResized(e);
resizeColumnWidth();
}
});
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
patrz tym artykule: [Tabela Kolumna Adjuster] (http://tips4java.wordpress.com/2008/11/10/table-column-adjuster /) –