自动调整 JTable 列宽的大小

2022-09-01 08:08:31

我需要我的JTable自动调整其列宽的大小以适应内容。我发现 TableColumnAdjuster 类非常有用。但有一个小问题。假设我有5列,它们的内容很短。在这种情况下,如果我使用自动调整器,它会根据其内容设置前四列宽度,并将其余所有空间提供给最后一列。请参阅示例。

enter image description here

这里最后一列,给出了所有多余的空间。但是,如果我需要将该空间提供给中间列之一,该怎么办?在上面的例子中,我需要将该空间分配给第三列。我尝试修改类的方法。但我无法让它工作。BalancenameTableColumnAdjusteradjustColumns()

我尝试了两者,并更改列大小。但似乎它不会改变任何东西。如何有效地更改 .如果有其他选择或直接回答我的主要问题,那就更好了。谢谢!column.setPreferredWidth()column.setWidth()JTable


答案 1

您可以尝试下一步:

public void resizeColumnWidth(JTable table) {
    final TableColumnModel columnModel = table.getColumnModel();
    for (int column = 0; column < table.getColumnCount(); column++) {
        int width = 15; // 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);
        }
        if(width > 300)
            width=300;
        columnModel.getColumn(column).setPreferredWidth(width);
    }
}

JTable

这需要在调整大小方法之前执行。
如果您有:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

JTable


答案 2

没有用于自动调整一列大于另一列大小的选项。

也许你可以像这样:

tca = new TableColumnAdjuster( table, 0 );
tca.adjustColumns();
TableColumnModel tcm = table.getColumnModel();  
TableColumn tc = tcm.getColumn(1);
tc.setWidth(tc.getWidth() + 25);

这将允许您向列 1 添加额外的空间。只有在首次显示表时才会添加此额外空间。

另一种选择是使用:

table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

这将按比例为每个列分配额外的空间。


推荐