Events mitschneiden

mdunker

Mitglied
Hallo,

ich möchte gerne in Eclipse über alle Events informiert werden die so ausgelöst werden. Z.B. wenn der Anwender mit der Maus irgendwas anklickt oder Eingaben mit der Tastatur macht. Meine Frage ist nun, wie bekomme ich die Events mit die Ausgelöst werden? Hat jemand eine Idee wie man das realisieren könnte oder hat sogar schon mal etwas ähnliches gemacht?
Bin für jeden Hinweis dankbar.

Mfg Mirco
 
Hallo!


du musst nur an eine Referenz zum Display gelangen die das WorkbenchWindow enthält und dann fügst du diesem Display einfach für alle EventTypen einen Filter hinzu:
Java:
/**
 * 
 */
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

/**
 * @author Thomas.Darimont
 */
public class SWTTextInputVerificationExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Display display = new Display();
		Listener eventTraceListener = new Listener() {
			public void handleEvent(Event event) {
				System.out.println(event);
			}
		};
		for (int i = 0 /* SWT.None */; i <= 42 /* SWT.PaintItem */; i++) {
			display.addFilter(i, eventTraceListener);
		}

		Shell shell = new Shell(display);
		shell.setLayout(new RowLayout());
		Text text = new Text(shell, SWT.NONE);
		text.addVerifyListener(new VerifyListener() {
			public void verifyText(VerifyEvent e) {
				e.doit = e.text.matches("\\d*");
			}
		});

		shell.pack();
		shell.open();

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}
}


Für Swing / AWT könnte man das damals ganze einfach mit der EventQueue machen:
http://www.tutorials.de/forum/java/223299-alle-awtevents-abfangen-spy-fuer-java.html

Gruß Tom
 
Hi Tom,

Danke für die schnelle Antwort. Das klingt ja alles schon mal ganz gut. Aber eine Frage hab ich da noch und zwar was meinst du mit "du musst nur an eine Referenz zum Display gelangen die das WorkbenchWindow enthält"? Ist das WorkbenchWindow nicht nur z.B. das Editorfenster? Ich möchte ja auch die Events mitschneiden die bei der Interaktion mit dem Eclipse Menü gemacht werden. Oder hab ich das nur falsch verstanden?

Gruß Mirco
 
Guten Morgen,

Danke für die Antwort, war gestern zu spät um noch großartig was auszuprobieren ;)
Also gehts heute weiter und zwar gleich mit der nächsten Frage:

(wenn du im passenden Thread bist)

Was ist denn dann der passende Thread. Die Situation ist ja die das ich über ein eingenes Plugin zugriff auf Eclipse habe. Jetzt müsste ich ja von meinem Plugin irgendwie Zugriff auf das Eclipse Main Display bekommen?

Mfg Mirco
 
Hallo!

Das ist der Thread in dem das Display erzeugt wurde... wenn Display.getCurrent() nicht null zurück gibt bist du im richtigen Thread.

Gruß Tom
 
Zurück