我有一个数组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...

10-06 09:26