【问题标题】:Java - how to pass objects to implementation of KeyListener interface?Java - 如何将对象传递给 KeyListener 接口的实现?
【发布时间】:2018-11-29 19:59:10
【问题描述】:

我正在尝试实现 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

【问题讨论】:

    标签: java parameters interface keylistener


    【解决方案1】:

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

    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,他们没有错误

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多