JTable 列调整大小不起作用
table.getTableHeader().setResizingAllowed(false);
column = table.getColumn(columns[0]);
column.setWidth(25);
column = table.getColumn(columns[1]);
column.setWidth(225);
column = table.getColumn(columns[2]);
column.setWidth(50);
table.doLayout()
这拒绝将列设置为其指定的宽度。 有什么理由吗?
table.getTableHeader().setResizingAllowed(false);
column = table.getColumn(columns[0]);
column.setWidth(25);
column = table.getColumn(columns[1]);
column.setWidth(225);
column = table.getColumn(columns[2]);
column.setWidth(50);
table.doLayout()
This refuses to set the columns to their specified widths. Any reason why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当
JTable
的调整大小模式不是AUTO_RESIZE_OFF
时,Swing 会忽略您设置的列宽。不要使用
setWidth
,而是使用setPreferredWidth
。 然后,在布置列时,表将使用该值。 如果您设置最小、最大和首选宽度,它应该适用于所有情况,但您的用户无法再自行更改列宽。 因此请谨慎使用。API-文档
Swing ignores column widths set by you when resize mode of the
JTable
is notAUTO_RESIZE_OFF
.Instead of using
setWidth
, usesetPreferredWidth
. The table will then use this value when the columns are laid out. If you set minimum, maximum and preferred width, it should work for all occasions, but your users cannot change column width themselves anymore. So use this with caution.The layout process is described in great detail in the API-Docs
为了让这个工作适用于我的表,我覆盖了
setBounds
并在其中设置了首选宽度:我从这篇文章。
To get this working for my table I overrode
setBounds
and set the preferred widths in there:I got the implementation of setPreferredColumnWidths from this article.
我很长时间都无法让它工作,然后我终于发现我需要将 autoCreateColumnsFromModel 设置为 false。
编辑:忽略这一点,这是当我想要 tableDataChanged 时触发 tableStructureChanged 的结果(请参阅下面的讨论,并感谢 kleopatra 识别错误)
I could not get this working for ages, then I finally found that I needed to set
autoCreateColumnsFromModel
to false.edit: ignore this, it was a consequence of firing tableStructureChanged when i wanted tableDataChanged (see discussion below, and thanks to kleopatra for identifying the mistake)