【发布时间】:2023-04-03 19:30:01
【问题描述】:
我遇到了 KeyListener 的问题。我创建类gra 在哪里是完整的代码需要在构造函数中玩俄罗斯方块游戏我只添加KeyListener。在其他班级Menu 我创建对象Gra gra = new Gra() 并在满足条件gra.start(g); 时对其进行整理,但是当我在班级Gra 时,KeyListener 不起作用。请帮我解决这个问题。
他是 gra 班的代码
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.JPanel;
//@SuppressWarnings("serial")
public class Gra extends JPanel implements KeyListener{
public Gra(){
addKeyListener(this);
setFocusable(true);
requestFocus();
repaint();
}
public void start(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
setFocusable(true);
requestFocus();
repaint();
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
System.err.println("sdfafs");
char c = arg0.getKeyChar();
System.err.println(c);
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
char c = arg0.getKeyChar();
System.err.println(c);
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
char c = arg0.getKeyChar();
System.err.println(c);
}
}
【问题讨论】:
-
setFocusable(true);可以正常工作,但是当它移动到其他组件时,焦点可能随时丢失。 -
使用
mnemonics(所有按钮和选项卡式窗格以及JLabel都支持)和accelerators(菜单项支持)而不是KeyListener -
我回答的java keylistener not called 或this one answered by MadProgrammer 的可能重复项。此问题有 很多 个重复项。
标签: java swing keylistener