加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Applet中的键盘输入

发布时间:2020-12-15 02:25:20 所属栏目:Java 来源:网络整理
导读:在 Java Applet中监听键盘输入的最佳方法是什么? 我有一个打开JFrame的applet,我使用KeyListener来监听键盘输入.这在我的开发环境(eclipse)中运行良好,但是当我通过浏览器运行applet(我尝试过Firefox和IE)时,它不响应键盘事件. 但是,如果我运行applet然后最
在 Java Applet中监听键盘输入的最佳方法是什么?

我有一个打开JFrame的applet,我使用KeyListener来监听键盘输入.这在我的开发环境(eclipse)中运行良好,但是当我通过浏览器运行applet(我尝试过Firefox和IE)时,它不响应键盘事件.
但是,如果我运行applet然后最小化并最大化框架,它就可以工作.
我已尝试以多种不同的方式将焦点设置到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,getWidth(),getHeight());
        g.setColor(Color.black);
        g.drawString(teststring,50,50);
    }
}

解决方法

我解决了这个问题.如果我在applet上按下按钮或鼠标事件后创建JFrame,则JFrame上的键监听器可以正常工作.显然,从Applet.init()创建框架意味着当通过浏览器打开时,键侦听器无法正常运行.

但问题仍然存在 – 为什么?如果有人能够解释这一点,我将非常感激.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读