Mouselistener auf JFrame
-
05-07-2019 - |
Frage
Ich möchte in meinem JFRame über Mausereignisse (insbesondere die Ereignisse der Maus eingegeben und beendet) benachrichtigt werden. Aber wenn ich einen Mouselistener füge, bekomme ich die Ereignisse an den Grenzen des Rahmens, nicht den gesamten Rahmen mit seinem Inhalt.
Irgendwelche Ideen, warum?
Bearbeiten: Oder haben Sie zumindest eine Alternative? Ich möchte eine "gloabale" Möglichkeit, Mausereignisse auf dem JFRame zu fangen. Vielleicht ist ein Mouselistener nicht die Antwort.
Lösung
Sie können alle Ereignisse abrufen und überprüfen, ob ihre Quelle eine Komponente im JFRame ist.
Andere Tipps
Es gibt eine unsichtbare Komponente, die die gesamte GUI, die "Glasscheibe", überlagert. Sie können Ihre Zuhörer daran anbringen. Beispiel:
JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);
Wenn Sie möchten, dass Ihre abgefangenen Ereignisse an die zugrunde liegenden Komponenten übergehen, können Sie sie neu anpassen. Zum Beispiel:
public void mouseMoved(MouseEvent e) {
redispatchMouseEvent(e, false);
}
Weil der Inhalt (wahrscheinlich ein JPanel) "beschattet" und die Ereignisse verbraucht und nicht den JFrame erreicht.
Was Sie tun können, ist, allen Kindern denselben Zuhörer hinzuzufügen. Es sollte jedoch einen besseren Weg geben.
Eine Alternative zu AWTEventListener
ist ein Drücken eines EventQueue
. Dies hat den Vorteil, dass Applets und Webstart -Anwendungen dies tun können.