0

I am trying to set column width to the length of the column name. My problem is, I am not able to set it. When I use the following code the table is becoming like this,

tableA.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  for(int i = 0; i < tableA.getColumnCount(); i++) {
int columnLength = (modelA.getColumnName(i)).length();
tableA.getColumnModel().getColumn(i).setPreferredWidth(columnLength);
//  tableA.getColumnModel().getColumn(i).setMinWidth(columnLength);
//  tableA.getColumnModel().getColumn(i).setMaxWidth(columnLength);
  }

I am getting the column length correctly from my table model.

When I use the above code the table is getting packed like this,

Set Column Width

I am not able to understand where I am doing wrong.

4

4 回答 4

6

正如 Dan 指出的那样,您需要根据正在使用的 Font 计算列名的实际宽度。

就像是:

String name = modelA.getColumnName(i);
Font f = tableA.getFont();
FontMetrics fm = tableA.getFontMetrics(f);
int width = fm.stringWidth(name);
tableA.getColumnModel().getColumn(i).setPreferredWidth(width);

请注意,这是一个非常简短的示例。

如果你想让它完全正确,你需要查询每列的渲染器以获取 Font 和 FontMetrics 以获得正确的值。

如果您的所有渲染器都使用与 JTable 相同的字体,那么这应该没问题。

于 2012-11-05T14:48:02.147 回答
3

需要一个以像素为单位的setPreferredWidth值,而列名的长度是 a 的长度(aString中的字符数String)。

于 2012-11-05T14:31:44.673 回答
2
于 2012-11-05T14:45:07.377 回答
2

如果您不介意使用 SwingX,您可以使用TableColumnExt#setPrototypeValue允许您设置“原型”值的方法,该值将用于确定列宽。

于 2012-11-05T14:43:59.340 回答