您的位置:首页 > 编程语言 > Java开发

java JTable 列自适应大小(平均分配)

2016-06-19 14:17 441 查看
在网上看了一篇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]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息