@Override
	public void mouseClicked(MouseEvent event) {
		Row rollRow = null;
		try {
			boolean local = event.getSource() == this;
			int x = event.getX();
			int y = event.getY();
			Row rowHit;
			Column column;
			int clickCount = event.getClickCount();

			rollRow = mRollRow;
			if (clickCount == 1) {
				if (local) {
					column = overColumn(x);
					if (column != null) {
						rowHit = overRow(y);
						if (rowHit != null && !overDisclosureControl(x, y, column, rowHit)) {
							Cell cell = column.getRowCell(rowHit);
							if (cell != null) {
								cell.mouseClicked(event, getCellBounds(rowHit, column), rowHit, column);
							}
						}
					}
				}
			} else if (clickCount == 2) {
				column = overColumnDivider(x);
				if (column == null) {
					if (local) {
						rowHit = overRow(y);
						if (rowHit != null) {
							column = overColumn(x);
							if ((column == null || !overDisclosureControl(x, y, column, rowHit)) && mModel.isRowSelected(rowHit)) {
								notifyActionListeners();
							}
						}
					}
				} else if (allowColumnResize()) {
					int width = column.getPreferredWidth(this);
					if (width != column.getWidth()) {
						adjustColumnWidth(column, width);
					}
				}
			}
		} finally {
			repaintChangedRollRow(rollRow);
		}
	}