【问题标题】:Keyboard input using JFrame and KeyAdapter使用 JFrame 和 KeyAdapter 的键盘输入
【发布时间】:2015-10-26 07:20:45
【问题描述】:

大家好,我正在使用 netbeans 7.2.1 并且正在关注键盘输入教程

这段代码应该在 JFrame 中画一个圆圈,它确实如此 但随后应该使用箭头键输入来移动它,它不会

谢谢你的帮助:)

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();
    }
}

【问题讨论】:

  • 从获取新教程开始。您不应该重写 JFrame 的 paint() 方法来进行绘画。自定义绘画是通过覆盖 JPanel(或 JComponent)的 paintComponent() 方法来完成的。然后将面板添加到框架中。阅读 Custom Painting 上的 Swing 教程以获取示例和更多信息。此外,您应该阅读有关 Key Bindings 的教程,通常应该使用它来代替 KeyListeners。除非组件具有焦点,否则您的关键侦听器将无法工作。
  • @camickr 请将此作为答案!它救了我一个咆哮+1
  • 我支持@camickr 必须说的所有内容。请阅读这些教程,如果仍然卡住,请返回您的新代码,让我们复习一下。

标签: java keyboard


【解决方案1】:

好的,所以有一个问题:你的if statements!
基本上,在您的keyListener 中,if statements 不会执行,因为它们后面的semicolon
剩下的就是块,对x的修改也是一样的。只需删除那些semicolons,我相信它会起作用。
另外,不要从paintComponent() 调用repaint(),因为每次都会生成很多repaints。我不知道这是否重要,但您应该在您的JFrame 上致电setFocusable(true) 以确保KeyListener 有效。

祝你好运!

【讨论】:

    猜你喜欢
    • 2014-04-21
    • 2013-08-21
    • 2014-10-20
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    相关资源
    最近更新 更多