I am trying to create a JTable that would have a dynamic width (according to the largest element in the column) and I am using this code
JTable table = new JTable(){
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component component = super.prepareRenderer(renderer, row, column);
int rendererWidth = component.getPreferredSize().width;
TableColumn tableColumn = getColumnModel().getColumn(column);
tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth()));
return component;
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
The dynamic width is working correctly, but then I have an event listener to chechboxes (1 chechbox = 1 column) and if they are unticked, the column should be hidden, if they are ticked again, the column should re-apear. For that I am using:
if (jCheckBox.isSelected())
{
table.getColumn(columnName).setMinWidth(15);
table.getColumn(columnName).setMaxWidth(2147483647);
table.getColumn(columnName).setWidth(100);
}
else
{
table.getColumn(columnName).setMinWidth(0);
table.getColumn(columnName).setMaxWidth(0);
table.getColumn(columnName).setWidth(0);
}
And this piece of code was working perfectly, but I think this line:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
breaks the functionality, now, hiding the column works, but re-appearing does not. Do you know what could be the problem? Thanks!