2016-05-27 5 views
1

JFrameにすべてのオブジェクトから到着したすべてのマウスモーションメッセージを制御するためにJFrameにMouseMotionListenerを追加しましたが、JLayeredPane上でマウスを動かすとメッセージは生成されません。 JFrameに中央のMouseMotionListenerを追加して、その中のすべてのオブジェクトからのすべてのメッセージを制御するのを助けてください。Javaの中心的なMouseMotionListener

大変感謝しています。

答えて

2

AWTventListenerを使用して、すべてのAWTメッセージをリスンしたいとします。次のコード

は、マウスやキーイベントをリッスンする方法を示しています。

long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK 
    + AWTEvent.MOUSE_EVENT_MASK 
    + AWTEvent.KEY_EVENT_MASK; 

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() 
{ 
    public void eventDispatched(AWTEvent e) 
    { 
     System.out.println(e.getID()); 
    } 
}, eventMask); 

詳細についてはGlobal Event Listenersを参照してください。

+0

ありがとうございます...しかし、私はawt(私は私の質問の最後にスイングタグを追加している)ではないスイングを使用しています。 – MicroSystem

+0

@MicroSystem、問題ではありません。 SwingはAWT上に構築されています。 AWT MouseEventやSwing MouseEventなどはありません。MouseEventはMouseEventです。 – camickr

3

以下は、すべてのコンポーネントにMouseMotionListenerを再帰的に追加するためのコードです。生成されたMouseEventを処理するには、SwingUtilitiesを使用して、Pointを特定のComponentの領域からJFrameの領域に変換する必要があることに注意してください。

public static void installMouseMotionListenerOnAll(Component c, MouseMotionListener mml) { 
    c.addMouseMotionListener(mml); 
    if (c instanceof Container) { 
    for (Component child : ((Container)c).getComponents()) { 
     installMouseMotionListenerOnAll(child, mml); 
    } 
    } 
} 
+0

javaには、すべてのコンポーネントからのすべてのメッセージを表示するメソッドはありませんか? (つまり、jframeにすべてのオブジェクトが含まれていて、すべてのメッセージに一元的なコントロールがあることを意味します)。 – MicroSystem

+0

JFrameのサブコンポーネントもイベントをリッスンし、そのリスナーがフレームのリスナーがやりたいことの反対を実行したい場合にどうなるでしょうか? – FredK

+0

私はそれについて詳しくは分かりませんが、スーパーコンポーネントはサブコンポーネントのマッサージを*消費することができます(問題は発生しません)。 – MicroSystem

関連する問題