我无法让JApplet中的JPanel接收键盘事件。我不知道原因!
请注意:
1.在输入之前单击面板(使用鼠标)没有任何影响。这是我在网络上看到的最常见的建议。
2.我尝试使用“低级”java.awt.KeyEventDispatcher接口。也没有效果!
3.但是,如果我使用Applet而不是JApplet,则Applet可以接收键盘事件。但即使在这里,一旦我向此Applet添加一个Panel(该Panel确实是所有app /绘图逻辑的地方),我就再次停止接收kb事件(在我的Panel中)!
4.现在,我不能简单地使用Applet(而不是JApplet),因为它的onPaint获取Graphics(而不是Graphics2D对象)。所以,问题3对我来说不是解决方法。
5.AppletViewer与JDK一起提供的工具效果很好。
我非常需要某人的帮助。过去2-3天里尝试了各种排列组合,现在连我都记不清了。
我的平台详细信息:
1.Firefox 3.5.3
2.Fedora 11 x86(带有最新的更新/补丁)
3.Java插件:尝试了这两个,没有区别。
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 4.使用上述jdk1.6.0_16编译我的小程序源代码。
这是我的代码。非常感谢我的同行们...因为我完全陷入了困境!
谢谢,
/SD
请注意:
1.在输入之前单击面板(使用鼠标)没有任何影响。这是我在网络上看到的最常见的建议。
2.我尝试使用“低级”java.awt.KeyEventDispatcher接口。也没有效果!
3.但是,如果我使用Applet而不是JApplet,则Applet可以接收键盘事件。但即使在这里,一旦我向此Applet添加一个Panel(该Panel确实是所有app /绘图逻辑的地方),我就再次停止接收kb事件(在我的Panel中)!
4.现在,我不能简单地使用Applet(而不是JApplet),因为它的onPaint获取Graphics(而不是Graphics2D对象)。所以,问题3对我来说不是解决方法。
5.AppletViewer与JDK一起提供的工具效果很好。
我非常需要某人的帮助。过去2-3天里尝试了各种排列组合,现在连我都记不清了。
我的平台详细信息:
1.Firefox 3.5.3
2.Fedora 11 x86(带有最新的更新/补丁)
3.Java插件:尝试了这两个,没有区别。
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 4.使用上述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>