Как использовать привязки клавиш вместо прослушивателей клавиш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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • OkHttp3 Отладка задержки сети с помощью прослушивателей событий — событие ConnectionReleased
    Anonymous » » в форуме JAVA
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Использование абстрактного класса в качестве прослушивателей событий?
    Гость » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Гость
  • Несколько прослушивателей служебной шины C# получают одно и то же сообщение ( BrokeredMessage ).
    Гость » » в форуме C#
    0 Ответы
    55 Просмотры
    Последнее сообщение Гость
  • Использование абстрактного класса в качестве прослушивателей событий?
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Symfony предотвращает работу объекта с помощью прослушивателей
    Anonymous » » в форуме Php
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

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