簡體   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