自动调整JTable列的宽度

Eng*_*uad 10 java jtable

我有一个有3列的JTable:

- No. #
- Name
- PhoneNumber
Run Code Online (Sandbox Code Playgroud)

我想为每列制作特定的宽度,如下所示:

在此输入图像描述

我希望JTable能够在需要时动态更新其列的宽度(例如,在列中插入大数字#)并保持JTable的相同样式

我使用以下代码解决了第一个问题:

myTable.getColumnModel().getColumn(columnNumber).setPreferredWidth(columnWidth);
Run Code Online (Sandbox Code Playgroud)

但是,如果列的当前宽度不适合其内容,我没有成功使myTable动态更新宽度.你能帮我解决这个问题吗?

Eng*_*uad 14

在这里,我找到了答案:http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/
我们的想法是检查一些行的内容长度以调整列宽.
在文章中,作者在可下载的java文件中提供了完整的代码.

JTable table = new JTable( ... );
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );

for (int column = 0; column < table.getColumnCount(); column++)
{
    TableColumn tableColumn = table.getColumnModel().getColumn(column);
    int preferredWidth = tableColumn.getMinWidth();
    int maxWidth = tableColumn.getMaxWidth();

    for (int row = 0; row < table.getRowCount(); row++)
    {
        TableCellRenderer cellRenderer = table.getCellRenderer(row, column);
        Component c = table.prepareRenderer(cellRenderer, row, column);
        int width = c.getPreferredSize().width + table.getIntercellSpacing().width;
        preferredWidth = Math.max(preferredWidth, width);

        //  We've exceeded the maximum width, no need to check other rows

        if (preferredWidth >= maxWidth)
        {
            preferredWidth = maxWidth;
            break;
        }
    }

    tableColumn.setPreferredWidth( preferredWidth );
}
Run Code Online (Sandbox Code Playgroud)