我需要从文件中读取可自定义的操作,并将它们绑定到程序的键。
如果我有这样的文件:
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有你可以在首选项中设置的键绑定,所以当你点击一个键时,它会触发一个事件并根据这些设置解释键应该做什么。我正试图这样做。
答案 0 :(得分:1)
不是创建自己的Map
,而是使用Key Bindings; LinePanel
就是一个例子。您可以对Action
实施进行参数化或重新分解,以减少扩散。要保留用户定义的键分配,您可以调整引用的示例here中使用的方法。