gpt4 book ai didi

java - 使用 JFrame 和 KeyAdapter 进行键盘输入

转载 作者:行者123 更新时间:2023-12-01 14:50:45 25 4
gpt4 key购买 nike

大家好,我使用的是 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();
}
}

最佳答案

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

祝你好运!

关于java - 使用 JFrame 和 KeyAdapter 进行键盘输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com