java - keyPressed 方法不工作 Java

标签 java jframe jpanel keypress keyevent

您好,我是 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);

    }

}

最佳答案

您的代码有两个问题。

  1. 第一个问题是,一旦您在框架上调用了可见调用,您就在框架上添加了播放器组件。
  2. 您没有存储玩家的最后位置。

在您的代码中进行以下更改,它应该会运行:

洞穴

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/

相关文章:

java - 我的 JPanel 中的 .showMessageDialog 出现错误?

java - 使 Spring Hibernate 线程安全。最好的安慰

java - 如何在Spring中正确终止 Activity 的套接字连接?

java - 有没有办法将 char 循环到数组中?

java - 在 JFrame 内的 JPanel 内设置 JLabel 位置

java - 单击按钮时在 JPanel 中加载图像

java - 将以毫秒为单位的时间戳转换为以秒为单位的时间戳

java - JFrame:如何在没有 JTextArea/JTextField 的情况下显示文本

java - 当按下某个组合键时,JFrame 可以重新出现吗?

java - 如何让JFrame适合全屏?