您好,我是 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);
}
}
最佳答案
您的代码有两个问题。
- 第一个问题是,一旦您在框架上调用了可见调用,您就在框架上添加了播放器组件。
- 您没有存储玩家的最后位置。
在您的代码中进行以下更改,它应该会运行:
洞穴
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);
Player p = new Player();
frame.getContentPane().add(p);
frame.setVisible(true);
}
}
播放器#keyPressed
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_UP){
y = y-9;
}else if(key == KeyEvent.VK_DOWN){
y = y+9;
}else if(key == KeyEvent.VK_RIGHT){
x = x+9;
}else if(key == KeyEvent.VK_LEFT){
x = x-9;
}
this.setBounds(x, y, 9, 9);
}
关于java - keyPressed 方法不工作 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718228/