【发布时间】:2011-08-20 20:08:58
【问题描述】:
在 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);
}
}
【问题讨论】:
-
出于好奇,为什么要直接捕获击键?
-
我正在制作一个键盘控制的游戏。这也是我使用paint方法而不是Components的原因。我也想将它用于菜单的键盘快捷键。
标签: java keyboard applet jframe keyboard-events