请注意,我对所有这些编程都很陌生。现在我有一个框架,其中添加了一个面板。我相信我已经在面板上使用了 PaintComponent 方法,但是现在当我尝试使用按键监听器时,我需要移动我在面板上绘制的图像。我目前不知道如何重新绘制它。
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.*;
@SuppressWarnings
("serial")
public class Game extends JPanel implements KeyListener
{
Car fo = new Car();
draw a=new draw();
public Game()
{
JFrame frame2=new JFrame("JASA1 Racing");
frame2.add(new draw());
frame2.setSize(500,600);//set frame size
frame2.setVisible(true);//made frame visible
frame2.setResizable(false);
frame2.addKeyListener(this);
frame2.setFocusable(true);
}
public class draw extends JPanel
{
private static final long serialVersionUID = 1L;
public void redraw()
{
repaint();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
ImageIcon ic2=new ImageIcon("C:\\Users\\Shawn\\track.jpg");
Image img=ic2.getImage();
g.drawImage(img, 0, 0,null);
g.drawImage(fo.getcar(),fo.getX(),fo.getY(),null);
System.out.println(fo.getX() + " " + fo.getY());
}
}
public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode();
if(key == KeyEvent.VK_LEFT)
{
fo.move(-50, 0);
System.out.print(fo.getX());
a.repaint();
}
else if(key == KeyEvent.VK_RIGHT)
{
fo.move(50, 0);
System.out.print(fo.getX());
a.redraw();
}
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
}
最佳答案
draw a=new draw();
不是您添加到框架中的内容,您使用了 frame2.add(new draw());
相反。
尝试使用frame2.add(a);
我还会考虑使用 Key Bindings因为它将允许您克服与 KeyListener
关于java - 尝试重新绘制 jpanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21035073/