有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

SwingJava事件。getKeyCode错误

所以我在做这个游戏。这是一个至今仍在弹跳的球。但我想给游戏添加一点紫色。所以我添加了这个垫子,我希望用户能够四处移动。我四处搜索,找不到一个如何使用keyevents的好例子。不管怎样,这是我的密码

import java.awt.*;
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.EventQueue;


public class MainFrame extends JPanel implements Runnable {

    int diaPad = 120;
    long delay = 20;
    private int xx = 120;
    private int yy = 670;
    private int dxx = 6;

protected void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);

    g.setColor(Color.BLACK);
    g.fillRect(xx,yy,120,15);

} 
public void run() {
    while(isVisible()) {
        try {
            Thread.sleep(delay);
        } catch(InterruptedException e) {
            System.out.println("interrupted");
        }
        repaint();
    }
}    
public void movePadRight() {
        if(xx + dxx < 0 || xx + diaPad + dxx > getWidth()) {
             dxx *= -1;
        }
        xx += dxx;

}
public void movePadLeft(){

        if(xx + dxx < 0 || xx + diaPad + dxx > getWidth()) {
             dxx *= -1;
        }
        xx -= dxx;

}

public void keyBoard(KeyEvent e){
   if (event.getKeyCode() == KeyEvent.VK_LEFT) {
        movePadLeft();
   }
    if (event.getKeyCode() == KeyEvent.VK_RIGHT) {
        movePadRight();
        }
    }
}

我在代码中没有看到任何错误,但是当我编译程序时,我得到了这个

主机。java:79:找不到符号 符号:可变事件 地点:class大型机 if(event.getKeyCode()==KeyEvent。(右){ ^


共 (3) 个答案

  1. # 1 楼答案

    您的KeyEvent变量是“e”而不是“event”。变量名不正确

  2. # 2 楼答案

    KeyEvent变量被定义为e

    if (e.getKeyCode() == KeyEvent.VK_LEFT) {
    

    注意:在Swing中使用key bindings来处理键交互。关键侦听器需要关注组件才能工作。它们是为旧的AWT图形库设计的,并不真正适合Swing

  3. # 3 楼答案

      if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            movePadLeft();
       }
    

    您正在以e的形式接收事件

    这个变量来自方法参数

    public void keyBoard(KeyEvent e){ <   
    

    将其更改为event,这比简单的e可读性更强

    public void keyBoard(KeyEvent event){
       if (event.getKeyCode() == KeyEvent.VK_LEFT) {
            movePadLeft();
       }