如何将多个KeyEvent传递给方法?

时间:2014-01-27 12:05:28

标签: java arrays methods logic

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

1 个答案:

答案 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...