【问题标题】:How can I get KeyListener to work without maximizing and minimizing the frame?如何在不最大化和最小化框架的情况下让 KeyListener 工作?
【发布时间】:2012-06-19 23:48:07
【问题描述】:

我正在尝试使用 Java 1.4.2 编写一个简单的游戏 它使用两个主屏幕,两者都使用JPanel。其中一个只有MouseListener 并且工作完美;使用第一个,您可以打开第二个。第二个屏幕使用MouseListenerKeyListenermousePressed 方法工作正常。但是,keyPressed 方法起初不起作用;为了让它工作,我必须最小化窗口,然后在它工作之前再次重新选择它。

在第一个屏幕中,我被建议在打开第二个屏幕时输入toFront() 命令;即secondFrame.toFront() 但是,它给了我一个错误,说No method "toFront()" was found in type "secondFrame"- 即使secondFrame 扩展JPanel

我听说过一些关于“键绑定”的信息;我不熟悉这个话题,但我宁愿从核心解决这个问题,而不仅仅是求助于解决方法。如果可能的话,我想在仍然使用KeyListener 的同时解决这个问题。

代码片段:

public TowerDefenceBoard{
    (generic stuff)
    setFocusable (true);
    addKeyListener (this);
    requestFocusInWindow ();
}

有人知道为什么会这样吗?有人有什么建议吗?

提前谢谢:)

【问题讨论】:

  • 我对此感到非常困惑。屏幕是什么意思?你是说有两个JFrame?两者都是同一个游戏的一部分?还要发布您创建非工作 keylistener 的代码
  • 每个屏幕都是不同的 JPanel。两者之间的可见性通过 setVisible() 来改变它们之间的变化。他们都是同一个游戏的一部分;基本上,一个是“主菜单”,另一个是“主游戏”。我在主构造函数中创建面板时创建了 keyListener。我已将其添加到原始问题中。
  • 好的。 IMO 为此使用两个单独的 jpanel 是一个很大的错误并且是不必要的(除非我仍然缺少某些东西)。为什么不只使用一个 JPanel,然后在其上绘制菜单或游戏并切换它们呢?这将消除您与听众的问题,并成为更好的编码实践

标签: java keylistener


【解决方案1】:

尝试使用KeyListener在面板上调用requestFocsInWindow()

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 2020-10-24
    • 2013-03-20
    • 2021-04-11
    • 2012-07-18
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多