首页 > 解决方案 > Java - 如何将对象传递给 KeyListener 接口的实现?

问题描述

我正在尝试实现 KeyListener 接口。在实现中,我想根据键代码(keyPressed)用我的“播放器”对象和一堆列表来做一些事情,这些列表是在另一个类中创建的。到目前为止,我将它们作为参数传递,但现在我无法更改“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

标签: javaparametersinterfacekeylistener

解决方案


最好在关键监听器的构造函数中传递播放器,但如果它的值可以更改,则添加它的容器。一些例子:

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 的实例并使用 getter。如果您的听众是唯一的目标,请不要忘记使用您的关键事件。PS:抱歉导入丢失我没有我的IDE,他们没有错误


推荐阅读