public String row(int i)
    throws Exception
  {
    // Gather some basic information
    int th = this.top.height();
    int bh = this.bottom.height();
    int tw = this.top.width();
    int bw = this.bottom.width();
    int h = th + bh;

    // Determine padding
    String padtop = "";
    String padbot = "";
    if (tw > bw)
      {
        padbot = TBUtils.spaces(tw - bw);
      } // if the top is wider
    else
      // the bottom is wider
      {
        padtop = TBUtils.spaces(bw - tw);
      } // the bottom is wider

    if ((i < 0) || (i >= h))
      {
        throw new Exception("Invalid row " + i);
      } // if the row is invalid
    else if (i < th)
      {
        return this.top.row(i) + padtop;
      } // if the row is in the top half
    else
      {
        return this.bottom.row(i - th) + padbot;
      } // if the row is in the bottom half
  } // row(int)