使用SWT中Display的Post方法控制键盘

最近在实现一个图片压缩的功能,想在Eclipse.org上看有没有办法能够通过SWT的API能 够改变图片的分辨率,Eclipse.org上面提供了好些SWT的例子,发现了Display的post方法挺 有趣的,以前没有注意到,现在赶快把它记录下来,post方法的参数为Event,通过制定这个 Events的属性,可以控制系统的键盘事件,比如保持shift键一直按着。下面是代码:

1 import org.eclipse.swt.*;2 import  org.eclipse.swt.widgets.*;34 /**5  * 触发系统的键盘事件。6   * @author vwpolo7  * 

2009-6-1

8  */9  public class Snippet146 {1011 public static void main(String[]  args) {12     final Display display = new Display();13      final Shell shell = new Shell(display);14     final Text text  = new Text(shell, SWT.BORDER);15     text.setSize(text.computeSize (150, SWT.DEFAULT));16     shell.pack();17     shell.open ();18     new Thread(){19         public void run() {20             String string = "Love the method.";21              for (int i = 0; i < string.length(); i++)  {22                 char ch = string.charAt(i);23                  boolean shift = Character.isUpperCase(ch);24                  ch = Character.toLowerCase(ch);25                  if (shift) {26                      Event event = new Event();27                      event.type = SWT.KeyDown;28                      event.keyCode = SWT.SHIFT;29                      display.post(event);30                 }31                  Event event = new Event();32                  event.type = SWT.KeyDown;33                  event.character = ch;34                 display.post (event);35                 try {36                      Thread.sleep(10);37                 }  catch (InterruptedException e) {}38                  event.type = SWT.KeyUp;39                 display.post (event);40                 try {41                      Thread.sleep(100);42                 }  catch (InterruptedException e) {}43                 if  (shift) {44                     event = new Event ();45                     event.type =  SWT.KeyUp;46                     event.keyCode =  SWT.SHIFT;47                     display.post (event);48                 }49              }50         }    51     }.start();52     while  (!shell.isDisposed()) {53         if (!display.readAndDispatch ()) display.sleep();54     }55     display.dispose();56  }57 }

上面的例子功能是演示在一个文本框中模拟用户输入一段字符串,字符串的内容是”Love the method.”,还可以通过这个来移动鼠标的箭头,像下面这样:

1 public static void main(String[] args) {2     final  Display display = new Display();3     final Shell shell = new  Shell(display);4     final Button button = new Button (shell,SWT.NONE);5     button.setSize(100,100);6      button.setText("Click");7     shell.pack();8     shell.open ();9     button.addListener(SWT.MouseDown, new Listener() {10          public void handleEvent(Event e){11              System.out.println("Mouse Down (button: " + e.button + " x: " + e.x  + " y: " + e.y + ")");12         }13     });14      final Point pt = display.map(shell, null, 50, 50);15      new Thread(){16         Event event;17          public void run(){18             try {19                  Thread.sleep(300);20             } catch  (InterruptedException e) {}21             event = new  Event();22             event.type = SWT.MouseMove;23              event.x = pt.x;24             event.y =  pt.y;25             display.post(event);26              try {27                 Thread.sleep(300);28              } catch (InterruptedException e) {}29              event.type = SWT.MouseDown;30              event.button = 1;31             display.post(event);32              try {33                 Thread.sleep (300);34             } catch (InterruptedException e) {} 35             event.type = SWT.MouseUp;36              display.post(event);37         }    38      }.start();39     while (!shell.isDisposed()) {40          if (!display.readAndDispatch()) display.sleep();41     }42      display.dispose();43 }

首先创建一个100*100大小的按钮,然后通过display.map(shell, null, 50, 50);这 段代码获得指定shell上的相对坐标,这里是指shell的相对坐标上的x=50,y=50,然后再换算 成显示屏幕系统的绝对坐标,设置事件类型为鼠标移动,移动的目标坐标位置是刚才我们取 得的系统坐标

event = new Event();event.type = SWT.MouseMove;event.x =  pt.x;event.y = pt.y;display.post(event);

在触发这个事件后,让它休眠0.3秒

try {Thread.sleep(300);} catch (InterruptedException e) {}

接着再将事件的类型设置为鼠标按下事件:

event.type = SWT.MouseDown;event.button = 1;display.post (event);

这样就基本上模拟出了系统鼠标的动作了。大家有兴趣可以研究一下,比如用它来做点坏 事情,呵呵

任何的限制,都是从自己的内心开始的。

使用SWT中Display的Post方法控制键盘

相关文章:

你感兴趣的文章:

标签云: