【问题标题】:Access an object created in another class from a KeyListener从 KeyListener 访问在另一个类中创建的对象
【发布时间】:2016-01-28 21:15:24
【问题描述】:

我试图弄清楚如何从 keylistener 类更改在我的主类中创建的对象的字段。我创建了一个名为 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");        
    }
}

【问题讨论】:

标签: java keylistener keyevent


【解决方案1】:

KeyMaster类中创建一个Player字段,并通过构造函数将当前播放器注入到该字段中:

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

然后在main方法中你可以创建KeyMaster如下:

KeyMaster KeyEvnt = new KeyMaster(Ship);

【讨论】:

    【解决方案2】:

    您可以将 Ship 设为静态。

    public class TheMage extends JFrame {
          private static Player Ship = new Player(50,50);
    ...
    @Override
    public void keyPressed(KeyEvent ke) {
        TheMage.Ship //blah blah blah       
    }
    

    另外,请遵循 Java 命名约定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      相关资源
      最近更新 更多