Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 使用JFrame和KeyAdapter的键盘输入_Java_Keyboard - Fatal编程技术网

Java 使用JFrame和KeyAdapter的键盘输入

Java 使用JFrame和KeyAdapter的键盘输入,java,keyboard,Java,Keyboard,大家好,我正在使用netbeans 7.2.1 并且正在学习键盘输入的教程 这段代码应该在JFrame中画一个圆,它就是这样做的 但接下来应该采取箭头键输入来移动它,而它不这样做 谢谢你的帮助:) 好的,有一个问题:你的if语句 基本上,在keyListener中,if语句不会执行,因为它们后面有分号。 剩下的块都是,对x的修改是相同的。只要去掉那些分号,我相信它会起作用。 另外,不要从paintComponent()调用repaint(),因为每次都会生成大量的repaint。我不知道这是否重

大家好,我正在使用netbeans 7.2.1 并且正在学习键盘输入的教程

这段代码应该在JFrame中画一个圆,它就是这样做的 但接下来应该采取箭头键输入来移动它,而它不这样做

谢谢你的帮助:)


好的,有一个问题:你的
if语句
基本上,在
keyListener
中,
if语句
不会执行,因为它们后面有
分号。
剩下的块都是,对
x
的修改是相同的。只要去掉那些分号,我相信它会起作用。
另外,不要从
paintComponent()
调用
repaint()
,因为每次都会生成大量的
repaint
。我不知道这是否重要,但您应该在
JFrame
上调用
setFocusable(true)
,以确保
keylister
工作正常


祝你好运

从获取新教程开始。您不应该重写JFrame的paint()方法来进行绘制。自定义绘制是通过重写JPanel(或JComponent)的paintComponent()方法完成的。然后将面板添加到框架中。有关示例和更多信息,请阅读上的Swing教程。此外,您还应该阅读有关键绑定的教程,通常应该使用键绑定而不是键侦听器。除非组件具有焦点,否则您的关键侦听器将无法工作。@camickr请回答这个问题!这帮我省去了一场咆哮+1,我支持@camickr所说的一切。请阅读这些教程,然后如果仍然卡住,请带着新代码回来,让我们来复习一下。
package gamefirstclass;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;

public class GameFirstClass extends JFrame {
//Variables

    int y, x;
//Double Buffer
    private Image dbImage;
    private Graphics dbg;

//Window Basics
    public GameFirstClass() {
        addKeyListener(new AL());
        setTitle("Add window title");
        setSize(800, 700);
        setResizable(false);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        x = 150;
        y = 150;

    }
// main

    public static void main(String[] args) {
        new GameFirstClass();
    }
    //Controls
    public class AL extends KeyAdapter {

        @Override
        public void keyPressed(KeyEvent event) {
            int keyCode = event.getKeyCode();
            if (keyCode == event.VK_LEFT)
            {
                x--;
            }
            if (keyCode == event.VK_RIGHT)
            {
                x++;
            }
            if (keyCode == event.VK_UP)
            {
                y--;
            }
            if (keyCode == event.VK_DOWN)
            {
                y++;
            }
        }

        @Override
        public void keyReleased(KeyEvent event) {
        }
    }
//Double Buffer

    @Override
    public void paint(Graphics g) {
        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbImage, 0, 0, this);
    }

    public void paintComponent(Graphics g) {
        g.fillOval(x, y, 15, 15);
        repaint();
    }
}