Hallo zusammen,
ich bin seit einigen Tagen dabei, mich mit SWT vertraut zu machen (ich habe bislang hauptsächlich mit Swing gearbeitet). Dabei bin ich auf ein Problem gestoßen.
Im Groben schaut mein Fenster aktuell so aus:
Auf dem grau hinterlegten Composite wird ein MouseWheelListener eingehängt (via composite.addMouseWheelListener(...) ). Dieser soll den Inhalt des Composites vergrößern bzw verkleinern wenn der Benutzer das Mausrad bewegt - das funktioniert soweit auch prima.
Allerdings wird dieser Listener immer aufgerufen wenn sich das Mausrad bewegt, und zwar ganz unabhängig davon, wo sich der Mauszeiger gerade befindet.
Meine Frage wäre daher: wie stellt man es in SWT am Besten an, dass ein MouseWheelListener nur dann aufgerufen wird, wenn sich die Maus auf einer bestimmten Komponente der GUI (oder einem ihrer Kinder) befindet?
Versucht habe ich bislang:
Muss ich wirklich die erste Variante wählen und die gesamte Composite-Hierarchie durchgehen? Das muss doch auch einfacher gehen oder?
Gruß,
Alan
ich bin seit einigen Tagen dabei, mich mit SWT vertraut zu machen (ich habe bislang hauptsächlich mit Swing gearbeitet). Dabei bin ich auf ein Problem gestoßen.
Im Groben schaut mein Fenster aktuell so aus:
Auf dem grau hinterlegten Composite wird ein MouseWheelListener eingehängt (via composite.addMouseWheelListener(...) ). Dieser soll den Inhalt des Composites vergrößern bzw verkleinern wenn der Benutzer das Mausrad bewegt - das funktioniert soweit auch prima.
Allerdings wird dieser Listener immer aufgerufen wenn sich das Mausrad bewegt, und zwar ganz unabhängig davon, wo sich der Mauszeiger gerade befindet.
Meine Frage wäre daher: wie stellt man es in SWT am Besten an, dass ein MouseWheelListener nur dann aufgerufen wird, wenn sich die Maus auf einer bestimmten Komponente der GUI (oder einem ihrer Kinder) befindet?
Versucht habe ich bislang:
Java:
public void onMouseWheel(MouseEvent e){
// schlecht, da es nicht funktioniert wenn der cursor auf einem Kind vom Composite sitzt.
// funktioniert zumindest teilweise.
if(getComposite().getDisplay().getCursorControl() == getComposite()){
// ändere zoom-level
}
}
Java:
public void onMouseWheel(MouseEvent e){
// schlecht, da e.x und e.y relativ zur Component sind die das Event ausgelöst hat.
// sprich: das funktioniert überhaupt nicht.
if(getComponent().getBounds().contains(e.x, e.y)){
// ändere zoom-level
}
}
Muss ich wirklich die erste Variante wählen und die gesamte Composite-Hierarchie durchgehen? Das muss doch auch einfacher gehen oder?
Gruß,
Alan