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