自动调整Jtable列以适合内容

Han*_* En 8 java swing jtable tablecolumn preferredsize

我试图匹配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();

    }
}
Run Code Online (Sandbox Code Playgroud)

尺寸是正确的我猜,但表格列仍然都有相同的宽度!该表是嵌入在GridBagLayout中的ScrollPane中的那个问题?谢谢你的任何建议.

Jer*_*kes 21

这就是你所需要的:

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);
Run Code Online (Sandbox Code Playgroud)

该表将自动调整每个列宽以适合内容.无需控制何时触发调整大小.


小智 11

如果您可以使用额外的库,请尝试使用Swingx(https://java.net/projects/swingx)您有一个JXTable,其方法是"packAll()",它完全符合您的要求


cam*_*ckr 5

col.setWidth(width);
Run Code Online (Sandbox Code Playgroud)

阅读JTable API并按照链接进行操作How to Use Tables.在该教程中,他们使用它setPreferredWidth(...)来建议列的宽度.

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