RCP Canvas in einer View?

lam_tr

Top Contributor
Guten morgen zusammen,

wieso kann ich eine Canvas-Objekt in einer View nicht auf MouseWheelListener sonstige Listener reagieren lassen ausser PaintListener?

Java:
		Canvas canvas = new Canvas(parent, SWT.BORDER);
		Listener listener = new Listener() {
			int zoomFactor = 50;

			public void handleEvent(Event event) {
				switch (event.type) {
				case SWT.MouseWheel:
					zoomFactor = Math.max(0, zoomFactor + event.count);
					Canvas canvas = (Canvas) event.widget;
					canvas.redraw();
					break;
				case SWT.Paint:
					event.gc.drawText("Zoom = " + zoomFactor, 10, 10);
					break;
				}
			}
		};
		canvas.addListener(SWT.MouseWheel, listener);
		canvas.addListener(SWT.Paint, listener);

Wenn ich beispielsweise den Code in meine View kopiere und ausführe, wird der Text angezeigt, reagiert aber nicht auf Mausrad, warum nicht?

Anfangs dachte ich wegen das updaten der Canvas. Bei einigen Seiten habe ich gesehen dass man die Canvas über layout() aktualisieren kann. Aber irgendwie schon bei Debuggen sprint der nicht in den Listener bei Aktivierung des Mausrad.

vielen Dank!

Gruss lam
 
Hast du mal einen Breakpoint gesetzt? Springt er denn überhaupt in den Case?
Wenn nein, solltest du Windows verwenden, dann muss dein Canvas den Fokus haben um Mouse Wheel Events zu bekommen, vielleicht ist das dein Problem.
 
hi Wildcard,

der Debugger springt nicht in den Case Fall rein, das ist ja das was ich sehr komisch finde. was aber noch viel komischer ist, schon an der Stelle mit dem addListener wird nicht gestoppt, das heißt der Canvas reagiert nicht auf Listener.

Wie soll ich das jetzt mit "Window" benutzen?

Gruss lam
 
Hi Wildcard,

auch wenn ich den Canvas in Fokus setze funktioniert nicht. Ich hab ein Workaround gemacht indem ich die Canvas und View Klasse von MouseWheelListener ableite und den Event übergebe.

Gruss lam
 

Zurück
Oben