Каков наилучший способ прослушивания ввода с клавиатуры в Java-апплете?
У меня есть апплет, который открывает 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);
}
}