繁体   English   中英

Java Applet 中的键盘输入

[英]Keyboard input in Java Applet

在 Java Applet 中监听键盘输入的最佳方式是什么?

我有一个打开 JFrame 的小程序,我使用 KeyListener 来监听键盘输入。 这在我的开发环境 (eclipse) 中运行良好,但是当我通过浏览器运行小程序时(我尝试过 Firefox 和 IE),它不响应键盘事件。 但是,如果我运行小程序,然后最小化和最大化框架,它就可以工作。 我尝试以多种不同的方式将焦点设置到 JFrame,并以编程方式最小化和最大化它,但没有效果。 我也试过键绑定,但有同样的问题。

我已将我的代码精简到问题的最基本要素并将其粘贴在下面。 有人可以看到我做错了什么或提出更好的解决方案吗?

public class AppletTest extends Applet 
{    
    private GuiTest guiTest; 

    public void init() {
        guiTest = new GuiTest();
        final AppletTest at = this;
        guiTest.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent ke) {
                at.keyPressed(ke);
            }
            public void keyReleased(KeyEvent ke) {}
            public void keyTyped(KeyEvent e) {}             
        });
    }

    private void keyPressed(KeyEvent ke)
    {
        System.out.println("keyPressed "+KeyEvent.getKeyText(ke.getKeyCode()));
        getGuiTest().test(KeyEvent.getKeyText(ke.getKeyCode()));
    }
}

public class GuiTest extends JFrame {
    String teststring = "?";
    public GuiTest()
    {
        setSize(100,100);
        setEnabled(true);
        setVisible(true);
        setFocusable(true);
        requestFocus();
        requestFocusInWindow();
        toFront();
    }

    public void test(String t)
    {
        teststring = t;
        repaint();
    }

    public void paint(Graphics g)
    {
        g.setColor(Color.white);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.black);
        g.drawString(teststring, 50, 50);
    }
}

我解决了这个问题。 如果我在小程序上按下按钮或鼠标事件后创建 JFrame,则 JFrame 上的键侦听器会起作用。 显然,从 Applet.init() 创建框架意味着关键侦听器在通过浏览器打开时无法正常工作。

然而,问题仍然存在——为什么? 如果有人可以解释这一点,我将不胜感激。

我认为这可能是因为应该在事件调度线程上创建框架,但是使用 SwingUtilities.invokeLater 或 invokeAndWait 不起作用。

我认为您遇到了插件焦点问题:在许多现代浏览器中,插件只能通过用户单击或使用 Javascript 来获得焦点。 这通常会影响 Flash,但也可能会影响小程序。 http://kb2.adobe.com/cps/155/tn_15586.html尝试 Adob​​e 的建议。

让我知道这是否适合您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM