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

在这里,最后一列Balance被赋予所有多余的空间。但是,如果我需要给中间列之一留出空间,该怎么办?在上述情况下,我需要将该空间分配给第三列name。我试图修改TableColumnAdjuster类的adjustColumns()方法。但是我无法正常工作。

我尝试了column.setPreferredWidth()column.setWidth()来更改列大小。但似乎并没有改变任何东西。如何有效更改JTable的列大小。如果还有其他选择或直接解决我的主要问题,那就更好了。谢谢!

最佳答案

您可以尝试下一个:

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);
    }
}

这需要在resize方法之前执行。
如果你有:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

10-06 02:48