JApplet 内で JPanel を取得してキーボード イベントを受け取ることができません。なぜだかわかりません!
ご了承ください...
入力する前に(マウスで)パネルをクリックしても違いはありません。これは、ネット上で私が目にする最も一般的なアドバイスです。
「低レベル」の java.awt.KeyEventDispatcher インターフェイスを使用してみました。それも違いはありません!
ただし、JApplet の代わりにアプレットを使用すると、アプレットはキーボード イベントを受け取ります。しかし、ここでも、このアプレットにパネルを追加した瞬間 (パネルは実際にはすべてのアプリ/描画ロジックがある場所です)、(パネルで) kb イベントの受信を再び停止します!
現在、(JApplet の代わりに) Applet を単純に使用することはできません。これは、とりわけ、その onPaint が (Graphics2D オブジェクトではなく) Graphics を取得するためです。したがって、#3は私にとって解決策ではありません。
JDK に付属している AppletViewer では、物事は魔法のように機能します。
ここでどうしても誰かの助けが必要です。過去 2 ~ 3 日間、あらゆる種類の順列を試して過ごしましたが、今では思い出せません。
私のプラットフォームの詳細:
Firefox 3.5.3
x86 上の Fedora 11 (最新のアップデート/パッチを適用)
Java Plugin: これらの両方を試してみましたが、違いはありませんでした。
3.1 IcedTea Java Web ブラウザ プラグイン 1.6 (fedora-29.b16.fc11-i386)
3.2 jdk1.6.0_16/jre/plugin/i386/ns7/libjavaplugin_oji.so
上記の jdk1.6.0_16 を使用して、アプレット ソースをコンパイルしました。
これが私のコードです。私の仲間のプログラマーからの連絡をお待ちしております...私は完全に立ち往生しています!
ありがとう、
/SD
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
class MyAppletKeyListener implements KeyListener, MouseListener {
public void keyPressed(KeyEvent e) {
System.out.println("panel:keyPressed" + e.getKeyChar());
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
System.out.println("panel:keyTyped" + e.getKeyChar());
}
public void mouseClicked(MouseEvent e) {
System.out.println("panel:mouseClicked");
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
}
public class TestApplet extends JApplet implements MouseListener {
public void init() {
System.out.println("applet:init");
MyAppletKeyListener listener = new MyAppletKeyListener();
// Panel related
// Note: I'd like this red panel to handle
// all my keyboard and mouse events.
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(new JButton("test"));
panel.add(new JButton("test2"));
panel.setFocusable(true);
panel.requestFocus();
panel.setBackground(new Color(200, 0, 0));
panel.addKeyListener(listener);
panel.addMouseListener(listener);
// applet related
// Note: Added this only for debugging. I do NOT want
// to handle my mouse/kb events in the applet.
addMouseListener(this);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(panel);
}
public void mouseClicked(MouseEvent e) {
System.out.println("applet:mouseClicked");
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
}
HTML:
<html>
<head>
</head>
<body>
<applet id="myApplet" code="TestApplet.class"
width="425"
height="150" >
</applet>
</body>
</html>