JFrameにすべてのオブジェクトから到着したすべてのマウスモーションメッセージを制御するためにJFrameにMouseMotionListenerを追加しましたが、JLayeredPane上でマウスを動かすとメッセージは生成されません。 JFrameに中央のMouseMotionListenerを追加して、その中のすべてのオブジェクトからのすべてのメッセージを制御するのを助けてください。Javaの中心的なMouseMotionListener
大変感謝しています。
JFrameにすべてのオブジェクトから到着したすべてのマウスモーションメッセージを制御するためにJFrameにMouseMotionListenerを追加しましたが、JLayeredPane上でマウスを動かすとメッセージは生成されません。 JFrameに中央のMouseMotionListenerを追加して、その中のすべてのオブジェクトからのすべてのメッセージを制御するのを助けてください。Javaの中心的なMouseMotionListener
大変感謝しています。
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を参照してください。
以下は、すべてのコンポーネントに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);
}
}
}
javaには、すべてのコンポーネントからのすべてのメッセージを表示するメソッドはありませんか? (つまり、jframeにすべてのオブジェクトが含まれていて、すべてのメッセージに一元的なコントロールがあることを意味します)。 – MicroSystem
JFrameのサブコンポーネントもイベントをリッスンし、そのリスナーがフレームのリスナーがやりたいことの反対を実行したい場合にどうなるでしょうか? – FredK
私はそれについて詳しくは分かりませんが、スーパーコンポーネントはサブコンポーネントのマッサージを*消費することができます(問題は発生しません)。 – MicroSystem
ありがとうございます...しかし、私はawt(私は私の質問の最後にスイングタグを追加している)ではないスイングを使用しています。 – MicroSystem
@MicroSystem、問題ではありません。 SwingはAWT上に構築されています。 AWT MouseEventやSwing MouseEventなどはありません。MouseEventはMouseEventです。 – camickr