Ham*_*aya 89 java size swing jtable
我有一个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);
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但是当表格最大化时,我会在最后一列的右边找到空白区域.是否可以在调整大小时将最后一列调整到窗口末尾?
我AUTO_RESIZE_LAST_COLUMN在docs中找到了属性,但它不起作用.
编辑:JTable是在JScrollPane其首选大小设置.
Edd*_*die 42
如果你调用会发生什么setMinWidth(400)在最后一列,而不是的setPreferredWidth(400)?
在JavaDoc for中JTable,doLayout()非常仔细地阅读文档.以下是一些选择位:
当由于调整封闭窗口的大小而调用该方法时,resizingColumn为null.这意味着调整大小发生在JTable"外部",并且更改 - 或"delta" - 应该分配给所有列,而不管这个JTable的自动调整大小模式.
这可能就是为什么AUTO_RESIZE_LAST_COLUMN没有帮助你.
注意:当JTable调整列的宽度时,它绝对尊重它们的最小值和最大值.
这表示您可能希望为除最后一列之外的所有列设置Min == Max,然后在最后一列上设置Min = Preferred,并且不设置Max或为Max设置一个非常大的值.
akf*_*akf 21
使用时JTable.AUTO_RESIZE_OFF,表格不会为您更改任何列的大小,因此它将采用您的首选设置.如果您的目标是将列默认设置为首选大小,除了让最后一列填充窗格的其余部分之外,您可以选择使用JTable.AUTO_RESIZE_LAST_COLUMNautoResizeMode,但在使用TableColumn.setMaxWidth()而不是TableColumn 时可能最有效. setPreferredWidth()除了最后一列以外的所有列.
一旦你对AUTO_RESIZE_LAST_COLUMN实际工作感到满意,你就可以尝试结合使用TableColumn.setMaxWidth()和TableColumn.setMinWidth()
Ric*_*pek 11
JTable.AUTO_RESIZE_LAST_COLUMN定义为"在所有调整大小操作期间,仅对最后一列应用调整",这意味着您必须在代码末尾设置autoresizemode,否则setPreferredWidth()不会影响任何内容!
所以在你的情况下,这将是正确的方法:
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);
table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
Run Code Online (Sandbox Code Playgroud)
使用此方法
public static void setColumnWidths(JTable table, int... widths) {
TableColumnModel columnModel = table.getColumnModel();
for (int i = 0; i < widths.length; i++) {
if (i < columnModel.getColumnCount()) {
columnModel.getColumn(i).setMaxWidth(widths[i]);
}
else break;
}
Run Code Online (Sandbox Code Playgroud)
或者扩展JTable课程:
public class Table extends JTable {
public void setColumnWidths(int... widths) {
for (int i = 0; i < widths.length; i++) {
if (i < columnModel.getColumnCount()) {
columnModel.getColumn(i).setMaxWidth(widths[i]);
}
else break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后
table.setColumnWidths(30, 150, 100, 100);
Run Code Online (Sandbox Code Playgroud)