Display 有这么一个方法:
public void addFilter (int eventType, Listener listener)
也就是给Display添加一个全局的监听.比如:上面的为程序定义快捷键Ctrl+a.
这个Display的Filter很强大, 无论当前焦点在哪个控件上,都可以监听这个Ctrl+a的事件.
如果界面中还有其他的控件也监听这个快捷键的话, 那么这个Display中的监听会比其他控件的监听先执行.
下面的代码来自
http://www.vogella.de/articles/SWT/article.html
Define a global keylistener for your Display
You can define a global keylistener on your display to listen globally to all key events as long as your application has focus. The following demonstrates this.
package de.vogella.swt.listener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
public class GlobalListener {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.open();
display.addFilter(SWT.KeyDown, new Listener() {
@Override
public void handleEvent(Event event) {
char c = event.character;
System.out.println(c);
}
});
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}