【问题标题】:focus for java appletsjava小程序的焦点
【发布时间】:2010-11-22 01:20:22
【问题描述】:

我制作了一个全基于 JPanel 的 java 游戏。当我将它添加到 JFrame 时,它​​可以完美运行,而当我将它添加到 JApplet 并使用 eclipse 的内置小程序测试器对其进行测试时,它可以完美运行。但是,当我尝试通过 html 站点运行小程序时,它不起作用。它会加载,但不需要键盘输入。我设置了“按 s”开始游戏的位置,但即使我点击游戏并按 s,也没有任何反应。

我是否必须设置键盘焦点,因为我认为这是自动完成的。

【问题讨论】:

  • 你在什么平台上使用什么浏览器?您是否测试过其他使用键盘排除浏览器问题的小程序? (你可以试试xenomachina.com/soko,它使用键盘,但基于 AWT 而不是 Swing。)

标签: java applet jframe jpanel


【解决方案1】:

但它不需要键盘输入。

KeyEvents 只传递给具有焦点的组件。我猜您的面板没有焦点,因此请确保您使面板具有焦点,然后在 GUI 可见时使用 requestFocusInWindow() 方法以确保面板具有焦点。

然而,更好的解决方案不是依赖 KeyListener,而是使用 Key Bindings。 Swing 被设计为使用键绑定。

阅读更多关于Key Bindings的信息。

【讨论】:

  • 在我将面板添加到小程序后,在扩展 JApplet 的类中调用 requestFocusInWindow() 有效。非常感谢。
  • 另外,我以后肯定会考虑在键监听器上使用键绑定。
  • @Jeff,那你为什么还没有接受答案呢?我知道我应该只提到 Key Bindings 方法。太多的初学者采取了容易理解的出路。
  • 对不起,我还没有接受你的回答,因为这是我在 stackoverflow 上的第一篇文章,我不知道。而且我不会重写我的代码来使用监听器上的键绑定,因为我只是将这个游戏设计为第一步,我计划在它之后继续前进。我不想浪费时间重新设计已经有效的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2011-09-11
  • 1970-01-01
相关资源
最近更新 更多