質問

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アプリケーションがこれを実行できるという利点があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top