在网上看了一篇jtable自适应列宽的文章,发现设置之后最后一列会留出很长的位置,下面我对这个方法做了适当地修改,能够平均分配每一列
public void fitTableColumns(JTable myTable) {
int[] i;
int j = 0;
JTableHeader header = myTable.getTableHeader();
int rowCount = myTable.getRowCount();
i = new int[myTable.getColumnCount()];
Enumeration columns = myTable.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn column = (TableColumn) columns.nextElement();
int col = header.getColumnModel().getColumnIndex(
column.getIdentifier());
int width = (int) myTable
.getTableHeader()
.getDefaultRenderer()
.getTableCellRendererComponent(myTable,
column.getIdentifier(), false, false, -1, col)
.getPreferredSize().getWidth();
for (int row = 0; row < rowCount; row++) {
int preferedWidth = (int) myTable
.getCellRenderer(row, col)
.getTableCellRendererComponent(myTable,
myTable.getValueAt(row, col), false, false,
row, col).getPreferredSize().getWidth();
width = Math.max(width, preferedWidth);
}
// 将所有列的最大宽度存入数组i中
i[j++] = width;
}
int allWidth = 0;
for (int k = 0; k < j; k++) {
allWidth += i[k];
}
// 表格的总宽度要大于所有最大列宽之和才能起作用,否则m将会是一个负数
// 则起不到效果
int m = (myTable.getWidth() - allWidth) / myTable.getColumnCount();
for (int k = 0; k < j; k++) {
i[k] += m;
// 设置宽度
TableColumn firsetColumn = myTable.getColumnModel().getColumn(k);
firsetColumn.setPreferredWidth(i[k]);
}
}