我有一个数组UNICODE_EXCEPTION
传递给以下函数。该数组有2个值。一个是Unicode名称和KeyEvent。
现在我想将Keyboard快捷方式传递给Method。每个快捷方式都有2或3个Key Events.So,我希望Method能够检测到否。数组中的KeyEvents并根据它进行反应。
例如:
如果有2个KeyEvents,则必须执行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);
}
}
阵列
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
}
};
最佳答案
首先,我不会像您那样使用数组。似乎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...