【发布时间】: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 必须说的所有内容。请阅读这些教程,如果仍然卡住,请返回您的新代码,让我们复习一下。