2009-07-27 9 views

Odpowiedz

18

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); 
+1

Nie jest to dozwolone w niepodpisanych apletach – lexicalscope

0

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

+1

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. –

0

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.

+0

MouseInputAdapter - MouseAdapter jest tylko implementacją MouseListener (kliknięcia, brak ruchu lub kółko przewijania). – Nate

+0

Nate, dzięki za odpowiedź. Patrząc na kod widzę, że MouseAdapter implementuje wszystkie trzy interfejsy. – akf

7

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)

Powiązane problemy