private void addListeners() {
        MouseInputListener l = new MouseInputListener() {
            public void mouseReleased(MouseEvent e) {
                redispatchMouseEvent(e);
            }

            public void mousePressed(MouseEvent e) {
                redispatchMouseEvent(e);
            }

            public void mouseExited(MouseEvent e) {
                redispatchMouseEvent(e);
            }

            public void mouseEntered(MouseEvent e) {
                redispatchMouseEvent(e);
            }

            public void mouseClicked(MouseEvent e) {
                redispatchMouseEvent(e);
            }

            public void mouseMoved(MouseEvent e) {
                redispatchMouseEvent(e);
            }

            public void mouseDragged(MouseEvent e) {
                redispatchMouseEvent(e);
            }

            private void redispatchMouseEvent(MouseEvent e) {
                Container content = getContentPane();
                Point glassPoint = e.getPoint();
                Point contentPoint = SwingUtilities.convertPoint(glassPane, glassPoint, content);

                Component component = SwingUtilities.getDeepestComponentAt(content, contentPoint.x, contentPoint.y);
                if (component == null || !SwingUtilities.isDescendingFrom(component, picture)) {
                    glassPane.setVisible(false);
                }
            }
        };

        glassPane.addMouseMotionListener(l);
        glassPane.addMouseListener(l);

        picture.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                Card c = picture.getCard();
                if (c == null) return;
                Image i = ImageCache.getOriginalImage(c);
                if (i == null) return;
                if (i.getWidth(null) < 300) return;
                glassPane.setVisible(true);
            }
        });
    }//addListeners()