Java:删除活动密钥侦听器,该侦听器为';她在另一个班

Java:删除活动密钥侦听器,该侦听器为';她在另一个班,java,swing,keylistener,Java,Swing,Keylistener,我正在做一个小游戏,在某个事件中结束游戏,我希望玩家在这种情况下失去对角色的控制。我在另一个类中使用密钥适配器,并将其添加到构造函数中,如下所示: addKeyListener(new GetKeyStroke(this)); 我的游戏代码如下所示(在绘制方法中): 我试过使用 removeKeyListener(new GetKeyStroke(this)); 但据我所知,这会创建一个新对象,这就是为什么它不起作用 非常感谢您提供的任何帮助对于您添加的GetKeyStroke,您需要某种参

我正在做一个小游戏,在某个事件中结束游戏,我希望玩家在这种情况下失去对角色的控制。我在另一个类中使用密钥适配器,并将其添加到构造函数中,如下所示:

addKeyListener(new GetKeyStroke(this));
我的游戏代码如下所示(在绘制方法中):

我试过使用

removeKeyListener(new GetKeyStroke(this));
但据我所知,这会创建一个新对象,这就是为什么它不起作用


非常感谢您提供的任何帮助

对于您添加的
GetKeyStroke
,您需要某种参考变量

private GetKeyStroke keyListener = new GetKeyStroke(this);
...
addKeyListener(keyListener);
您可能还需要一个
getter
,如果您想从另一个类访问它,可以说

public class One {
    private GetKeyStroke keyListener;

    public One() {
        keyListener = new GetKeyStroke(this);
        addKeyListener(keyListener);
    }

    public GetKeyStroke getKeyListener(){
        return keyListener;
    }
}
然后,您可以将
One
作为对
Two
的引用传递,并使用
getKeyListener
方法获取对同一实例的引用
GetKeyStoke

public class Two {
    private One one;
    private GetKeyStroke keyListener;

    public Two( final One one ) {
        this.one = one;
        keyListener = one.getKeyListener();
    }

    public someMehod() {
        one.removeKeyListener(keyListener);
    }
}

也许更合适的设计应该是使用
接口
。我们可以看到一个例子,甚至一个更高级的主题可能会引起您未来的兴趣


旁注:

  • 正如我在你的原始帖子中的评论所指出的:查看Swing应用程序的使用。通常,您会在使用
    KeyListener
    时遇到焦点问题。对于特定的键反应,Oracle实际上建议使用键绑定,而不是使用
    KeyListener

    • u可以创建一个对象作为您的keylistener

      Object a = new GetKeyStroke();
      
      然后您可以添加和删除它

      button.addKeyListener((KeyListener) a);
      button.removeKeyListener((KeyListener) a);
      

      注意我不是专家,我知道使用Object并不好,但我只是不知道我应该在主题之外使用什么,而是考虑使用Swing应用程序。通常,您会在使用
      KeyListener
      时遇到焦点问题。与使用
      KeyListener
      相比,Oracle实际上推荐使用键绑定。对于特定的键反应,我迟到了一天,而且还缺1美元+
      button.addKeyListener((KeyListener) a);
      button.removeKeyListener((KeyListener) a);