我正在运行一个小程序,并试图专注于 init 方法之外的组件。我尝试过使用 requestFocus 和 requestFocusInWindow。这两个都返回 true,isDisplayable、isVisible 和 isFocusable 也是如此,但在此之后立即调用 hasFocus 会返回 false。该组件只是没有显示在小程序中。
这是事件监听器调用的方法(当用户单击“开始战斗”时),试图关注组件:
private void beginBattle(){
BattleSequence bs = new BattleSequence(..);
remove(pnlInit);
remove(pnlOOB);
remove(pnlBattle);
add(bs);
bs.setVisible(true);
bs.requestFocusInWindow(); //this returns 'true'
bs.setBounds(0, 0, bs.getSize().width, bs.getSize().height);
bs.init();
}
public class BattleSequence extends RavelSequence
public abstract class RavelSequence extends Applet implements KeyListener, FocusListener
为什么焦点请求被拒绝?如果有更多相关的代码,我可以发布!
* * *编辑:添加鼠标侦听器可以使组件获得焦点,但我不希望用户需要鼠标来控制游戏。我更改了 RavelSequence 的声明以扩展 Container 而不是 Applet,并且一切正常。
bs.hasFocus 仍然返回 false,但关键事件得到了适当的处理。