自动调整Jtable列以适合内容

我试图根据里面的数据匹配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中的问题吗? 谢谢你的任何建议。

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

这就是你所需要的:

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

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

 col.setWidth(width); 

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

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