JFrame でのマウス イベント (具体的には、マウスの入力および終了イベント) の通知を受け取りたいです。しかし、マウスリスナーを追加すると、フレーム全体ではなく、フレームの境界でイベントが取得されます。
理由についてのアイデアはありますか?
編集:または、少なくとも代替手段はありますか?JFrame でマウス イベントをキャッチする「グローバルな」方法が必要です。たぶん、マウスリスナーは答えではありません。
JFrame でのマウス イベント (具体的には、マウスの入力および終了イベント) の通知を受け取りたいです。しかし、マウスリスナーを追加すると、フレーム全体ではなく、フレームの境界でイベントが取得されます。
理由についてのアイデアはありますか?
編集:または、少なくとも代替手段はありますか?JFrame でマウス イベントをキャッチする「グローバルな」方法が必要です。たぶん、マウスリスナーは答えではありません。
すべてのイベントを取得し、それらのソースが JFrame のコンポーネントであるかどうかを確認できます。
Toolkit.addAWTEventListenerを参照してください。
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 アプリケーションがこれを実行できるという利点があります。