我正在运行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,但关键事件处理得当。
答案 0 :(得分:0)
尝试在事件派发线程上调用它。
答案 1 :(得分:0)
尝试将MouseListener添加到相关组件中,并在mouseClicked()方法中请求焦点。