/**
   * Deletes the <code>column</code> from the <code>tableColumns</code> array. This method will do
   * nothing if <code>column</code> is not in the table's columns list. <code>tile</code> is called
   * to resize both the header and table views. This method also posts a <code>columnRemoved</code>
   * event to its listeners.
   *
   * @param column the <code>TableColumn</code> to be removed
   * @see #addColumn
   */
  public void removeColumn(TableColumn column) {
    int columnIndex = tableColumns.indexOf(column);

    if (columnIndex != -1) {
      // Adjust for the selection
      if (selectionModel != null) {
        selectionModel.removeIndexInterval(columnIndex, columnIndex);
      }

      column.removePropertyChangeListener(this);
      tableColumns.removeElementAt(columnIndex);
      invalidateWidthCache();

      // Post columnAdded event notification.  (JTable and JTableHeader
      // listens so they can adjust size and redraw)
      fireColumnRemoved(new TableColumnModelEvent(this, columnIndex, 0));
    }
  }