Problem mit Bild

PsychoSam

Mitglied
Hallo

Ich hab folgendes Problem mit Bilder allgemein:

Ich hab eine JPanel auf dem ich zeichnen will. Dazu überschreib ich die paint methode

Code:
buffer= new BufferedImage(this.getWidth(), this.getHeight(),      BufferedImage.TYPE_INT_RGB);
zBuffer = buffer.getGraphics();


Code:
	public void paint(Graphics g){
		
drawComponents(zBuffer);
drawGrid(zBuffer);
 g.drawImage(buffer, 0,0, this);
	}

drawGrid malt ein Gitter, das funktioniert auch wunderbar

drawComponent sieht so aus:
Code:
private void drawComponents(Graphics g){
	StreetField tmpStreetField;
	Point tmpRealXY;
	Image tmpImage;
		
	if(!streetFields.isEmpty()){

		for (int i=0;i < streetFields.size(); i++ ){
			tmpStreetField = streetFields.elementAt(i);
			tmpRealXY = tmpStreetField.getRealXY();
			tmpImage = tmpStreetField.getStreetImage();
			g.drawImage(tmpImage, tmpRealXY.x, tmpRealXY.y, this);
		}

	}

Das Problem was ich jetzt habe sieht so aus:
Bei StreetFields handelt es sich um ein Vektor, der StreetField Objekte aufnimmt. Wenn ein weiteres Objekt hinzukommt, wird das auch gezeichnet. Lösche ich aber eins aus dem Vektor, bleibts immer noch im Bild "heften". Selbst wenn ich versuche, auf der Stelle des ursprünglichen Bildes ein schwarzes Viereck zu zeichnen, so bleibt das Bild weiterhin sichtbar. Verwende ich hingegen statt dem BufferedImage den orginalen Graphics Kontext,
so verschwinden beim Bewegen des Fensters alle Bilder bis auf das zuletzt hinzugefügte.
Ähnlich verhält sich unabhängig von der Verwendung vom orginalen oder offscreen Graphics Kontext, wenn ich das Bild eines beliebigen StreetField Objekt verändere. Nur das zuletzte hinzugefügte verändert sich. Am Vektor hängts net, da wird alles korrekt aufgefasst.

Tut mir leid, für die etwas längliche Beschreibung

Hat jemand eine Idee oder einen Tipp?
Mir fällt nix mehr ein

Gruss Alex
 
Hallo,

es wäre nicht schlecht, wenn du den kompletten Code posten würdest. So kann man nämlich nicht die Zusammenhänge erkennen.

So kann es meiner Meinung nach viele Gründe geben, warum es nicht funktioniert.

MFG

Sascha
 
also hier ist der komplette code
aber da steht nich viel mehr drin

Code:
public class ScenePainter extends JPanel{
	GridRect[][] gridRects = new GridRect[60][50];
	boolean occupiedGridRects[][] = new boolean[60][50];
	Vector<StreetField> streetFields;
	BufferedImage buffer;
    Graphics zBuffer;
    BufferedImage oldBuffer;
  
	
	/**
	 * @param streetFields
	 * @param g
	 */
	public ScenePainter(Vector<StreetField> streetFields, Gui g){
		super(true);
		this.streetFields = streetFields;
	    setSize(1000,1000);
		init();
		
		
		
	}
	
	public void paintComponent(Graphics g){
		
		drawComponents(zBuffer);
		drawGrid(zBuffer);
		g.drawImage(buffer, 0,0, this);
	}
	
    public void init(){
		int x = 0, y = 0;
		for (int i=0;i<40; i++){
			for(int j=0;j<30; j++){
				gridRects[i][j] = new GridRect(new Point(x,y));
				y += 20;
			}
			y = 0;
			x += 20;
		}
		this.setVisible(true);
		
		buffer= new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_RGB);
		zBuffer = buffer.getGraphics();
		zBuffer.setColor(new Color(255,255,255));
		
	}
	
	private void drawGrid(Graphics g){
		for(int i=0; i<40; i++){
			for(int j=0; j<30; j++){
				gridRects[i][j].draw(g);
			}
		}
	}
	
	private void drawComponents(Graphics g){
		StreetField tmpStreetField;
		Point tmpRealXY;
		Image tmpImage;
		
		if(!streetFields.isEmpty()){

			for (int i=0;i < streetFields.size(); i++ ){
				System.out.print("" + i);
				tmpStreetField = streetFields.elementAt(i);
			        tmpRealXY = new Point(tmpStreetField.getRealXY().x,tmpStreetField.getRealXY().y);
				tmpImage = tmpStreetField.getStreetImage();
                                g.drawImage(tmpImage, tmpRealXY.x, tmpRealXY.y, this);

			}
			
		}
		
	}

}
 
Zurück