【问题标题】:Java new Keylistener after changing JPanel doesn't work更改 JPanel 后的 Java new Keylistener 不起作用
【发布时间】:2015-06-17 08:34:43
【问题描述】:

对于我正在为学校编写代码的游戏,我遇到了以下问题:

当游戏开始时,它确实会在框架中加载一个 JPanel 和一些介绍性内容。为了在一些图像之间切换,我添加了一个简单的 keylistener。在那里完成所有操作后,它会从内容窗格中删除所有内容并加载第一级。这些行是为我做的:

    frame.getContentPane().removeAll();
    frame.getContentPane().add(new level1());
    frame.getContentPane().validate();

现在,我的第一个关卡已成功加载,但 keylistener 已损坏。在我的公共 level1() 中,我定义了一个新的 KeyListener,但它不响应我的输入。如果我不切换 JPanel,KeyListener 将完全正常工作。重新加载新的 KeyListener 的相关代码是:

    this.requestFocusInWindow();
    keylistener = new AL();
    addKeyListener(keylistener);

一切正常,例如敌人正在移动。但是 KeyListener 什么都不做。

编辑:两个 keylistener 完全不同

【问题讨论】:

    标签: java keylistener


    【解决方案1】:

    问题解决了。 不知何故,JPanel 无法获得焦点。使用我的更新方法,我知道确保在每一次滴答声中,我的 JPanel 都是专注的。这解决了它,但我不明白为什么单个焦点请求是不够的。

    【讨论】:

    • requestFocusInWindow() 方法仅在对显示在可见窗口中的组件调用该方法时才有效。不要使用 KeyListener。更好的解决方案是使用Key Bindings
    • 我知道 Key Bindings 是更好的方法,但这只是学校的快速游戏,所以我不在乎。从逻辑上讲,首先将 JPanel 加载到框架中,然后设置焦点。也许现在还为时过早,但感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    相关资源
    最近更新 更多