好好生活,努力工作,天天向上!

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

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

           1 import org.eclipse.swt.*;
           2 import org.eclipse.swt.widgets.*;
           3 
           4 /**
           5  * 觸發(fā)系統(tǒng)的鍵盤事件  。 
           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 }

            上面的例子功能是演示在一個(gè)文本框中模擬用戶輸入一段字符串,字符串的內(nèi)容是"Love the method.",還可以通過這個(gè)來移動(dòng)鼠標(biāo)的箭頭,像下面這樣:
           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, 5050);
          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 }

              首先創(chuàng)建一個(gè)100*100大小的按鈕,然后通過display.map(shell, null, 50, 50);這段代碼獲得指定shell上的相對坐標(biāo),這里是指shell的相對坐標(biāo)上的x=50,y=50,然后再換算成顯示屏幕系統(tǒng)的絕對坐標(biāo),設(shè)置事件類型為鼠標(biāo)移動(dòng),移動(dòng)的目標(biāo)坐標(biāo)位置是剛才我們?nèi)〉玫南到y(tǒng)坐標(biāo)

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

           

            在觸發(fā)這個(gè)事件后,讓它休眠0.3

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

           

            接著再將事件的類型設(shè)置為鼠標(biāo)按下事件:

              event.type = SWT.MouseDown;
              event.button 
          = 1;
              display.post(event);
            
            這樣就基本上模擬出了系統(tǒng)鼠標(biāo)的動(dòng)作了。大家有興趣可以研究一下,比如用它來做點(diǎn)壞事情,呵呵
          posted on 2009-06-01 11:15 VWPOLO 閱讀(2126) 評論(3)  編輯  收藏 所屬分類: SWT JFace

          Feedback

          # re: 使用Display的Post方法控制鍵盤 2009-06-01 13:57 無量字幕
          呵呵,有意思  回復(fù)  更多評論
            

          # re: 使用Display的Post方法控制鍵盤 2009-06-01 22:55 俊星
          第二段代碼有點(diǎn)問題:
          14 final Point pt = display.map(shell, null, 100, 50);
          換成
          14 final Point pt = display.map(shell, null, 50, 50);
          才能看到控制臺輸出的鼠標(biāo)響應(yīng)事件。
            回復(fù)  更多評論
            

          # re: 使用Display的Post方法控制鍵盤 2009-06-02 09:08 VWPOLO
          @俊星
          謝謝提醒,已經(jīng)修正了  回復(fù)  更多評論
            

          主站蜘蛛池模板: 潮州市| 日照市| 江川县| 饶平县| 新疆| 洛宁县| 博湖县| 云南省| 柯坪县| 澄江县| 水城县| 福清市| 樟树市| 延吉市| 吐鲁番市| 平山县| 雷波县| 乐陵市| 江源县| 德阳市| 淅川县| 渭源县| 中江县| 盖州市| 汝城县| 金塔县| 卢湾区| 东明县| 青龙| 瓦房店市| 蒲江县| 尉犁县| 隆德县| 微博| 明溪县| 安阳县| 东乌珠穆沁旗| 保定市| 和田市| 太白县| 峨眉山市|