Hay我正在尝试学习如何在java中使用Graphics,而我正在编写一个非常简单的代码,该代码将一个图像移动到窗口中并且当它到达边缘时窗口向下移动几个像素,然后从另一端开始。
我的问题是,我的程序在重新绘制()时不会移除上一张图像,因此只需移动1张图像即可获取一长串图像(我也是有一个奇怪的问题,我用来重绘()的按钮是在窗口的左上角重复它的图像,但我认为一次发出1个问题)
这里是我使用的2个类文件的代码:
public class TestieImages extends JFrame implements ActionListener{
ImagePanel jj =new ImagePanel();
TestieImages(){
setTitle("TestFrame");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(582,604);
JButton butt = new JButton("The butt");
butt.addActionListener(this);
butt.setActionCommand("1");
butt.setBounds(200, 200, 80, 24);
add(butt);
add(jj);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String action= e.getActionCommand();
int x=jj.getXCoord();
int y=jj.getYCoord();
if (action.equals("1")){
if (x<=448){
jj.setX(x+64);
}
else{
jj.setX(0);
jj.setY(y+64);
}
jj.repaint();
}
}
public static void main(String[] args) {
JFrame j = new TestieImages();
} }
ImagePanel
public class ImagePanel extends JPanel{
private int x=0;
private int y=0;
private BufferedImage image;
ImagePanel() {
try {
image = ImageIO.read(new File("C:\\Users\\dleitrim09\\Documents\\NetBeansProjects\\TestieImages\\src\\Resources\\Wall.png"));
} catch (IOException ex) {
// handle exception...
}
}
void setX (int newx){
x=newx;
}
void setY (int newy){
y=newy;
}
int getXCoord (){
return x;
}
int getYCoord (){
return y;
}
@Override
protected void paintComponent(Graphics g) {
g.drawImage(image, x, y, null);
}
}
此处还有输出:
答案 0 :(得分:3)
将您的窗户视为一幅画。当你为它画一些东西时,你会画出已经存在的东西。因此,如果您只是绘制图像,那么之前绘制的图像仍然存在。
所以你需要擦拭你的画布&#39;在将图像绘制到窗口之前。如果您在致电super.paintComponent(g)
之前致电drawImage()
,这将由超级课程完成。