Делая различные действия на основе Настраиваемые комбинации клавиш

Обновить

April 2019

Просмотры

45 раз

1

Мне нужно принять в настраиваемых действиях, считанных из файла и связать их с ключом для программы.

Если у меня есть файл, например так:

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 ответы

1

Rather than create your own Map, use Key Bindings; LinePanel is an example. You may be able to parameterize or re-factor your Action implementation(s) to mitigate proliferation. To persist user-defined key assignments, you may be able to adapt the approach used in the example cited here.