我正在尝试向显示 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/