SWT 模拟键盘事件
导言
在GUI设计中,我们往往要模拟鼠标和键盘事件,在java 的awt 中的java.awt.Robot; 类就可以进行模拟。但是在SWT中,我尝试了一下,会抛出空指针异常,或许是我写得有问题,或许是SWT不能用Robot类来模拟,这个我没有进一步去验证,感兴趣的同志们可以去尝试一下。
下面来说说怎么在SWT中模拟键盘按键的按下。
思路
实现一个Runnable接口SimulateButtonDown去生成一个KeyEevnet,然后发送出去给KeyAdapeter进行捕获处理。
验证
为了验证上述方案是否可行,我写了一个只有两个按钮的简单GUI窗口。
SimulateButtonDown类:
package com.lks.test;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
public class SimulateButtonDown implements Runnable {
private char ch;
private Display display;
public SimulateButtonDown(char ch, Display display) {
this.ch = ch;
this.display = display;
}
/*
* (非 Javadoc)
*
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
Event e = new Event();
System.out.println("before run : " + this.ch);//查看修改字符
e.type = SWT.KeyDown;//修改事件类型
e.character = this.ch;//修改相应的字符
System.out.println("After run : " + e.character);//查看是否被正确赋值
display.post(e);
}
}
Windows类:
package com.lks.test;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;