@Override
        public void mouseMoved(MouseEvent e) {
            JComponent activeCell = (JComponent)
                    table.getClientProperty(Key.ACTIVE_TABLE_CELL);
            JComponent focusedCell = (JComponent)
                    table.getClientProperty(Key.FOCUSED_TABLE_CELL);

            if (activeCell != null && activeCell != focusedCell) {
                removeRealCell(table, Key.ACTIVE_TABLE_CELL);
            }

            Point p = e.getPoint();
            int row = table.rowAtPoint(p);
            int column = table.columnAtPoint(p);
            if (row != -1 && column != -1) {
                Component cell = table.prepareRenderer(
                        table.getCellRenderer(row, column), row, column);
                if (cell instanceof JComponent && Boolean.TRUE.equals(
                        ((JComponent) cell).getClientProperty(PropertyKeys.REAL_CELL_COMPONENT))) {
                    FocusListener focusHandler = new TableCellFocusHandler(table);
                    cell.addFocusListener(focusHandler);
                    ((JComponent) cell).putClientProperty(
                            Key.TABLE_CELL_FOCUS_LISTENER, focusHandler);
                    table.add(cell);
                    table.putClientProperty(Key.ACTIVE_TABLE_CELL, cell);
                    cell.setBounds(table.getCellRect(row, column, false));
                }
            }
        }