2009-09-10 44 views
5

我想在我的JFrame上收到鼠標事件(特別是鼠標進入和退出事件)的通知。但是,當我添加一個mouselistener它,我得到的幀的邊界上的事件,而不是整個幀的內容。JFrame上的MouseListener

任何想法爲什麼?

編輯:或者至少你有替代?我想要一個「全局」方法來捕獲JFrame上的鼠標事件。也許mouselistener不是答案。

回答

2

由於內容(可能是一個JPanel)是「陰影」和消耗事件,他們沒有達到JFrame。

你可以做的是給所有的孩子添加同一個監聽器。應該有更好的方法。

5

有一個不可見的組件覆蓋整個GUI,即「玻璃窗格」。你可以附加你的聽衆。例如:

JFrame frame = new JFrame(); 
Component glassPane = frame.getGlassPane(); 
glassPane.addMouseListener(myListener); 

如果您希望將截獲的事件傳遞給底層組件,則可以重新分派它們。例如:

public void mouseMoved(MouseEvent e) { 
    redispatchMouseEvent(e, false); 
} 
+0

我將不得不啓用它。這會阻止下面的組件接收事件 – 2009-09-10 22:43:30

+0

您可以重新分配。看到我修改後的答案。 – SingleShot 2009-09-10 22:56:05

+0

啓用玻璃窗格時存在整個問題。它最好在骯髒的富客戶端進行描述。你需要預見所有的問題並糾正它們。例如,您還需要考慮關鍵事件,鼠標光標更改等。我正在尋找一個現成的解決方案。這是爲了在幀級別上通知鼠標事件而設計的。 – 2009-09-10 22:58:35

2

AWTEventListener的替代方法是推送EventQueue。這具有applet和WebStart應用程序可以執行此操作的優點。