列ヘッダーと列幅の両方に基づいて列のサイズを変更しようとしています。
これである程度成功しましたが、実際には一時的な解決策にすぎません。
設定している最小幅は 1 つのテーブルに対してのみですが、さまざまな列ヘッダーを持つ多くのテーブルをプレビューしているため、この最小幅が小さすぎる場合があります。最小の列ヘッダーの列ヘッダー幅を取得し、それをこの変数に割り当てる方法が必要でした。
final TableColumnModel columnModel = table.getColumnModel();
for (int column = 0; column < table.getColumnCount(); column++)
{
int width = 70; // Min width
for (int row = 0; row < table.getRowCount(); row++)
{
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width +1 , width);
}
columnModel.getColumn(column).setPreferredWidth(width);
}
アップデート:
ループしている列に DefaultTableCellRenderer を使用してから、列ヘッダーの幅を取得して変数に適用しようとしましたが、この結果が得られました
final TableColumnModel columnModel = table.getColumnModel();
for (int column = 0; column < table.getColumnCount(); column++)
{
DefaultTableCellRenderer colwidth=((DefaultTableCellRenderer)table.getTableHeader().getDefaultRenderer());
int width = colwidth.getWidth();
for (int row = 0; row < table.getRowCount(); row++)
{
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width +1 , width);
}
columnModel.getColumn(column).setPreferredWidth(width);
}