Java Can';不要让JFrame简单的类似绘画的程序使用键绑定
没有错误或其他东西,只有一个透明的屏幕(它会复制背景)和一个绘制的椭圆形,但每当我尝试在键盘上键入箭头键时,它都不会工作。我已经添加了KeyListener并将类扩展到JFrame,但它仍然没有做任何事情。我知道这只是初学者的东西,但我自己也是初学者,这一直困扰着我:/。此外,我还使用了repaint(),但它仍然会重新渲染背景?提前谢谢你的帮助Java Can';不要让JFrame简单的类似绘画的程序使用键绑定,java,graphics,paint,repaint,keyevent,Java,Graphics,Paint,Repaint,Keyevent,没有错误或其他东西,只有一个透明的屏幕(它会复制背景)和一个绘制的椭圆形,但每当我尝试在键盘上键入箭头键时,它都不会工作。我已经添加了KeyListener并将类扩展到JFrame,但它仍然没有做任何事情。我知道这只是初学者的东西,但我自己也是初学者,这一直困扰着我:/。此外,我还使用了repaint(),但它仍然会重新渲染背景?提前谢谢你的帮助 package JavaMain; import java.awt.Graphics; import java.awt.event.KeyAdapt
package JavaMain;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
public class javamain extends JFrame {
int x, y;
private static final long serialVersionUID = 1L;
public class AL extends KeyAdapter {
private int keycode;
@SuppressWarnings("static-access")
public void keypress(KeyEvent event) {
keycode = event.getKeyCode();
if (keycode == event.VK_LEFT) {
x -= 10;
}
if (keycode == event.VK_RIGHT) {
x += 10;
}
if (keycode == event.VK_UP) {
y -= 10;
}
if (keycode == event.VK_DOWN) {
y += 10;
}
}
public void keyrelease(KeyEvent e) {
}
}
public javamain() {
addKeyListener(new AL());
setTitle("Statistic");
setSize(600, 800);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x = 200;
y = 200;
}
public void paint(Graphics g) {
g.fillOval(x, y, 20, 20);
repaint();
}
public static void main(String[] args) {
new javamain();
}
}
错误在于您的KeyListener AL类没有使用正确的方法名 就我所知,应该按下和释放键
private class AL extends KeyAdapter {
public void keyPressed(KeyEvent event) {
int keycode = event.getKeyCode();
if (keycode == KeyEvent.VK_LEFT) {
x -= 10;
}
if (keycode == KeyEvent.VK_RIGHT) {
x += 10;
}
if (keycode == KeyEvent.VK_UP) {
y -= 10;
}
if (keycode == KeyEvent.VK_DOWN) {
y += 10;
}
}
public void keyReleased(KeyEvent e) {
}
}
在不更改任何其他代码的情况下,这似乎可以正常工作。错误在于您的KeyListener AL类没有使用正确的方法名 就我所知,应该按下和释放键
private class AL extends KeyAdapter {
public void keyPressed(KeyEvent event) {
int keycode = event.getKeyCode();
if (keycode == KeyEvent.VK_LEFT) {
x -= 10;
}
if (keycode == KeyEvent.VK_RIGHT) {
x += 10;
}
if (keycode == KeyEvent.VK_UP) {
y -= 10;
}
if (keycode == KeyEvent.VK_DOWN) {
y += 10;
}
}
public void keyReleased(KeyEvent e) {
}
}
在不更改任何其他代码的情况下,这似乎是可行的。您可能需要检查此问题的格式。标题对于你所问的有点长,而你的问题是一段很长的文字。你使用IDE吗?它们在调试和代码格式方面有很大帮助。您可能想检查一下这个问题的格式。标题对于你所问的有点长,而你的问题是一段很长的文字。你使用IDE吗?它们在调试和代码格式方面帮助很大。谢谢,这就解决了它。另外,重新渲染屏幕如何?我必须重新油漆(),它仍然渲染背景?谢谢,这已经修复了。另外,重新渲染屏幕如何?我必须重新油漆(),它仍然渲染背景?