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应用程序的使用。通常,您会在使用
时遇到焦点问题。对于特定的键反应,Oracle实际上建议使用键绑定,而不是使用KeyListener
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);