<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評(píng)論 :: 0 Trackbacks

    最近在學(xué)習(xí)SWT/JFace,在做一個(gè)小東西的時(shí)候需要模擬鼠標(biāo)鍵盤事件,在網(wǎng)上搜了一下,在java中模擬這些事件,主要有兩種方法:

    一、使用AWT中的Robot類

    Robot

    java.lang.Object
    繼承者 java.awt.Robot
    

    public class Robot
    extends Object
    此類用于為測試自動(dòng)化、自運(yùn)行演示程序和其他需要控制鼠標(biāo)和鍵盤的應(yīng)用程序生成本機(jī)系統(tǒng)輸入事件。Robot 的主要目的是便于 Java 平臺(tái)實(shí)現(xiàn)自動(dòng)測試。類中幾個(gè)主要的模擬函數(shù)如下:
    void keyPress(int keycode)
              按下給定的鍵。
     void keyRelease(int keycode)
              釋放給定的鍵。
     void mouseMove(int x, int y)
              將鼠標(biāo)指針移動(dòng)到給定屏幕坐標(biāo)。
     void mousePress(int buttons)
              按下一個(gè)或多個(gè)鼠標(biāo)按鈕。
     void mouseRelease(int buttons)
              釋放一個(gè)或多個(gè)鼠標(biāo)按鈕。
     void mouseWheel(int wheelAmt)
              在配有滾輪的鼠標(biāo)上旋轉(zhuǎn)滾輪。
    二、使用SWT中的鼠標(biāo)鍵盤事件
        在SWT的snippets中有兩個(gè)例子用來介紹這兩個(gè)方法的使用,如下:

    (1)、模擬鼠標(biāo)事件
     * UI Automation (for testing tools) snippet: post mouse events
    import org.eclipse.swt.*;
    public class Snippet142 {
    public static void main(String[] args) {
     final Display display = new Display();
     final Shell shell = new Shell(display);
     final Button button = new Button(shell,SWT.NONE);
     button.setSize(100,100);
     button.setText("Click");
     shell.pack();
     shell.open();
     button.addListener(SWT.MouseDown, new Listener() {
      public void handleEvent(Event e){
       System.out.println("Mouse Down (button: " + e.button + " x: " + e.x + " y: " + e.y + ")");
      }
     });
     final Point pt = display.map(shell, null, 50, 50);
     new Thread(){
      Event event;
      public void run(){
       try {
        Thread.sleep(300);
       } catch (InterruptedException e) {}
       event = new Event();
       event.type = SWT.MouseMove;
       event.x = pt.x;
       event.y = pt.y;
       display.post(event);
       try {
        Thread.sleep(300);
       } catch (InterruptedException e) {}
       event.type = SWT.MouseDown;
       event.button = 1;
       display.post(event);
       try {
        Thread.sleep(300);
       } catch (InterruptedException e) {}
       event.type = SWT.MouseUp;
       display.post(event);
      } 
     }.start();
     while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) display.sleep();
     }
     display.dispose();
    }
    }
    (2)、模擬鍵盤事件

     * UI Automation (for testing tools) snippet: post key events
    import org.eclipse.swt.*;
    public class Snippet146 {
    public static void main(String[] args) {
     final Display display = new Display();
     final Shell shell = new Shell(display);
     final Text text = new Text(shell, SWT.BORDER);
     text.setSize(text.computeSize(150, SWT.DEFAULT));
     shell.pack();
     shell.open();
     new Thread(){
      public void run(){
       String string = "Love the method.";
       for (int i = 0; i < string.length(); i++) {
        char ch = string.charAt(i);
        boolean shift = Character.isUpperCase(ch);
        ch = Character.toLowerCase(ch);
        if (shift) {
         Event event = new Event();
         event.type = SWT.KeyDown;
         event.keyCode = SWT.SHIFT;
         display.post(event); 
        }
        Event event = new Event();
        event.type = SWT.KeyDown;
        event.character = ch;
        display.post(event);
        try {
         Thread.sleep(10);
        } catch (InterruptedException e) {}
        event.type = SWT.KeyUp;
        display.post(event);
        try {
         Thread.sleep(100);
        } catch (InterruptedException e) {}
        if (shift) {
         event = new Event();
         event.type = SWT.KeyUp;
         event.keyCode = SWT.SHIFT;
         display.post(event); 
        }
       }
      } 
     }.start();
     while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) display.sleep();
     }
     display.dispose();
    }
    }
    兩種方法中都是先聲明一個(gè)Event,然后將該Event的type類型設(shè)置為對(duì)應(yīng)的 SWT.KeyUp/KeyDown/MouseUp/MouseDown,最后通過Display類的post(Event)方法來模擬對(duì)應(yīng)的事件。注 意:如果有多個(gè)控件,需要得到對(duì)應(yīng)控件的display屬性,然后post該事件。例如,在一個(gè)窗口中有一個(gè)Browser,則需要使用 thisClass.browser.getDisplay().post(event)。

    posted on 2008-04-10 22:42 seal 閱讀(1079) 評(píng)論(0)  編輯  收藏 所屬分類: Eclipse SWT/JFace RCP
    主站蜘蛛池模板: 一级毛片免费毛片毛片| 午夜成年女人毛片免费观看| 亚洲国产日韩在线| 日韩一级免费视频| 最近免费中文字幕MV在线视频3 | 亚洲男人的天堂在线| 成人免费视频观看无遮挡| 国产精品极品美女自在线观看免费| 久久久久亚洲精品美女| 成人免费毛片观看| A片在线免费观看| 国产精品无码亚洲精品2021 | 亚洲精品乱码久久久久久按摩 | 亚洲国产精品无码av| 国产精品成人免费一区二区| 中文字字幕在线高清免费电影| 亚洲国产精品综合福利专区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 成人人观看的免费毛片| 中文字幕av免费专区| jzzijzzij在线观看亚洲熟妇| 亚洲人成电影福利在线播放| 国产三级免费电影| 日韩不卡免费视频| 大妹子影视剧在线观看全集免费| 国产精品亚洲精品观看不卡| 亚洲国产精品无码久久久秋霞2| 国产一级淫片免费播放电影| 在线看片v免费观看视频777| 99久久精品毛片免费播放| 春暖花开亚洲性无区一区二区| 中文字幕亚洲综合精品一区| 亚洲综合久久夜AV | 国产成人一区二区三区免费视频| 成年人视频免费在线观看| 中国人免费观看高清在线观看二区| 亚洲精品无码久久久久APP| 亚洲欧洲日本国产| 亚洲AV成人无码久久精品老人| 久久综合亚洲色HEZYO国产| 国产在线观看免费不卡|