0

我正在运行一个小程序,并试图专注于 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,但关键事件得到了适当的处理。

4

2 回答 2

0

尝试在事件调度线程上调用它。

于 2012-06-18T05:53:14.830 回答
0

尝试将 MouseListener 添加到相关组件,并在 mouseClicked() 方法中请求焦点。

于 2012-06-18T05:57:34.173 回答