为什么我的组件没有得到关注?

时间:2012-06-18 05:46:55

标签: java focus

我正在运行applet,并且我正在尝试关注init方法之外的组件。我尝试过使用requestFocus和requestFocusInWindow。这两个都返回true,isDisplayable,isVisible和isFocusable,但在返回false后立即调用hasFocus。该组件不会显示在小程序中。

以下是事件监听器调用的方法(当用户点击“开始战斗”时),尝试关注组件:

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,但关键事件处理得当。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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