# Bilder speichern 2 - Methode richten?



## Heiland (5. Mrz 2005)

Also,

Durch einen KLick wird ein BIld gezeichnet (oder soll gezeichnet Werden) das Problem ist, dass das Bild nie gespeichert bleibt. Es soll ein repaint erfolgen, aber nicht meine BIlder löschen, die ich durch klicken gemacht habe! 

Hier der Code: Ich sitze jetzt Stunden daran, aber weiß nicht, wie man das lösen soll!


```
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import java.io.*;

public class LevelViewer extends JPanel
{
  int levelWidth;
  int levelHeight;
  int mouseXPos;
  int mouseYPos;
  int tileXPos;
  int tileYPos;
  int tileX;
  int tileY;
  int tileXCopy;
  int tileYCopy;
  int index = 1;
  int indexCount = 0;
  int newCount;
  Image newImage;
  String[] imageSave;
  String imageString;
  String imageString2;
  int imageString2length;
  Image[] imageCopy;
 
  public LevelViewer(int levelWidth, int levelHeight) 
  {
  	 this.levelWidth = levelWidth;
     this.levelHeight = levelHeight;
     this.setBackground(Color.BLACK);
     this.addMouseListener(new MouseAdapter()
     {
     	public void mouseClicked(MouseEvent mse)
     	{
     		//getNewCount();
     		Graphics g = getGraphics();
     		mouseXPos = mse.getX();
  	   		mouseYPos  = mse.getY();
  	   		tileXCopy = getTileSourceX();
  	   		tileYCopy = getTileSourceY();
  	   		imageCopy = new Image[index];
  	   		imageCopy[indexCount] = Toolkit.getDefaultToolkit().createImage(imageString2);
  	   		//g.drawImage(imageCopy[indexCount], tileXCopy, tileYCopy, null);
  	   		System.out.println(imageString2);
  	   		System.out.println(tileXCopy);
  	   		System.out.println(tileYCopy);
  	   		index += 1;
  	   		indexCount += 1;
  	   		repaint();
     	}
     });
     this.addMouseMotionListener(new MouseMotionAdapter()
     {
     	public void mouseMoved(MouseEvent mse)
     	{
     		mouseXPos = mse.getX();
  	   		mouseYPos  = mse.getY();
  			getTileSourceX();
  			getTileSourceY();
  			//repaint();
     	}
     });
  }
  
  public int getNewCount()
  {
  	newCount = indexCount;
  	return newCount;
  }
  
  public void getImageString()
  {
  	System.out.println(imageString2);
  	imageString2length = imageString2.length();
  }
  
  public void setTileImage(String imageString)
  {
  	newImage = Toolkit.getDefaultToolkit().createImage(imageString);
  	imageString2 = imageString;
  }
  
  public void setLevelSize(int newWidth, int newHeight)
  {
  	levelWidth = newWidth;
  	levelHeight= newHeight;
  	repaint();
  }
  
  public int getTileSourceX()
  {
  	tileXPos = mouseXPos/50;
  	tileX = tileXPos * 50;
  	return tileX;
  }
  
  public int getTileSourceY()
  {
  	tileYPos = mouseYPos/50;
  	tileY = tileYPos * 50;
  	return tileY;
  }
 
  public void paintComponent(Graphics g)
  {
  	 super.paintComponent(g);
  	 g.setColor(Color.BLUE);
  	 g.clipRect(0 ,0, levelWidth * 50 + 1, levelHeight * 50 + 1);
  	 
  	 for (int i=0; i<levelWidth + 1; i++)
  	 {
  	 	g.drawLine(i * 50 ,0 ,i * 50, this.getHeight());
  	 }
  	 for (int y=0; y<levelHeight + 1; y++)
  	 {
  	 	g.drawLine(0, y * 50,this.getWidth(), y * 50);
  	 }
  	 //g.drawImage(newImage, tileX, tileY, null);
  	 //int count = getNewCount();
  	 //for(int a=0; a<count; a++)
  	 //{
  	 	//g.drawImage(imageCopy[tileXCopy][tileYCopy], tileXCopy, tileYCopy, null);
  	 	//System.out.println("COUNTER: "+count);
  	 	//System.out.println("A      : "+a);
  	 //}
  	 if(imageCopy != null)
  	 {
  	 	for(int counter=0; counter<indexCount ; counter++)
  	 	{
  	 		g.drawImage(imageCopy[counter], tileXCopy, tileYCopy, null);
  	 		if(counter < indexCount)
  	 		{
  	 			counter = 0;
  	 		}
  	 	}	
  	 }
  	 
  }
  
     
  
  public Dimension getPreferredSize()
  {
  	return new Dimension (levelWidth * 50 + 1, levelHeight * 50 + 1);
  }
}
```


----------



## Illuvatar (5. Mrz 2005)

Wenn du das

```
imageCopy = new Image[index];
```
in der mouseClicked-Methode machst, wird das Array jedesmal neu gemacht und alle Bilder, die du früher gemacht hast, auf null gesetzt. Du musst das Array also außerhalb initialisieren.


----------



## Heiland (6. Mrz 2005)

Danke für die Antwort. habs Mittlerweile geändert. Siehe dazu den neuen Thread!


----------

