调整JTable列的宽度

时间:2016-06-15 17:02:59

标签: java swing jtable

我指的是这个页面。 https://tips4java.wordpress.com/2008/11/10/table-column-adjuster/在Jtable中调整列宽,并且效果很好。

但有些列不是首选宽度,有人可以帮助我找到代码中的问题吗?

我已将Jtable图像附加到我的项目中。

Jtable学生详细信息图片:

http://i.stack.imgur.com/owhW6.png

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

1 个答案:

答案 0 :(得分:1)

  

但有些列不是首选宽度

如果您要引用标题中的名称被截断,则问题是您使用的代码仅考虑数据。如果您需要考虑标题宽度,则需要使用实际的TableColumnAdjuster类来获得完整功能。

如果您只是担心每个单元格中的数据,您仍有潜在的问题:

int maxWidth = student_table.getColumnModel().getColumn(column).getMaxWidth();  

您是否设置了每列的最大宽度?

我相信默认值是75像素。

请注意,如果您不想限制列级别的宽度,则可以使用以下值:Integer.MAX_VALUE

另外,为什么要更改链接中的示例代码中的代码?您已经有对TableColumn的引用,那么为什么还要再次获取引用。除非您有特定的理由,否则不要更改代码示例。