Ich habe einen JFrame, der eine große Anzahl von untergeordneten Komponenten hat. (Viele Ebenen) Gibt es eine Möglichkeit, einen Listener für alle Mausereignisse hinzuzufügen? Etwas wie KeyEventDispatcher?Wie kann ich alle Mausereignisse in einem JFrame/Swing erfassen?
Antwort
ein AWTEventListener Verwenden Sie die Mausevents zum ausfiltern:
long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK;
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener()
{
public void eventDispatched(AWTEvent e)
{
System.out.println(e);
}
}, eventMask);
Dies ist in unsignierten Applets nicht erlaubt – lexicalscope
Umsetzung aller mausbezogene Zuhörer in einer Klasse, und registrieren diese Klasse als Handler für alle Maus-Ereignisse im Zusammenhang
Maus Verwandte Schnittstellen
Mouselistener Mouse MouseWheelListener
Dies funktioniert nicht, da nur eine einzige Komponente in der Hierarchie das Mausereignis veröffentlichen wird. Dies würde erfordern, dass die Maus-Listener für jede Komponente in der Hierarchie registriert werden. –
würden Sie haben zu verwenden JFrame's glassPane: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFrame.html#getGlassPane()
Erhalten Sie einfach die Glasscheibe eines JFrame mit frm.getGlassPane() und verwenden Sie addMouseListener(), um alle Mausereignisse innerhalb des Fensters zu erfassen.
Sie könnten eine Unterklasse von MouseAdapter
implementieren, eine abstrakte Klasse, die leere Implementierungen aller in den Schnittstellen Mouse*Listener
definierten Methoden bereitstellt. Sobald Sie das tun, können Sie es mit Ihren untergeordneten Komponenten als MouseListener
registrieren, wenn sie erstellt werden. Wenn Sie angeben, dass sich Ihre Komponenten "ändern", sollten Sie sicherstellen, dass Sie die Registrierung auch aufheben, wenn Sie Ihre Komponenten während des Lebenszyklus Ihres JFrame freigeben möchten.
Sie könnten einen GlassPane über Ihre gesamte JFrame hinzufügen, fügen Sie ein MouseInputAdapter es alle möglichen Mausereignisse zu packen, und dann mit [SwingUtilities.getDeepestComponentAt()] [3] die tatsächliche Komponente zu erhalten und [SwingUtilities.convertMouseEvent ()] [4] um das Mausereignis von der Glasscheibe an die tatsächliche Komponente zu delegieren.
Ich bin mir jedoch nicht sicher über die Auswirkungen der Leistung - im Gegensatz zu KeyEventDispatcher, die nur ein Ereignis auslösen muss, wenn eine Taste gedrückt wird, mehrere Ereignisse generiert werden, während der Benutzer die Maus bewegt - und im Gegensatz zu KeyEventDispatcher müssen das Ereignis erneut an die untere Komponente senden, damit sie es verarbeiten kann.
(Sorry - Stackoverflow ist nicht die Links zu den SwingUtilities Methoden Umgang mit richtig ... Links zeigen unten und nicht im Text.)
[3]: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/SwingUtilities.html#getDeepestComponentAt(java.awt.Component, int, int) [4 ]: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/SwingUtilities.html#convertMouseEvent(java.awt.Component, java.awt.event.MouseEvent, java.awt.Component)
- 1. Erfassen aller Mausereignisse in einem Container
- 2. Kann ich mit Python Tastatur- und Mausereignisse in OSX erfassen?
- 3. Wie erfassen gehäutete Flex UIComponents Mausereignisse?
- 4. Kann ich Mausereignisse in einem QGraphicsItem bekommen?
- 5. Wie erfassen Sie Mausereignisse in FF, über Shockwave Object
- 6. Wie kann ich Mausereignisse in MDI einleiten?
- 7. Wie kann ich Berührungsereignisse in einem UITableView-Abschnittsheader erfassen?
- 8. Wie kann ich Mausereignisse erfassen, die außerhalb eines (WPF) Fensters auftreten?
- 9. Knoten webkit- Iframe-Mausereignisse vom übergeordneten Fenster erfassen
- 10. Wie kann ich auf Mausereignisse in Outlook zugreifen?
- 11. Flash: Wie kann ich alle Mausereignisse für eine extern geladene SWF vorübergehend deaktivieren oder blockieren
- 12. C# Winforms - Wie kann ich Benutzersteuerelemente (mit Kindern) in einem Datagridview gehostet reagieren auf Mausereignisse?
- 13. Wie kann ich mehrere Ausnahmen erfassen?
- 14. Wie kann ich Rsync-Fortschrittsnachrichten in Perl erfassen?
- 15. , wie man richtig alle stdout/stderr erfassen
- 16. Erfassen Sie alle Ereignisse (JavaScript)
- 17. Wie kann ich UTF-8-Dekodierungsfehler in node.js erfassen?
- 18. Wie kann ich alle Befehle erfassen und in der Befehlszeile ausgeben?
- 19. Wie kann ich alle Methoden in einem Protokoll bekommen?
- 20. Wie kann ich alle Initialisierungen in einem Text finden?
- 21. Wie kann ich alle Kontrollkästchen in einem Formular durchlaufen?
- 22. Wie kann ich alle Nullelemente in einem Swift-Array entfernen?
- 23. Wie kann ich alle Module in einem CVS-Repository auflisten?
- 24. Wie kann ich alle Dateinamen in einem Verzeichnis abrufen?
- 25. Wie kann ich alle Guids in einem Text finden?
- 26. Wie kann ich alle Subs in einem Perl-Paket exportieren?
- 27. Html2canvas - wie alle div zu erfassen?
- 28. Wie kann ich html5 Leinwand in Android Webview erfassen?
- 29. Wie kann ich das Rechtklickereignis in JavaScript erfassen?
- 30. Wie kann ich einen Tastendruck (Key-Logging) in Linux erfassen?
warum ist diese Community Wiki? – akf