我试图将列宽设置为列名的长度.我的问题是,我无法设置它.当我使用以下代码时,表格变得像这样,
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);
}
Run Code Online (Sandbox Code Playgroud)
我从表模型中正确获取列长度.
当我使用上面的代码时,表格会像这样包装,

我无法理解我做错了什么.
正如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);
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个极其简短的例子.
如果要完全正确,则需要查询每个列的渲染器以获取Font和FontMetrics,以获得正确的值.
如果所有渲染器都使用与JTable相同的字体,那么这应该没问题.
| 归档时间: |
|
| 查看次数: |
4103 次 |
| 最近记录: |