java - JTable 设置列宽不起作用

标签 java swing jtable

我正在尝试将列宽设置为列名称的长度。我的问题是,我无法设置它。当我使用以下代码时,表格变成这样,

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

我从表模型中正确获取了列长度。

当我使用上面的代码时,表格会像这样打包,

Set Column Width

我无法理解我哪里做错了。

最佳答案

正如 Dan 所指出的,您需要根据正在使用的字体来计算列名称的实际宽度。

类似于:

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 相同的字体,那么这应该没问题。

关于java - JTable 设置列宽不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234123/

相关文章:

java - 如何计算 JAX-WS 中的请求处理时间?

java - 在运行时更改 JTable 引用 - 未出现在 GUI 中

java - 长期存储 JTable 数据的好方法?

java - JacocoReport 配置的 Gradle 6.0 弃用警告

java - 将二维数组传递给另一个类 : Java

java - 在 Swing 中平均调整两个 ScrollPanes 的大小

java - JTable 在 View 中显示和更新行号

java - Java程序中多线程的使用和vs需要在EDT上创建Swing对象

java - swing,在可编辑的 jTable 上显示 JList 以选择条目以自动完成文本

java - nextProbablePrime() 的准确性与输入值的大小有关吗?