2015-07-10 83 views
0

我正在嘗試將鼠標監聽功能添加到顯示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; 

}

+1

如果您附加'MouseListener'的組件具有也具有'MouseListener's的子組件,那麼您的偵聽器將永遠不會收到通知,因爲子組件將消耗/捕獲事件 – MadProgrammer

回答

1

究竟是什麼@MadProgrammer評論 - 當你調用DisplayUtilities.display(mbfImg, imgFrame);它創建你的JFrame這本身就是一個MouseListener內的ImageComponent

但是,您應該可以直接將MouseListener添加到ImageComponent