Ho un JFrame con un numero elevato di componenti figlio modificabili. (Molti livelli) C'è un modo per aggiungere un listener per tutti gli eventi del mouse? Qualcosa come KeyEventDispatcher?Come posso catturare tutti gli eventi del mouse in un JFrame/Swing?
risposta
Utilizzare un AWTEventListener per filtrare le MouseEvents:
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);
Questo non è consentito nelle applet non firmate – lexicalscope
Attuare tutti gli ascoltatori di topo legati in una classe, e registrare quella classe come il gestore per tutti gli eventi correlati del mouse interfacce
mouse Correlati sarebbero
MouseListener MouseMotionListener MouseWheelListener
Ciò non funziona poiché solo un singolo componente nella gerarchia pubblica l'evento del mouse. Quindi ciò richiederebbe la registrazione del listener di mouse su ogni componente nella gerarchia. –
Hai per usare JFrame's glassPane: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFrame.html#getGlassPane()
Basta prendere il vetro di un JFrame con frm.getGlassPane() e utilizzare addMouseListener() su di esso per catturare tutti gli eventi del mouse all'interno della finestra.
È possibile implementare una sottoclasse di MouseAdapter
, una classe astratta che fornisce le implementazioni vuote di tutti i metodi definiti nelle interfacce Mouse*Listener
. Una volta che lo fai, puoi registrarlo con i componenti figlio come MouseListener
quando vengono creati. Mentre indicherai che i tuoi componenti stanno "cambiando", vorrai assicurarti di annullare la registrazione del listener anche se speri di rilasciare i componenti durante il ciclo di vita di JFrame.
si potrebbe aggiungere un GlassPane su tutto il JFrame, aggiungere un MouseInputAdapter ad esso per afferrare tutti i possibili eventi del mouse, e quindi usare [SwingUtilities.getDeepestComponentAt()] [3] per ottenere il componente effettivo e [SwingUtilities.convertMouseEvent ()] [4] per delegare l'evento del mouse dal riquadro di vetro al componente reale.
Tuttavia, non sono sicuro del l'impatto sulle prestazioni di questo - a differenza KeyEventDispatcher, che ha solo bisogno di generare un evento ogni volta che si preme un tasto, più eventi vengono generati quando l'utente sposta il mouse - e, a differenza KeyEventDispatcher, è è necessario inviare nuovamente l'evento al componente inferiore per gestirlo.
(Sorry - StackOverflow non gestisce i collegamenti ai metodi SwingUtilities correttamente ... i collegamenti stanno mostrando di seguito, piuttosto che nel testo.)
[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. Highcharts: STOP grafico da intrappolare gli eventi del mouse, o catturare un clic del mouse sul grafico INTERO
- 2. Ignorare gli eventi del mouse in coda
- 3. Come catturare gli eventi di visualizzazione ioni?
- 4. Come posso disattivare tutti gli eventi setTimeout?
- 5. Come reindirizzare gli eventi del mouse su un altro controllo?
- 6. Rendere un oggetto "trasparente" per gli eventi del mouse?
- 7. Cattura tutti gli eventi (javascript)
- 8. Eventi movimento del mouse in NCurses
- 9. Posso usare Python per catturare eventi di tastiera e mouse in OSX?
- 10. Sottoscrizione agli eventi del mouse di tutti i controlli nel modulo
- 11. MouseArea ha rubato gli eventi del mouse dell'elemento QML
- 12. È possibile SIMULARE un clic del mouse usando un mouse su e giù per gli eventi?
- 13. Elenco di tutti gli eventi Tkinter
- 14. Come cancellare tutti gli eventi in MySQL
- 15. Gli eventi touch di mappatura JavaScript per gli eventi del mouse
- 16. Come catturare un clic del mouse su un oggetto in un ListBox in WPF?
- 17. Come posso caricare tutti gli eventi sul calendario usando Ajax?
- 18. come svincolare tutti gli eventi utilizzando jQuery
- 19. iPad Safari per mappare gli eventi del mouse per toccare gli eventi nelle mappe di immagini
- 20. Gestione degli eventi del mouse in livelli SVG sovrapposti
- 21. css: stile tutti gli elementi prima del passaggio del mouse
- 22. Come catturare e ri-lanciare tutti gli errori in MySQL
- 23. propagare gli eventi del mouse agli elementi oscurati
- 24. Come attivare eventi su tutti gli elementi
- 25. NSViewController lento a registrare gli eventi del mouse?
- 26. finestra pygtk con box che ignora tutti gli eventi X (mouse) (li passa attraverso)
- 27. Come intercettare tutti gli eventi touch?
- 28. Come posso determinare in modo affidabile se un browser supporta eventi di passaggio del mouse?
- 29. Ignora eventi mouse e tastiera in Qt
- 30. QGraphicsItem non riceve gli eventi di passaggio del mouse
perché è questo wiki comunità? – akf