Java-如何将对象传递给KeyListener接口的实现?

时间:2018-11-29 19:59:10

标签: java parameters interface keylistener

我正在尝试实现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 :(得分:0)

最好在键侦听器的构造函数中传递播放器,但如果其值可以更改,则添加其容器。举例:

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,这是没有错误的