我有KeyListener的问题,我一直在寻找解决方案,但它应该工作。 不幸的是,它没有,我不知道为什么。当我输入箭头时,没有任何反应。 我正在读“焦点”,但我不知道它是如何工作的,也许你可以给我一些例子,对我的问题不必要。
public class Trawa extends JPanel implements KeyListener {
int wysokosc = 200;
public Trawa(){
addKeyListener(this);
setSize(200,600);
setBackground(Color.GREEN);
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
Color c1 = new Color(36,217,36);
g2d.setColor(c1);
g2d.fillRect(10, wysokosc, 100, 100);
c1 = new Color(0,0,0);
g2d.setColor(c1);
g2d.fillRect(10, wysokosc, 30, 30);
g2d.fillRect(80, wysokosc, 30, 30);
c1 = new Color(252,3,0);
g2d.setColor(c1);
g2d.fillRect(40, wysokosc+60 ,30,30);
}
@Override
public void keyPressed(KeyEvent arg0) {
int key = arg0.getKeyCode();
if(key == KeyEvent.VK_UP)
wysokosc-=100;
repaint();
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
这是我的主要类框架。也许问题出在这里。
public class GUI extends JFrame{
public GUI(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
add(new Trawa());
setLayout(new GridLayout(1,5));
pack();
setSize(1300, 600);
setLocation(40, 100);
setVisible(true);
}
public static void main(String[] args) {
new GUI();
}
}
答案 0 :(得分:2)
在使用KeyListener之前,您必须了解焦点的工作原理。
尝试从JPanel的构造函数中调用setFocusable(true)。
答案 1 :(得分:0)
您已正确完成所有操作,但忘记将关键监听器与您的框架绑定。
试试这个版本的GUI类
class GUI extends JFrame {
public GUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
Trawa t = new Trawa();//this is a JPanel as well as a KeyListner
add(t);
this.addKeyListener(t);
setLayout(new GridLayout(1, 5));
pack();
setSize(500, 400);
setLocation(40, 100);
setVisible(true);
}
}
凯文指出:所需的最小变化是将焦点放在面板上
public Trawa() {
addKeyListener(this);
setSize(200, 600);
setBackground(Color.GREEN);
setFocusable(true);
}