Mam JFrame, który ma wiele zmieniających się komponentów potomnych. (Wiele warstw) Czy istnieje sposób dodania detektora dla wszystkich zdarzeń myszy? Coś jak KeyEventDispatcher?Jak przechwycić wszystkie zdarzenia myszy w JFrame/Swing?
Odpowiedz
Użyj AWTEventListener odfiltrować 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);
Nie jest to dozwolone w niepodpisanych apletach – lexicalscope
Wdrożenie wszystkich słuchaczy związane z myszy, w klasie, i zarejestrować tę klasę jako przewodnika dla wszystkich zdarzeń myszy związanych interfejsy
Mysz Powiązane byłoby
MouseListener MouseMotionListener MouseWheelListener
To nie działa, ponieważ wydawca myszy opublikuje tylko jeden składnik w hierarchii. Wymagałoby to zarejestrowania nasłuchiwania myszy na każdym komponencie w hierarchii. –
Masz używać szklanej tafli JFrame: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFrame.html#getGlassPane()
Po prostu zdobądź szybę JFrame z frm.getGlassPane() i użyj addMouseListener() na nim, aby przechwycić wszystkie zdarzenia myszy w oknie.
Możesz zaimplementować podklasę klasy MouseAdapter
, która zapewnia puste implementacje wszystkich metod zdefiniowanych w interfejsach Mouse*Listener
. Gdy to zrobisz, możesz zarejestrować go z komponentami potomnymi jako MouseListener
, gdy zostaną utworzone. Kiedy zaznaczysz, że twoje komponenty się "zmieniają", będziesz chciał się upewnić, że wyrejestrujesz również swojego słuchacza, jeśli masz nadzieję na wypuszczenie swoich komponentów podczas cyklu życia JFrame.
Można dodać GlassPane ciągu całego JFrame, dodać MouseInputAdapter do niego złapać wszystkie możliwe zdarzenia myszy, a następnie użyj [SwingUtilities.getDeepestComponentAt()], [3], aby uzyskać rzeczywisty komponent i [SwingUtilities.convertMouseEvent ()] [4], aby przekazać zdarzenie myszy ze szklanej tafli do rzeczywistego komponentu.
Nie jestem jednak pewien wpływu na wydajność - w przeciwieństwie do KeyEventDispatcher, który musi wywołać zdarzenie po naciśnięciu klawisza, wiele zdarzeń jest generowanych, gdy użytkownik porusza myszą - w przeciwieństwie do KeyEventDispatcher, trzeba ponownie wysłać zdarzenie do niższego komponentu, aby mógł go obsłużyć.
(Niestety - nie jest stackoverflow obsługi linki do metod SwingUtilities poprawnie ... linki są wyświetlane poniżej, a nie w tekście).
[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. Jak przechwycić wszystkie zdarzenia dotyku?
- 2. Jak przechwycić wszystkie wyjątki w kolbie?
- 3. Jak przechwycić wszystkie wywołania metod w usłudze WCF .svc?
- 4. Jak przechwycić wszystkie zdarzenia na klawiaturze i zapobiec utracie ostrości w aplikacji WinForm?
- 5. D3 Zdarzenia myszy - Click & DragEnd
- 6. WPF: Jak dołączać zdarzenia myszy do viewmodelu?
- 7. Jak przekierować zdarzenia myszy do innej kontrolki?
- 8. Zdarzenia myszy krwawiące przez NSView
- 9. Jak wyłączyć zdarzenia kółka myszy w widżetach dijit.form.NumberSpinner?
- 10. Jak usunąć wszystkie zdarzenia w MySQL
- 11. Jak można przechwycić zdarzenia dotyku do nagłówka sekcji UITableView?
- 12. Zdarzenia myszy Java są ignorowane podczas przenoszenia myszy?
- 13. Jak mogę przechwycić wszystkie wyjątki w aplikacji na iPhone'a
- 14. Jak przechwycić zdarzenia Attribute za pomocą analizatora składni XML StAX?
- 15. Przechwytuj wszystkie zdarzenia (javascript)
- 16. Subskrybowanie zdarzeń myszy wszystkich formantów w formularzu
- 17. OpenCV 2.3 z VS 2008 - zdarzenia myszy
- 18. Mapowanie zdarzeń dotykowych JavaScript na zdarzenia myszy
- 19. tranzytowej zdarzenia myszy do formantu nadrzędnego
- 20. propagować zdarzenia myszy do ukrytych elementów
- 21. Sposób uruchamiania zdarzenia myszy podczas przeciągania
- 22. Wykrywanie zdarzenia kliknięcia środkowym przyciskiem myszy jQuery
- 23. odzyskać ten sam offsetX na dotknięciu, takie jak zdarzenia myszy
- 24. Jak mogę przechwytywać zdarzenia myszy, które występują poza oknem (WPF)?
- 25. Otrzymuj zdarzenia myszy poza oknem Tkintera w Pythonie
- 26. Zobacz wszystkie zdarzenia w domenie dla elementu
- 27. Obsługa zdarzenia myszy w dowolnym miejscu z JavaFX
- 28. Jak przechwycić wartość wejściową w przypadku wklejania?
- 29. Okno pygtk z ramką, która ignoruje wszystkie zdarzenia X (myszy) (przechodzi przez nie)
- 30. Jak przechwycić sygnał w QML?
dlaczego to jest Wiki? – akf