5

JFrame でのマウス イベント (具体的には、マウスの入力および終了イベント) の通知を受け取りたいです。しかし、マウスリスナーを追加すると、フレーム全体ではなく、フレームの境界でイベントが取得されます。

理由についてのアイデアはありますか?

編集:または、少なくとも代替手段はありますか?JFrame でマウス イベントをキャッチする「グローバルな」方法が必要です。たぶん、マウスリスナーは答えではありません。

4

4 に答える 4

6

すべてのイベントを取得し、それらのソースが JFrame のコンポーネントであるかどうかを確認できます。

Toolkit.addAWTEventListenerを参照してください。

于 2009-09-10T23:31:37.650 に答える
5

GUI 全体を覆う非表示のコンポーネントである「グラス ペイン」があります。それにリスナーをアタッチできます。例:

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

傍受したイベントを基になるコンポーネントに渡す場合は、それらを再ディスパッチできます。例えば:

public void mouseMoved(MouseEvent e) {
    redispatchMouseEvent(e, false);
}
于 2009-09-10T22:42:28.937 に答える
2

コンテンツ (おそらく JPanel ) が「シャドーイング」してイベントを消費し、JFrame に到達しないためです。

できることは、同じリスナーをすべての子に追加することです。もっと良い方法があるはずです。

于 2009-09-10T22:38:50.430 に答える
2

に代わる方法AWTEventListenerは、 をプッシュすることEventQueueです。これには、アプレットと WebStart アプリケーションがこれを実行できるという利点があります。

于 2009-09-11T00:43:58.473 に答える