public void insertRow(int i, double size)
	{
		// Make sure position is valid
		if ((i < 0) || (i > rowSpec.length))
			throw new IllegalArgumentException("Parameter i is invalid.  i = " + i
					+ ".  Valid range is [0, " + rowSpec.length + "].");

		// Make sure row size is valid
		if ((size < 0.0) && (size != FILL) && (size != PREFERRED) && (size != MINIMUM))
		{
			size = 0.0;
		}

		// Copy rows
		double row[] = new double[rowSpec.length + 1];
		System.arraycopy(rowSpec, 0, row, 0, i);
		System.arraycopy(rowSpec, i, row, i + 1, rowSpec.length - i);

		// Insert row
		row[i] = size;
		rowSpec = row;

		// Move all components that are below the new row
		ListIterator<Entry> iterator = list.listIterator(0);

		while (iterator.hasNext())
		{
			// Get next entry
			Entry entry = (Entry) iterator.next();

			// Is the first row to the right of the new row
			if (entry.row1 >= i)
				// Move first row
				entry.row1++;

			// Is the second row to the right of the new row
			if (entry.row2 >= i)
				// Move second row
				entry.row2++;
		}

		// Indicate that the cell sizes are not known
		dirty = true;
	}