11

我正在尝试根据内部数据匹配 JTable 列宽。我的代码:

    for(int column = 0; column < gui.testsuiteInfoTable.getColumnCount(); column ++){
        int  width =0;
    for (int row = 0; row < gui.testsuiteInfoTable.getRowCount(); row++) {
         TableCellRenderer renderer = gui.testsuiteInfoTable.getCellRenderer(row, column);
         Component comp = gui.testsuiteInfoTable.prepareRenderer(renderer, row, column);
         width = Math.max (comp.getPreferredSize().width, width);
         System.out.println(width);
     }
    TableColumn col = new TableColumn();
    col = gui.testsuiteInfoTable.getColumnModel().getColumn(column);
    System.out.println(width);
    col.setWidth(width);
    gui.testsuiteInfoTable.revalidate();

    }
}

我猜尺寸是正确的,但表格列仍然具有相同的宽度!该表嵌入在 GridBagLayout 中的 ScrollPane 中是这个问题吗?感谢您的任何建议。

4

3 回答 3

24

这就是你所需要的:

JTable table = new JTable(){
    @Override
       public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
           Component component = super.prepareRenderer(renderer, row, column);
           int rendererWidth = component.getPreferredSize().width;
           TableColumn tableColumn = getColumnModel().getColumn(column);
           tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth()));
           return component;
        }
    };
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

表格将自动调整每个列的宽度以适应内容。无需控制何时触发调整大小。

于 2014-08-29T14:51:02.040 回答
12

如果您可以使用额外的库,请尝试 Swingx ( https://java.net/projects/swingx ) 那里有一个 JXTable,带有一个方法“packAll()”,这正是您所要求的

于 2013-07-25T14:04:53.887 回答
6
col.setWidth(width);

阅读 JTable API 并点击 上的链接How to Use Tables。在该教程中,他们使用setPreferredWidth(...)来建议列的宽度。

您可能还想查看为您执行此操作的表格列调整器。该解决方案还可以考虑列标题的宽度。

于 2013-07-25T14:44:46.877 回答