哪个大佬能给解释一下 为什么键盘没有监听到

lenlir 2020-05-06 09:08:11
import javax.swing.JFrame; import javax.swing.WindowConstants; public class GameFrame { public static void main(String[] args) { JFrame j1 = new JFrame(); j1.setVisible(true); j1.setBounds(100,100,570,613); j1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); j1.add(new GamePanel()); } } import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.JPanel; public class GamePanel extends JPanel { public GamePanel() { this.addKeyListener(new Listen()); } class Listen extends KeyAdapter{ @Override public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_SPACE) { System.out.println("按了空格"); } } }}
...全文
154 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
do_wa5810 2020-05-09
  • 打赏
  • 举报
回复
引用 楼主 weixin_44852871 的回复:
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class GameFrame {
public static void main(String[] args) {
JFrame j1 = new JFrame();
j1.setVisible(true);
j1.setBounds(100,100,570,613);
j1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
j1.add(new GamePanel());
}

}




import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;

public class GamePanel extends JPanel {
public GamePanel() {
this.addKeyListener(new Listen());
}
class Listen extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_SPACE) {
System.out.println("按了空格");
}
}
}}


你这addKeyListener用的就不对啊;

JFrame jf = new JFrame();

jf.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
// 获取键值,和 KeyEvent.VK_XXXX 常量比较确定所按下的按键
int keyCode = e.getKeyCode();
System.out.println("按下: " + e.getKeyCode());
}

@Override
public void keyTyped(KeyEvent e) {
// e.getKeyChar() 获取键入的字符
System.out.println("键入: " + e.getKeyChar());
}

@Override
public void keyReleased(KeyEvent e) {
System.out.println("释放: " + e.getKeyCode());
}
});
qybao 2020-05-07
  • 打赏
  • 举报
回复
因为你的GamePanel没法聚焦,一个组件要响应事件就要先获得焦点,否则发生的事件也只会是其他正在聚焦的组件而不是你的GamePanel。 你可以修改main方法 GamePanel gp = new GamePanel(); j1.add(gp);//最好j1能setLayout if (gp.isFocusable()) { gp.requestFocuse(); //主动获取焦点 }
sun0322 2020-05-06
  • 打赏
  • 举报
回复
要是没有记错的话,你得使用匿名的内部类才能解决。 【KeyEvent 匿名内部类】随便百度了一下,凑付看下吧 https://blog.csdn.net/LeoZuosj/article/details/104230051 自己也可以,以此为方向查一查

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧