OpenImaj - 将 MouseListener 与 JFrame 结合使用

OpenImaj - Using a MouseListener with JFrame

我正在尝试向显示 MBFImage 的 JFrame 添加鼠标侦听功能,但鼠标事件完全没有任何作用。我不确定事件是否没有触发,或者它们是否触发但没有被捕获,因为我做错了什么......

图像在 JFrame 中显示得很好,但是在图像上移动鼠标、单击、移动、拖动等不会产生任何结果 activity。

注意 1 我发现如果我将 mouselistener 添加到 JPanel,然后(按此特定顺序)绘制图像,然后将 JPanel 添加到 JFrame ,鼠标侦听器捕获事件,但仅在图像外部侦听。它绘制了我需要调整大小的最小尺寸 window。鼠标在图像上的任何移动似乎都不会触发/捕获任何事件。

注意 2 如果我将面板添加到 JFrame 然后绘制图像,window 大小就可以了,但是鼠标侦听器不再工作。

任何人都可以阐明吗?

这是我的代码的相关部分:

private JFrame displayImage(final MyAppImage image, final MyAppImage.DetectLevel level, String title) {
    MBFImage mbfImg = image.drawDetections(level);  //draws face detection boxes
    JFrame imgFrame = new JFrame(title);
    DisplayUtilities.display(mbfImg, imgFrame);

    imgFrame.addMouseListener(new MouseListener() {

        @Override
        public void mouseClicked(MouseEvent e) {

        }

        @Override
        public void mousePressed(MouseEvent e) {

        }

        @Override
        public void mouseReleased(MouseEvent e) {

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            System.out.println("here");
            if (level == MyAppImage.DetectLevel.filtered) {
                if (image.checkPoints(e.getX(), e.getY(), level) != null) {
                    System.out.println("YES");
                }
                else {
                    System.out.println("NO!");
                }
            }
            else {
                System.out.println("Huh?");
            }
        }

        @Override
        public void mouseExited(MouseEvent e) {

        }
    });

    imgFrame.addMouseMotionListener(new MouseMotionListener() {

        @Override
        public void mouseDragged(MouseEvent e) {
            System.out.println("hello");
        }

        @Override
        public void mouseMoved(MouseEvent e) {
            System.out.println("here");
            if (level == MyAppImage.DetectLevel.filtered) {
                if (image.checkPoints(e.getX(), e.getY(), level) != null) {
                    System.out.println("YES");
                }
                else {
                    System.out.println("NO!");
                }
            }
            else {
                System.out.println("Huh?");
            }
        }
    });
    return imgFrame;

}

正是@MadProgrammer 评论的内容 - 当您调用 DisplayUtilities.display(mbfImg, imgFrame); 时,它会在您的 JFrame 中创建一个 ImageComponent,它本身就是一个 MouseListener

您应该可以直接将 MouseListener 添加到 ImageComponent