程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 使用SWT中Display的Post方法控制鍵盤

使用SWT中Display的Post方法控制鍵盤

編輯:關於JAVA

最近在實現一個圖片壓縮的功能,想在Eclipse.org上看有沒有辦法能夠通過SWT的API能 夠改變圖片的分辨率,Eclipse.org上面提供了好些SWT的例子,發現了Display的post方法挺 有趣的,以前沒有注意到,現在趕快把它記錄下來,post方法的參數為Event,通過制定這個 Events的屬性,可以控制系統的鍵盤事件,比如保持shift鍵一直按著。下面是代碼:

1 import org.eclipse.swt.*;
2 import  org.eclipse.swt.widgets.*;
3
4 /**
5  * 觸發系統的鍵盤事件。
6   * @author vwpolo
7  * <p>2009-6-1</p>
8  */
9  public class Snippet146 {
10
11 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);

這樣就基本上模擬出了系統鼠標的動作了。大家有興趣可以研究一下,比如用它來做點壞 事情,呵呵

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved