我指的是这个页面。 https://tips4java.wordpress.com/2008/11/10/table-column-adjuster/在Jtable中调整列宽,并且效果很好。
但有些列不是首选宽度,有人可以帮助我找到代码中的问题吗?
我已将Jtable图像附加到我的项目中。
Jtable学生详细信息图片:
public void resizeColumnWidth() {
for (int column = 0; column < student_table.getColumnCount(); column++)
{
TableColumn tableColumn = student_table.getColumnModel().getColumn(column);
int preferredWidth = tableColumn.getMinWidth();
int maxWidth = student_table.getColumnModel().getColumn(column).getMaxWidth();
for (int row = 0; row < student_table.getRowCount(); row++)
{
TableCellRenderer cellRenderer = student_table.getCellRenderer(row, column);
Component c = student_table.prepareRenderer(cellRenderer, row, column);
int width = c.getPreferredSize().width + student_table.getIntercellSpacing().width;
preferredWidth = Math.max(preferredWidth, width);
if (preferredWidth >= maxWidth)
{
preferredWidth = maxWidth;
break;
}
}
tableColumn.setPreferredWidth( preferredWidth );
}
}
答案 0 :(得分:1)
但有些列不是首选宽度
如果您要引用标题中的名称被截断,则问题是您使用的代码仅考虑数据。如果您需要考虑标题宽度,则需要使用实际的TableColumnAdjuster
类来获得完整功能。
如果您只是担心每个单元格中的数据,您仍有潜在的问题:
int maxWidth = student_table.getColumnModel().getColumn(column).getMaxWidth();
您是否设置了每列的最大宽度?
我相信默认值是75像素。
请注意,如果您不想限制列级别的宽度,则可以使用以下值:Integer.MAX_VALUE
。
另外,为什么要更改链接中的示例代码中的代码?您已经有对TableColumn的引用,那么为什么还要再次获取引用。除非您有特定的理由,否则不要更改代码示例。