我有一个数组UNICODE_EXCEPTION
,它传递给下面的函数。数组有2个值。一个是unicode名称& KeyEvent。
现在我想将键盘快捷键传递给Method.Every快捷键有2或3个键事件。所以我希望方法检测到否。数组中的KeyEvents和&根据它做出反应。
例如: 如果它有2个KeyEvents.It必须使用2 Keypress&释放它
//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)
首先,我不会像你那样使用数组。似乎Map
更适合您的工作。毕竟,您将值(在您的情况下为'actions')与键相关联。像这样:
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...