Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于制作键盘游戏的Java_Java_Swing_Keylistener - Fatal编程技术网

用于制作键盘游戏的Java

用于制作键盘游戏的Java,java,swing,keylistener,Java,Swing,Keylistener,这是我的完整keying.java: package com.Bench3.mygame; import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; public class Keying extends JPanel { public Rectangle character; public int charW = 24; public int charH = 36;

这是我的完整keying.java:

package com.Bench3.mygame;

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

public class Keying extends JPanel {

    public Rectangle character;

    public int charW = 24;
    public int charH = 36;

    public boolean right = false;
    public boolean left = false;

    public Keying(Display f, Images i){
        character = new Rectangle(180, 180, charW, charH);

        f.addKeyListener(new KeyAdapter(){ // <-- line 20
            public void keyPressed(KeyEvent e){
                if(e.getKeyCode() == KeyEvent.VK_D){
                    right = true;
                    character.x += 1;
                }
                if(e.getKeyCode() == KeyEvent.VK_A){
                    left = true;
                    character.x -= 1;
                }
            }

            public void keyReleased(KeyEvent e){
                if(e.getKeyCode() == KeyEvent.VK_D){
                    right = false;
                }
                if(e.getKeyCode() == KeyEvent.VK_A){
                    left = false;
                }
            }
        });
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        this.setBackground(Color.BLACK);
        g.setColor(Color.WHITE);
        g.fillRect(character.x, character.y, character.width, character.height);

        if(right){
            character.x += 1;
        }
        if(left){
            character.x -= 1;
        }
        repaint();
    }
}

问题可能是字符矩形需要是最终的:

public final Rectangle character;

当您有匿名类(
f.addKeyListener(new KeyAdapter(){…})
->
KeyAdapter
是匿名类)时,它们需要处理“final”实例,否则它们不知道在实例化类时,
字符
矩形是否已更改,调用它时。

您正在尝试使用
KeyAdapter
,但您没有导入它。您正在导入
java.awt.*
java.awt.event.KeyEvent
。这两种方法都不会引入
java.awt.event.KeyAdapter

您还需要导入
java.awt.event.KeyAdapter

通常,“KeyAdapter无法解析为类型”之类的错误意味着编译器在任何地方都找不到名为“KeyAdapter”的类。这通常是指缺少导入或输入错误


需要指出的是:导入
java.awt.*
不会导入
java.awt.
的子包,例如,它不会自动引入
java.awt.event.*

您不想在StackOverflow上做的是发布代码,本质上说“这是我的代码修复它”。我们需要特定的错误、堆栈跟踪等。否则,您将快速进入一个封闭问题。好的,我在上面的代码中添加了“final”,它仍然存在错误,下一步是什么?final字符问题只是您将遇到的下一个问题,似乎不是当前导入错误的问题。
public final Rectangle character;