我正在嘗試將鼠標監聽功能添加到顯示MBFImage的JFrame,並且鼠標事件完全不起作用。我不確定這些事件是否沒有解僱,或者他們是否因爲我做錯了事而未被抓到......OpenImaj - 將鼠標監聽器與JFrame一起使用
圖片在JFrame中顯示出來很好,但是將鼠標移到圖片上方,點擊,移動,拖動等不會導致任何活動。
注1:我發現,如果我的MouseListener添加到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;
}
如果您附加'MouseListener'的組件具有也具有'MouseListener's的子組件,那麼您的偵聽器將永遠不會收到通知,因爲子組件將消耗/捕獲事件 – MadProgrammer