2014-01-27 23 views
1

我有一個數組UNICODE_EXCEPTION它被傳遞給下面的函數。該數組有2個值。其中一個是unicode名稱&的KeyEvent。如何將多個KeyEvent傳遞給方法?

現在我想將鍵盤快捷方式傳遞給Method.Every快捷方式有2或3個關鍵事件。所以我想方法來檢測不。數組中的KeyEvents &根據它進行響應。

例如: 如果是有2 KeyEvents.It必須以2個按鍵時&釋放它

//the first action 
this.application.getRobot().keyPress(UNICODE_EXCEPTION[i][1]); 
this.application.getRobot().keyPress(UNICODE_EXCEPTION[i][1]); 
//the second action 
this.application.getRobot().keyRelease(UNICODE_EXCEPTION[i][2]); 
this.application.getRobot().keyRelease(UNICODE_EXCEPTION[i][2]); 

我怎樣才能實現這個執行???

所以幫我在正確的方向:)

感謝您的幫助......

方法

private void keyboardUnicodeTrick(KeyboardAction action) 
    { 
     boolean exception = false; 

     for (int i = 0; i < UNICODE_EXCEPTION.length; i++) 
     { 
      if (action.unicode == UNICODE_EXCEPTION[i][0]) 
      { 
       exception = true; 

       this.application.getRobot().keyPress(UNICODE_EXCEPTION[i][1]); 
       this.application.getRobot().keyRelease(UNICODE_EXCEPTION[i][1]); 

       break; 
      } 
     } 
     if (!exception) 
     { 
      pressUnicode(this.application.getRobot(), action.unicode); 
     } 
    } 

ARRAY

private static final int[][] UNICODE_EXCEPTION = { 
     { 
       KeyboardAction.UNICODE_BACKSPACE, KeyEvent.VK_BACK_SPACE, 
     }, { 
       KeyboardAction.UNICODE_PAGEDN, KeyEvent.VK_PAGE_DOWN 
     }, { 
       KeyboardAction.UNICODE_PAGEUP, KeyEvent.VK_PAGE_UP 
     }, { 
       KeyboardAction.UNICODE_TAB, KeyEvent.VK_TAB 
     }, { 
       KeyboardAction.UNICODE_ARROW_DOWN, KeyEvent.VK_DOWN 
     }, { 
       KeyboardAction.UNICODE_ARROW_UP, KeyEvent.VK_UP 
     }, { 
       KeyboardAction.UNICODE_ARROW_LEFT, KeyEvent.VK_LEFT 
     }, { 
       KeyboardAction.UNICODE_ARROW_RIGHT, KeyEvent.VK_RIGHT 
     }, { 
       KeyboardAction.UNICODE_ESC, KeyEvent.VK_ESCAPE 
     }, { 
       KeyboardAction.UNICODE_F5, KeyEvent.VK_F5 
     }, { 
       KeyboardAction.UNICODE_CTRL, KeyEvent.VK_CONTROL 
     } 
}; 
+0

它是否打算在您的示例中四次使用索引'1'?我想它應該是「1」和「2」 - 即兩種不同的動作 - 對嗎? – kmera

+0

你..他們是兩種不同的行動... – AruLNadhaN

+0

好的,那麼我的回答確實是你想要的 – kmera

回答

1

首先,我犯了不要像你那樣使用數組。似乎Map更適合你的工作。畢竟,你將一些關鍵值(在你的情況下的'動作')聯繫起來。像這樣:

Map<Integer, List<Integer>> unicodeExceptions; 
//initialize it, key is a KeyboardAction, value is a list of KeyEvent constants 

然後,你將不需要你的for循環。然後通過使用List<Integer>作爲值參數,然後可以調用您的方法(即,如果我完全理解您的問題)。所以你的方法看起來像這樣:

private void keyboardUnicodeTrick(KeyboardAction action) { 
    if (unicodeException.containsKey(action)) { 
     List<Integer> actions = unicodeExceptions.get(action); 
     //first press them 
     for (Integer keyEvent: actions) { 
      this.application.getRobot().keyPress(keyEvent); 
     } 
     //edit: then release them 
     for (Integer keyEvent: actions) { 
      this.application.getRobot().keyRelease(keyEvent); 
     } 
     return; 
    } 
    pressUnicode(this.application.getRobot(), action.unicode); 
} 

你甚至不需要你的布爾標誌了。我希望這有助於,我不知道我是否完全理解你的問題。


編輯:不知道你是新來的地圖,我建議閱讀java中的集合。他們真的很有幫助!這裏是一個初始化地圖的代碼片段:

Map<Integer, List<Integer>> unicodeExceptions = new HashMap<Integer, List<Integer>>(); 
unicodeExceptions.put(KeyboardAction.UNICODE_BACKSPACE, Arrays.asList(KeyEvent.VK_TAB, KeyEvent.VK_UP, ...)); 
//and so on... 
+0

看到我的問題的例子。它必須根據不同的行爲執行不同的行爲。的KeyEvents。 – AruLNadhaN

+0

是的,現在它確實如此。如果將例如'KeyEvent.VK_DOWN'和'KeyEvent.VK_UP'添加到鍵盤'KeyboardAction.UNICODE_ARROW_UP'的列表中,它將針對這兩個操作調用'keyPress&keyRelease'方法。 – kmera

+0

如果我給KeyEvent.VK_DOWN和KeyEvent.VK_UP.It必須按下&UP.then釋放這兩個鍵。現在您的方法按下按鍵&釋放&按鍵按下並釋放。 – AruLNadhaN