code: private boolean isValidLocation(Cell aCell, Point aLocation) {
          // rowspan not beyond last column
          if ( aLocation.x < rows.size() )        // if false : new location is already at new, not-yet-created area so no check
          {
              if ((aLocation.y + aCell.getColspan()) > columns) {
                  return false;
              }
              
              int difx = ((rows.size() - aLocation.x) >  aCell.getRowspan()) ? aCell.getRowspan() : rows.size() - aLocation.x;
              int dify = ((columns - aLocation.y) >  aCell.getColspan()) ? aCell.getColspan() : columns - aLocation.y;
              // no other content at cells targeted by rowspan/colspan
              for (int i=aLocation.x; i < (aLocation.x + difx); i++) {
                  for (int j=aLocation.y; j < (aLocation.y + dify); j++) {
                      if (((Row) rows.get(i)).isReserved(j)) {
                          return false;
                      }
                  }
              }
          }
          else {
              if ((aLocation.y + aCell.getColspan()) > columns) {
                  return false;
              }
          }
          
          return true;
      }
docs: check if <CODE>Cell</CODE> 'fits' the table.
  <P>
  <UL><LI>rowspan/colspan not beyond borders
  <LI>spanned cell don't overlap existing cells</UL>
  
  @param   aCell       the cell that has to be checked
  @param   aLocation   the location where the cell has to be placed
  @return true if the location was valid