自动调整 JTable 列宽

新手上路,请多包涵

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

在此处输入图像描述

最后一列 Balance 给出了所有多余的空间。但是如果我需要把那个空间给中间的一列呢?在上述情况下,我需要将该空间分配给第三列 name 。我尝试修改 TableColumnAdjuster 类的 adjustColumns() 方法。但我无法让它工作。

我尝试了 column.setPreferredWidth()column.setWidth() 来更改列大小。但似乎并没有改变什么。如何有效地更改 a JTable 的列大小。如果对我的主要问题有其他替代方案或直接答案,那就更好了。谢谢!

原文由 Anubis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 779
2 个回答

您可以尝试下一个:

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

表格

这需要在调整大小方法之前执行。

如果你有:

 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

表格

原文由 Paul Vargas 发布,翻译遵循 CC BY-SA 3.0 许可协议

setAutoResizeMode() 将告诉您的表格如何调整大小,您应该尝试使用所有不同的选项来查看差异,在我的例子中,我想专门调整两列的大小,并让它决定如何调整所有其他列。

 jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
TableColumnModel colModel=jTable1.getColumnModel();
colModel.getColumn(1).setPreferredWidth(25);
colModel.getColumn(2).setPreferredWidth(400);

原文由 Edwin Barahona 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题