Program: 145585
Project: 145585
Buggy source:
@Override public void doLayout(){
  TableColumn resizingColumn=getResizingColumn();
  boolean resizingColumnMet=false;
  int leftWidth=0;
  List<TableColumn> rightColumns=new ArrayList<>();
  for (int i=0; i < getColumnModel().getColumnCount(); i++) {
    if (resizingColumn == null || resizingColumnMet) {
      rightColumns.add(getColumnModel().getColumn(i));
    }
 else {
      leftWidth+=getColumnModel().getColumn(i).getWidth();
    }
    if (!resizingColumnMet && resizingColumn == getColumnModel().getColumn(i)) {
      resizingColumnMet=true;
    }
  }
  int rightWidthRemoved=0;
  int rightWidth=0;
  for (int i=rightColumns.size() - 1; i >= 0; i--) {
    TableColumn tCol=rightColumns.get(i);
    rightWidth+=tCol.getWidth();
    if (tCol instanceof RowHeaderTableColumn || tCol instanceof AnchorTableColumn) {
      rightColumns.remove(i);
      rightWidthRemoved+=tCol.getWidth();
    }
  }
  int borderDelta=0;
  int delta=(getWidth() - borderDelta) - (leftWidth + rightWidth);
  if (delta != 0) {
    float[] coefs=new float[rightColumns.size()];
    for (int i=0; i < rightColumns.size(); i++) {
      coefs[i]=(float)rightColumns.get(i).getWidth() / (float)(rightWidth - rightWidthRemoved);
    }
    for (int i=0; i < rightColumns.size(); i++) {
      TableColumn tCol=rightColumns.get(i);
      int newWidth=tCol.getWidth() + Math.round(delta * coefs[i]);
      silentSetWidth2Column(tCol,newWidth);
    }
    if ((getWidth() - borderDelta) != getColumnModel().getTotalColumnWidth() && getColumnModel().getColumnCount() > 0) {
      TableColumn goatCol=resizingColumn;
      if (goatCol == null) {
        goatCol=getColumnModel().getColumn(getColumnModel().getColumnCount() - 1);
      }
      int goatColNewWidth=goatCol.getWidth() + ((getWidth() - borderDelta) - getColumnModel().getTotalColumnWidth());
      silentSetWidth2Column(goatCol,goatColNewWidth);
    }
  }
}

Fixed version (ground truth):
@Override public void doLayout(){
  TableColumn resizingColumn=getResizingColumn();
  boolean resizingColumnMet=false;
  int leftWidth=0;
  List<TableColumn> rightColumns=new ArrayList<>();
  for (int i=0; i < getColumnModel().getColumnCount(); i++) {
    if (resizingColumn == null || resizingColumnMet) {
      rightColumns.add(getColumnModel().getColumn(i));
    }
 else {
      leftWidth+=getColumnModel().getColumn(i).getWidth();
    }
    if (!resizingColumnMet && resizingColumn == getColumnModel().getColumn(i)) {
      resizingColumnMet=true;
    }
  }
  int rightWidthRemoved=0;
  int rightWidth=0;
  for (int i=rightColumns.size() - 1; i >= 0; i--) {
    TableColumn tCol=rightColumns.get(i);
    rightWidth+=tCol.getWidth();
    if (tCol instanceof RowHeaderTableColumn || tCol instanceof AnchorTableColumn || !tCol.getResizable()) {
      rightColumns.remove(i);
      rightWidthRemoved+=tCol.getWidth();
    }
  }
  int borderDelta=0;
  int delta=(getWidth() - borderDelta) - (leftWidth + rightWidth);
  if (delta != 0) {
    for (int i=0; i < rightColumns.size(); i++) {
      TableColumn tCol=rightColumns.get(i);
      float coef=(float)tCol.getWidth() / (float)(rightWidth - rightWidthRemoved);
      int newWidth=tCol.getWidth() + Math.round(delta * coef);
      silentSetWidth2Column(tCol,newWidth);
    }
    if ((getWidth() - borderDelta) != getColumnModel().getTotalColumnWidth() && getColumnModel().getColumnCount() > 0) {
      TableColumn goatCol=resizingColumn;
      if (goatCol == null) {
        goatCol=getColumnModel().getColumn(getColumnModel().getColumnCount() - 1);
      }
      int goatColNewWidth=goatCol.getWidth() + ((getWidth() - borderDelta) - getColumnModel().getTotalColumnWidth());
      silentSetWidth2Column(goatCol,goatColNewWidth);
    }
  }
}