【发布时间】:2016-04-15 13:36:11
【问题描述】:
您好,我是 Java 新手,我正在尝试使用箭头键在 JFrame 上移动 JPanel(播放器),但由于某种原因它无法正常工作。我相信这是因为 keyPressed 方法在按下某个键时没有响应,但我真的不知道。
这是 Player 类的代码:
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
public class Player extends JPanel implements KeyListener{
int x=0,y=0;
public Player(){
this.setBounds(x, y, 9, 9);
this.setOpaque(true);
this.setBackground(Color.red);
this.setFocusable(true);
addKeyListener(this);
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_UP){
this.setBounds(x, x-9, 9, 9);
}else if(key == KeyEvent.VK_DOWN){
this.setBounds(x, y+9, 9, 9);
}else if(key == KeyEvent.VK_RIGHT){
this.setBounds(x+9, y, 9, 9);
}else if(key == KeyEvent.VK_LEFT){
this.setBounds(x-9, y, 9, 9);
}
}
public void keyReleased(KeyEvent arg0) {}
public void keyTyped(KeyEvent arg0) {}
}
提前致谢!
编辑: 这是 JFrame 的代码: 导入 javax.swing.JFrame;
public class Cave {
public static void main(String[] args) {
JFrame frame = new JFrame("Cave Generator");
frame.setBounds(0, 0, 0, 0);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
Player p = new Player();
frame.getContentPane().add(p);
}
}
【问题讨论】:
-
看来您可能需要
repaint框架以反映更改。 -
那你调试了吗?是否调用了该方法,但使用了意外的键码?你打电话 setBounds 但什么也没发生?你真的需要自己做诊断工作。
-
我做了调试,方法没有被调用
-
如何将
JPanel添加到您的框架中?你能把那个代码也包括进去吗? -
@OfriAdiv 真的吗?我尝试了您的代码,并且调用了 keyPressed,它只是没有正确计算坐标。 -> 看看我的答案...
标签: java jframe jpanel keypress keyevent