Как использовать привязки клавиш вместо прослушивателей клавишJAVA

Программисты JAVA общаются здесь
Anonymous
Как использовать привязки клавиш вместо прослушивателей клавиш

Сообщение Anonymous »

Я использую KeyListener в своем коде (игре или другом), чтобы мои экранные объекты реагировали на ввод клавиш пользователем. Вот мой код:

Код: Выделить всё

public class MyGame extends JFrame {

static int up = KeyEvent.VK_UP;
static int right = KeyEvent.VK_RIGHT;
static int down = KeyEvent.VK_DOWN;
static int left = KeyEvent.VK_LEFT;
static int fire = KeyEvent.VK_Q;

public MyGame() {

//      Do all the layout management and what not...
JLabel obj1 = new JLabel();
JLabel obj2 = new JLabel();
obj1.addKeyListener(new MyKeyListener());
obj2.addKeyListener(new MyKeyListener());
add(obj1);
add(obj2);
//      Do other GUI things...
}

static void move(int direction, Object source) {

// do something
}

static void fire(Object source) {

// do something
}

static void rebindKey(int newKey, String oldKey) {

//      Depends on your GUI implementation.
//      Detecting the new key by a KeyListener is the way to go this time.
if (oldKey.equals("up"))
up = newKey;
if (oldKey.equals("down"))
down = newKey;
//      ...
}

public static void main(String[] args) {

new MyGame();
}

private static class MyKeyListener extends KeyAdapter {

@Override
public void keyPressed(KeyEvent e) {

Object source = e.getSource();
int action = e.getExtendedKeyCode();

/* Will not work if you want to allow rebinding keys since case variables must be constants.
switch (action) {
case up:
move(1, source);
case right:
move(2, source);
case down:
move(3, source);
case left:
move(4, source);
case fire:
fire(source);
...
}
*/
if (action == up)
move(1, source);
else if (action == right)
move(2, source);
else if (action == down)
move(3, source);
else if (action == left)
move(4, source);
else if (action == fire)
fire(source);
}
}
}
У меня проблемы с отзывчивостью:
  • Мне нужно нажать на объект, чтобы он работал.
  • Отклик, который я получаю при нажатии одной из клавиш, не такой, как я хотел — слишком отзывчивый или слишком неотзывчивый.
Почему это происходит и как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/227 ... -listeners

Вернуться в «JAVA»