Java JTable 设置列宽

2022-08-31 10:19:20

我有一个JTable,其中我设置了列大小,如下所示:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(27);
table.getColumnModel().getColumn(1).setPreferredWidth(120);
table.getColumnModel().getColumn(2).setPreferredWidth(100);
table.getColumnModel().getColumn(3).setPreferredWidth(90);
table.getColumnModel().getColumn(4).setPreferredWidth(90);
table.getColumnModel().getColumn(6).setPreferredWidth(120);
table.getColumnModel().getColumn(7).setPreferredWidth(100);
table.getColumnModel().getColumn(8).setPreferredWidth(95);
table.getColumnModel().getColumn(9).setPreferredWidth(40);
table.getColumnModel().getColumn(10).setPreferredWidth(400);

这工作正常,但是当表最大化时,我会在最后一列的右侧获得空白空间。是否可以在调整大小时使最后一列的大小调整到窗口的末尾?

我在文档中找到了属性,但它不起作用。AUTO_RESIZE_LAST_COLUMN

编辑:在其首选大小设置中。JTableJScrollPane


答案 1

如果调用最后一列而不是setMinWidth(400)setPreferredWidth(400)

在 JavaDoc 中,请非常仔细地阅读 doLayout() 的文档。以下是一些选择位:JTable

当由于调整封闭窗口的大小而调用该方法时,调整大小列为 null。这意味着调整大小已在 JTable 的“外部”进行,并且无论此 JTable 的自动调整大小模式如何,更改(或“增量”)都应分发到所有列。

这可能就是为什么没有帮助你。AUTO_RESIZE_LAST_COLUMN

注意:当 JTable 对列的宽度进行调整时,它绝对遵循列的最小值和最大值。

这表示您可能希望为除最后一列之外的所有列设置 Min == Max,然后在最后一列上设置 Min = Preferred,并且不设置 Max 或为 Max 设置非常大的值。


答案 2

使用 ,该表不会为您更改任何列的大小,因此它将采用您的首选设置。如果您的目标是将列默认为首选大小,除了让最后一列填充窗格的其余部分之外,您还可以选择使用 autoResizeMode,但对于除最后一列之外的所有列,当与 TableColumn.setP referedWidth() 一起使用时,它可能最有效。JTable.AUTO_RESIZE_OFFJTable.AUTO_RESIZE_LAST_COLUMNTableColumn.setMaxWidth()

一旦你确信它确实有效,你可以尝试和的组合AUTO_RESIZE_LAST_COLUMNTableColumn.setMaxWidth()TableColumn.setMinWidth()


推荐