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

在网上看了一篇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]);
  }
 }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值