我试图根据里面的数据匹配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中的那个问题?感谢您的任何建议。
答案 0 :(得分: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);
该表将自动调整每个列宽以适合内容。无需控制何时触发调整大小。
答案 1 :(得分:11)
如果您可以使用额外的库,请尝试使用Swingx(https://java.net/projects/swingx) 你有一个JXTable,方法是“packAll()”,它完全符合你的要求
答案 2 :(得分:5)
col.setWidth(width);
阅读JTable API并按照How to Use Tables
上的链接进行操作。在该教程中,他们使用setPreferredWidth(...)
来建议列的宽度。
您可能还想查看为您执行此操作的Table Column Adjuster。此解决方案还可以考虑列标题的宽度。