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.

War es hilfreich?

Lösung

Sie können alle Ereignisse abrufen und überprüfen, ob ihre Quelle eine Komponente im JFRame ist.

Sehen Toolkit.AddAwTEventListener

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top