gpt4 book ai didi

firefox - JApplet/JPanel 没有收到 KeyListener 事件!

转载 作者:行者123 更新时间:2023-12-01 11:09:25 25 4
gpt4 key购买 nike

我无法让我的 JApplet 中的 JPanel 接收键盘事件。我无法理解为什么!

请注意...

  1. 在键入之前单击面板(使用鼠标)没有任何区别。这是迄今为止我在网上看到的最常见的建议。

  2. 我尝试过使用“低级”java.awt.KeyEventDispatcher 接口(interface)。这也没什么不同!

  3. 但是,如果我使用 Applet 而不是 JApplet,那么 Applet 确实会接收键盘事件。但即使在这里,当我向这个 Applet 添加面板时(面板实际上是我所有应用程序/绘画逻辑所在的位置),我再次停止接收 kb 事件(在我的面板中)!

  4. 现在,我不能简单地使用 Applet(而不是 JApplet),因为除其他外,它的 onPaint 获取一个 Graphics(而不是 Graphics2D 对象)。所以,#3 对我来说不是解决方案。

  5. 在 JDK 附带的 AppletViewer 中,事情就像一个魅力。

我在这里迫切需要有人的帮助。在过去的 2-3 天里尝试了各种我现在都想不起来的排列。

我的平台详情:

  1. 火狐 3.5.3

  2. x86 上的 Fedora 11(具有最新更新/补丁)

  3. 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

  4. 使用上面的jdk1.6.0_16编译我的小程序源码。

这是我的代码。非常感谢收到我的程序员同事的来信......因为我完全被困住了!

谢谢,

/标准差

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>

最佳答案

我在网上找到了这个,它为我解决了这个问题:

As for the fact that KeyListener does not work for JApplet as it does for Applet you should use the KeyEventDispatcher interface.

public class AppletMain extends JApplet implements

java.awt.KeyEventDispatcher

Furthermore you have to set the KeyboardFocusManager to the Panel

KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);

Afterwards override the dispatchKeyEvent function of the interface:

@Override
public boolean dispatchKeyEvent(KeyEvent e);

This allows you to catch the KeyEvents as it is done with KeyListener.

关于firefox - JApplet/JPanel 没有收到 KeyListener 事件!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com