基于可自定义的键绑定执行不同的操作

时间:2013-01-29 17:41:48

标签: java oop key-bindings

我需要从文件中读取可自定义的操作,并将它们绑定到程序的键。

如果我有这样的文件:

w:up
s:down
a:left
d:right

我该如何开始运行?

我看到的唯一方法就是这样做:

// hardcoded String to Action to turn "up" into an actual instruction
HashMap<String, Action> actions = new HashMap<String, Action();
actions.put("up", new Up());
actions.put("down", new Down()); // etc.


HashMap<Integer, Action> keybindings = new HashMap<Integer, Action>();
while (!endOfFile) {
    int key = letterToKeycode(getKey()); // gets keycode for letter
    Action action = actions.get(getCommand());
    keybindings.put(key, action);
    endOfFile = isEndOfFile();
}

然后当我的keylistener方法被调用时,它会:

public void keyPressed(int keycode) {
    keybindings.get(keycode).doAction();
}

doAction()将在每个Action课程中。因此,如果我有Up(),则会调用person.moveUp()

如果我要重新绑定我的大多数密钥,可能会产生数百个长几行的类。

有关于上述概念的内容,以及一个让我想要避免它们的单一切换语句。这样做有“更清洁”的伎俩吗?

作为我的意思的一个例子,Eclipse有你可以在首选项中设置的键绑定,所以当你点击一个键时,它会触发一个事件并根据这些设置解释键应该做什么。我正试图这样做。

1 个答案:

答案 0 :(得分:1)

不是创建自己的Map,而是使用Key Bindings; LinePanel就是一个例子。您可以对Action实施进行参数化或重新分解,以减少扩散。要保留用户定义的键分配,您可以调整引用的示例here中使用的方法。