Java小程序键(显然)在触发后失去焦点

Java小程序键(显然)在触发后失去焦点,java,swing,applet,focus,keylistener,Java,Swing,Applet,Focus,Keylistener,我有一个Java小程序,它在eclipse中工作得非常好,但是当我将它导出到jar文件,将其嵌入HTML并用Opera或Firefox打开它时,密钥侦听器无法正常工作。我试图提取适当的代码。小程序是一种游戏,玩家在按下“D”时向前移动,释放时停止: public class World extends JPanel { ... public World() { ... seyFocusable(true); addKeyBinding(); ... } private Abstrac

我有一个Java小程序,它在eclipse中工作得非常好,但是当我将它导出到jar文件,将其嵌入HTML并用Opera或Firefox打开它时,密钥侦听器无法正常工作。我试图提取适当的代码。小程序是一种游戏,玩家在按下“D”时向前移动,释放时停止:

public class World extends JPanel
{
...
public World()
{
...
   seyFocusable(true);
   addKeyBinding();
...
}
private AbstractAction forward = new AbstractAction()
{
    public void actionPerformed(ActionEvent e)
    {
        if(!keys.contains(39))
            keys.add(39);
        requestFocusInWindow();
    }
};
private AbstractAction r_forward = new AbstractAction()
{
    public void actionPerformed(ActionEvent e)
    {
        keys.remove(new Integer(39));
        requestFocusInWindow();
    }
};
 public void addKeyBinding()
{
    int c = JComponent.WHEN_IN_FOCUSED_WINDOW;
    InputMap inputMap = getInputMap(c);
    ActionMap actionMap = getActionMap();
    inputMap.put(KeyStroke.getKeyStroke("D"), "for");
    actionMap.put("for", forward);
    inputMap.put(KeyStroke.getKeyStroke("released D"), "r_for");
    actionMap.put("r_for", r_forward);
}
Applet类只执行“添加(新世界())”操作。正如我所说,小程序在eclipse中运行时工作正常,但在firefox/opera中运行时,播放器在按下“D”键后开始运行,然后小程序失去焦点,而播放器继续运行。有时我可以用鼠标点击来强制小程序保持焦点,但即使这样,我也无法阻止播放器运行。似乎KeyEvent一直在启动。 此外,如果在java首选项下显示java控制台(似乎控制台需要所有keyevents),我甚至无法获得KeyEvent,即使我在控制台弹出后关闭它。 我尝试使用KeyListener而不是KeyBinding,得到了完全相同的结果。 我还有一个鼠标听筒,在所有情况下都能正常工作。 如果相关的话,我正在Mac电脑上运行


我可以强制小程序不丢失输入焦点吗?(为什么会失去焦点?)?即使显示控制台,也可以给小程序焦点吗?

JPanel本身不可聚焦,因此请求聚焦通常会导致面板尝试将焦点延迟到它能找到的下一个可聚焦组件。尝试将
setFocusable(true)
添加到
World
classes构造函数中。“将其嵌入HTML”通常是焦点和小程序的问题所在。自由浮动启动它,它将可靠地工作(或失败)。而是:1)使用
JFrame
2)使用从链接启动它。这将为最终用户提供更好的体验。:)@世界级程序员有一个setfocusable(true)命令。@Andrew Thompson:我本来希望避免使用浮动帧,但这可能不是一个好主意?我认为使用自由浮动帧是一个好主意(以防出现任何混乱)。焦点问题得到解决,你可以更好地控制大小,如果浏览器关闭,游戏可以继续&还有许多其他优势。除了问题之外,浏览器包装器到底对游戏有什么贡献?