我想在不同的时间集中绘制一些矩形,当我用paint()绘制第一个矩形时,我使用paint()绘制第二个矩形,然后第一个矩形消失。我发现一个图像覆盖了一个普遍的图像。如何不重新创建以前的(不使用repaint())?我很欣赏每一个答案:d
public static class Screen extends Frame
{
int WIDTH = 900;
static int[][] map = new int[700][700];
public Screen()
{
super("Clash of Tank");
setSize(WIDTH, WIDTH);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public void paint(Graphics g) {
BufferedImage image = (BufferedImage) createImage(700,700);
Graphics g2 = image.getGraphics();
drawTank(g2);
g.drawImage(image, 325, 35, this);
}
void drawTank(Graphics g) {
g.setColor(Color.BLACK);
for(int i = 0; i<=690; i+=1)
for(int j = 0; j<=690; j+=1)
{
if(map[i][j]==0)
g.setColor(Color.BLACK);
if((map[i][j]==1))
g.setColor(Color.BLUE);
if((map[i][j]==2))
g.setColor(Color.RED);
if((map[i][j]==3))
g.setColor(Color.GREEN);
if((map[i][j]==4))
g.setColor(Color.YELLOW);
g.fillRect(i, j, 1, 1);
}
}
}
public class ClashofTanks
{
public static void main(String[] args) throws Exception
{
Screen t = new Screen();
t.setVisible(true);
t.repaint();
}
}
答案 0 :(得分:0)
你的是一个经典的XY Problem,你要求一个特定的解决方案来解决一个错误的做事方式。
关键是你应该使用repaint()
,但是你应该存储一组矩形并在paint
或{{{for}循环中绘制它们1}}方法(如果使用Swing),或者将它们绘制到BufferedImage并在绘制方法中绘制 。不要忘记也调用super paint或paintComponent方法。