@Override public void mouseReleased(MouseEvent e) { e.consume(); // handle marble click int releasedRow = table.rowAtPoint(e.getPoint()); if (releasedRow == mousePressedRow) { int totalHeight = 0; for (int i = 0; i < releasedRow; i++) totalHeight += table.getRowHeight(i); int marbleTop = ((JPanel) rowHeader .getCellRenderer() .getListCellRendererComponent( rowHeader, (releasedRow + 1) + "", releasedRow, false, false)) .getComponent(1) .getY(); if (e.getY() > marbleTop + totalHeight - 4 && e.getY() < marbleTop + totalHeight + 16) { GeoCasCell clickedCell = table.getGeoCasCell(table.rowAtPoint(e.getPoint())); if (table.isEditing()) { table.stopEditing(); } clickedCell.toggleTwinGeoEuclidianVisible(); } } mousePressedRow = -1; // handle right click if (rightClick) { if (!rowHeader.isSelectedIndex(releasedRow)) { rowHeader.setSelectedIndex(releasedRow); } if (rowHeader.getSelectedIndices().length > 0) { RowHeaderPopupMenu popupMenu = new RowHeaderPopupMenu(rowHeader, table); popupMenu.show(e.getComponent(), e.getX(), e.getY()); } } }