JFrame上のMouseListener
-
05-07-2019 - |
質問
JFrameでマウスイベント(具体的には、マウスが入力および終了したイベント)の通知を受け取りたい。しかし、マウスリスナーを追加すると、その内容を持つフレーム全体ではなく、フレームの境界でイベントが発生します。
理由について何かアイデアはありますか?
編集:または、少なくとも代替手段はありますか? 「グロバル」が欲しいJFrameでマウスイベントをキャッチする方法。たぶんマウスリスナーは答えではありません。
解決
すべてのイベントを取得し、そのソースがJFrameのコンポーネントであるかどうかを確認できます。
他のヒント
GUI全体を覆う非表示のコンポーネント、「ガラスペイン」があります。それにリスナーをアタッチできます。例:
JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);
インターセプトされたイベントを基になるコンポーネントに渡す場合は、それらを再ディスパッチできます。例:
public void mouseMoved(MouseEvent e) {
redispatchMouseEvent(e, false);
}
コンテンツ(おそらくJPanel)は「シャドウイング」であるためイベントを消費しても、JFrameに到達しません。
できることは、すべての子に同じリスナーを追加することです。しかし、もっと良い方法があるはずです。
AWTEventListener
の代わりに、 EventQueue
をプッシュします。これには、アプレットとWebStartアプリケーションがこれを実行できるという利点があります。
所属していません StackOverflow