我想在我的JFrame上收到鼠標事件(特別是鼠標進入和退出事件)的通知。但是,當我添加一個mouselistener它,我得到的幀的邊界上的事件,而不是整個幀的內容。JFrame上的MouseListener
任何想法爲什麼?
編輯:或者至少你有替代?我想要一個「全局」方法來捕獲JFrame上的鼠標事件。也許mouselistener不是答案。
我想在我的JFrame上收到鼠標事件(特別是鼠標進入和退出事件)的通知。但是,當我添加一個mouselistener它,我得到的幀的邊界上的事件,而不是整個幀的內容。JFrame上的MouseListener
任何想法爲什麼?
編輯:或者至少你有替代?我想要一個「全局」方法來捕獲JFrame上的鼠標事件。也許mouselistener不是答案。
你可以得到所有的事件,並檢查其來源是在JFrame中的組件。
由於內容(可能是一個JPanel)是「陰影」和消耗事件,他們沒有達到JFrame。
你可以做的是給所有的孩子添加同一個監聽器。應該有更好的方法。
有一個不可見的組件覆蓋整個GUI,即「玻璃窗格」。你可以附加你的聽衆。例如:
JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);
如果您希望將截獲的事件傳遞給底層組件,則可以重新分派它們。例如:
public void mouseMoved(MouseEvent e) {
redispatchMouseEvent(e, false);
}
到AWTEventListener
的替代方法是推送EventQueue
。這具有applet和WebStart應用程序可以執行此操作的優點。
我將不得不啓用它。這會阻止下面的組件接收事件 – 2009-09-10 22:43:30
您可以重新分配。看到我修改後的答案。 – SingleShot 2009-09-10 22:56:05
啓用玻璃窗格時存在整個問題。它最好在骯髒的富客戶端進行描述。你需要預見所有的問題並糾正它們。例如,您還需要考慮關鍵事件,鼠標光標更改等。我正在尋找一個現成的解決方案。這是爲了在幀級別上通知鼠標事件而設計的。 – 2009-09-10 22:58:35