Java - как передать объекты в реализацию интерфейса KeyListener? - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь реализовать интерфейс KeyListener.В реализации я хочу сделать кое-что в зависимости от кода клавиши (keyPressed) с моим объектом Player и списками групп, которые создаются в другом классе.До сих пор я передавал их как параметр, но теперь я не могу изменить список аргументов «keyPressed».Моя единственная идея состояла в том, чтобы создать статические поля, представляющие плеер и списки, и получить к ним доступ через ClassName.staticField, но это, вероятно, не лучшая идея.Как я могу получить к ним более правильный доступ?

public void keyPressed(KeyEvent e)
{
    int code = e.getKeyCode();
    //doing some stuff with code
    if(code == KeyEvent.VK_SHIFT)
        player.manipulateItem(/*few lists to pass here*/); //how to access the "player" object and lists?
}                                                           //they are created in another class as variables

1 Ответ

0 голосов
/ 29 ноября 2018

Лучше всего передать игрока в конструктор вашего ключевого слушателя, но если его значение может измениться, добавьте его контейнер.Некоторые примеры:

public class A extends JFrame{
    final Player currentPlayer;
    public A(){
        currentPlayer = new Player();
        add(new JLabel("press to increase player score");
        addKeyListener(new MyKeyListener(currentPlayer));
        a.pack();
        a.setVisible(true);
    }

    private static final class MyKeyListener extends KeyAdapter{
         Player player;
         public MyKeyListener(Player player){
             super();
             this.player = player;  
         }

         @Override
         public void keyPressed(KeyEvent e) {
             int code = e.getKeyCode();
             //doing some stuff with code
             if(code == KeyEvent.VK_SHIFT)
                  player.manipulateItem(/*few lists to pass here*/);
             e.consume();
        }
    }
}

Если ваш игрок не является финальным и может измениться, передайте экземпляр A и используйте получатель.не забывайте использовать ваше ключевое событие, если ваш слушатель - единственная цель.PS: извините, импорт отсутствует, у меня нет своей IDE под рукой, прыгающей без ошибок

...