首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Applet中的键盘输入

Java Applet中的键盘输入
EN

Stack Overflow用户
提问于 2011-05-08 01:35:16
回答 2查看 4.6K关注 0票数 4

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

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

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

代码语言:javascript
复制
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);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2011-05-13 04:13:46

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2011-05-08 02:53:57

我认为你遇到了插件焦点问题:在许多现代浏览器中,插件只有通过用户点击或使用Javascript才能获得焦点。这通常会影响Flash,但也可能会影响applet。在http://kb2.adobe.com/cps/155/tn_15586.html上试试奥多比的推荐吧。

如果这对你有效,请让我知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5922849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档