java - 从 KeyListener 访问在另一个类中创建的对象

标签 java keylistener keyevent

我试图弄清楚如何更改在主类中从键监听器类创建的对象的字段。我创建了一个名为 KeyMaster 的类,它所做的就是通过在主类中创建的事件队列监听键盘输入。我希望当我向上、向左、向下、向右推时能够通过 KeyMaster 类更改 x 和 y 坐标。问题是我无法从 KeyListener 类访问 Ship 对象。请帮忙。 :)

public class TheMage extends JFrame 
{
    public static void main(String[] args) 
    {               
        TheMage Main = new TheMage();
        Player Ship = new Player(50,50);

        KeyMaster KeyEvnt = new KeyMaster();        

        EventQueue.invokeLater
        (new Runnable() 
            {

                @Override
                public void run() 
                {
                Main.addKeyListener(KeyEvnt);
                Main.setFocusable(true);
                Main.setVisible(true);
                }
            }
        );      
    }
}


public class Player {
    int x;
    int y;

    public Player(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

public class KeyMaster implements KeyListener {

    public KeyMaster() {

    }    

    @Override
    public void keyTyped(KeyEvent ke) {
        System.out.println("Hello - Type");        
    }

    @Override
    public void keyPressed(KeyEvent ke) {
        System.out.println("Hello - Press");        
    }

    @Override
    public void keyReleased(KeyEvent ke) {
        System.out.println("Hello - Rel");        
    }
}

最佳答案

KeyMaster类中创建一个Player字段,并通过构造函数将当前玩家注入(inject)到该字段中:

private Player player;
KeyMaster(Player player) {
    this.player = player;
}

然后在main方法中您可以创建KeyMaster,如下所示:

KeyMaster KeyEvnt = new KeyMaster(Ship);

关于java - 从 KeyListener 访问在另一个类中创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35072177/

相关文章:

java - 金钱累积按钮

java - 如何更改 Activity 使用的 .xml 文件?

java - JPanel 不想聚焦所以 KeyAdapter 不起作用

java - 键 SPACE 的作用类似于聚焦按钮

javascript - 黑莓上 Javascript 的 KeyUp

java - Vaadin 网格行编号

java - 安卓 session 管理

Java 键盘键码列表

java - 键盘不输入任何东西java

Java:如何识别特定的字符串