![](/img/trans.png)
[英]JPopupMenu in Java3d applet does not receive mouse or keyboard input
[英]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嘗試 Adobe 的建議。
讓我知道這是否適合您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.