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