1

列ヘッダーと列幅の両方に基づいて列のサイズを変更しようとしています。

これである程度成功しましたが、実際には一時的な解決策にすぎません。

設定している最小幅は 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);
                    }
4

1 に答える 1