Java Applet Key(显然)在射击后失去焦点

时间:2012-12-18 00:11:52

标签: java swing applet focus keylistener

我有一个Java Applet在eclipse中完全正常工作,但是当我将它导出到jar文件,将其嵌入HTML并用Opera或Firefox打开时,Key Listener无法正常工作。我试图提取适当的代码。 applet是一款游戏,玩家在按下“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类只执行“add(new World())”。正如我所说,applet在eclipse中运行时工作正常,但是当在firefox / opera中运行时,播放器在点击“D”键后开始运行,然后applet失去焦点,同时播放器继续运行。有时我可以通过鼠标点击强制小程序保持专注,但即使这样我也无法阻止玩家运行。似乎KeyEvent一直在射击。 如果我在java偏好下显示java控制台(似乎控制台需要所有键控事件),即使我弹出后关闭控制台,我甚至无法获得KeyEvent。 我尝试使用KeyListener而不是KeyBinding使用完全相同的结果。 我还有一个Mouselistener,可以在所有场景中正常工作。 如果相关,我正在Mac上运行。

我可以强制applet不丢失输入焦点吗? (为什么它会失去焦点?)为什么事件会继续发射?即使显示控制台,是否可以重点关注applet?

0 个答案:

没有答案