java - OpenImaj - 将 MouseListener 与 JFrame 结合使用

标签 java swing openimaj

我正在尝试向显示 MBFImage 的 JFrame 添加鼠标监听功能,但鼠标事件绝对不执行任何操作。我不确定事件是否没有触发,或者是否因为我做错了什么而没有被捕获......

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

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

注 2 如果我将面板添加到 JFrame 然后绘制图像,窗口大小就很好,但鼠标监听器不再工作。

任何人都可以阐明吗?

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

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 中。

关于java - OpenImaj - 将 MouseListener 与 JFrame 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31350743/

相关文章:

java - OpenIMAJ人脸识别中的rfaces.get(0).getSecondObject()总是返回null

java - Android Studio 和 openimaj

java - 接受带有 toString() 方法的任何对象作为参数

java - JTextArea 到 ScrollPane 不起作用

java - 明确表示不识别 JAXBElement

java - 将图像添加到 JTable

java - 如何在没有按钮的情况下主动(立即)检查 JFrame 表单中文本框的值?

java - 如何扩展 FlowLayout 以使组件的大小能够占用尽可能多的空间?

java - 有 Java 中的 MPXJ 示例吗?