# repaint verschiebt das Bild



## Paladin (7. Nov 2006)

Hi,

ich mache gerade ein paar erste Schritte mit Java2D. Als erstes Projekt versuche ich eine Art Amaturenbrett mit verschiedenen Tacho Anzeigern darzustellen.  Die Tachonadeln der Tachos sind beweglich und können per Drag & Drop verändert werden.

Ich werde den Aufbau hier jetzt erstmal nur beschreiben ohne code abzudrucken. 
Das JFrame habe ich folgendermaßen aufgebaut:

Ich habe ein Hauptpanel und mehrere Nebenpanels die per GridLayout auf dem Hauptpanel angeordnet werden.
Für alle Panels habe ich eine extra Klasse nach dem folgenden Schema geschrieben:


```
class Panelname extends JPanel {

    public Panelname() {

    }

    public void paintComponent(Graphics g) {
    
    //Hier male ich die entsprechenden Hintergrundgrafiken in die Panels

    }
}
```

Auf dem Hauptpanel habe ich nun das Hintergrundbild gezeichnet und auf den Nebenpanels die Tachos.
Die Nebenpanels habe ich mit setBackground(0,0,0,0) auf Transparent gesetzt. 

Wenn ich jetzt für einen der Tachos die repaint() Methode aufrufe verschiebt sich aber leider der Teil des
Hintergrundbildes auf dem das entsprechende Nebenpanel steht.
Ich könnte das Problem beheben indem ich alle Elemente neuzeichne. Dies ist allerdings nicht gerade 
ökonomisch und führt auch zu einer üblen Ruckelshow.

Daher habe ich die folgenden Fragen:

1) Warum verschiebt sich das Hintergrundbild und wie kann ich das verhindern?
2) Gibt es einen einfacheren und besseren Weg um ein solches Projekt umzusetzen?

Vielen Dank im voraus

Gruß

Paladin


----------



## Beni (7. Nov 2006)

Swing muss wissen, welche JComponenten transparent sind. Sag den Componenten mit "setOpaque( false )", dass man durch sie hindurchsieht.


----------



## Paladin (7. Nov 2006)

Hi Beni,

vielen Dank für die Hilfe.

Das Hintergrundbild wird jetzt nicht mehr verschoben. Allerdings verschieben sich jetzt komischerweise die 
einzelnen Elemente des Tachos.

Der Tacho besteht aus 3 Bildern die ich übereinanderlege.
Bild1 = Der Tacho ohne Zeiger und Glasscheibe
Bild2 = Der Tachozeiger
Bild3 = Die Glasscheibe

Wie gesagt verschiebt sich jetzt das Hintergrundbild nicht mehr. Auch Bild 1 bleibt brav an seinem Platz.
Nur Bild2 und 3 verschieben sich ein bissel nach unten rechts.

Ne Ahnung woran das liegen könnte?

Hier ist ein Auszug aus dem Quelltext der für die Erstellung eines der Tachos verantwortlich ist.


```
class TachoFibu extends JPanel {
				
		public TachoFibu() {
			this.addMouseMotionListener(new dragFibu());
			setOpaque(false);
		}
	
		public void paintComponent(Graphics g) { 
			super.paintComponent(g);
			Graphics2D g2 = (Graphics2D) g;
						
			if(fibu_zehntel<2.0) fibu_zehntel=2.0;
			if(fibu_zehntel>10.0) fibu_zehntel=10.0;
			if(fibu_rotation<-23) fibu_zehntel=2.0;
			if(fibu_rotation<=-20 && fibu_rotation>=-23) fibu_zehntel=3.0;
			if(fibu_rotation<=-15 && fibu_rotation>-20) fibu_zehntel=4.0;
			if(fibu_rotation<=-8 && fibu_rotation>-15) fibu_zehntel=5.0;
			if(fibu_rotation<=-4 && fibu_rotation>-8) fibu_zehntel=6.0;
			if(fibu_rotation<=1 && fibu_rotation>-4) fibu_zehntel=7.0;
			if(fibu_rotation<=7 && fibu_rotation>1) fibu_zehntel=8.0;
			if(fibu_rotation<=12 && fibu_rotation>7) fibu_zehntel=9.0;
			if(fibu_rotation<=18 && fibu_rotation>12) fibu_zehntel=10.0;
			if(fibu_rotation<=24 && fibu_rotation>18) fibu_zehntel=11.0;
			if(fibu_rotation<=32 && fibu_rotation>24) fibu_zehntel=12.0;
					
			AffineTransform aft_org = new AffineTransform();
			AffineTransform aft = new AffineTransform();
			aft.rotate ( Math.toRadians( fibu_rotation ), imageAxis_x_fibu, imageAxis_y_fibu);
			g2.drawImage(tacho_body_fibu, imagePos_x_fibu, imagePos_y_fibu, this);
					
			g2.setTransform ( aft );
			g2.drawImage(tacho_nadel_fibu, imagePos_x_fibu+51, imagePos_y_fibu+74, this);
			g2.setTransform ( aft_org );
			g2.drawImage(tacho_glass_fibu, imagePos_x_fibu+23, imagePos_y_fibu+21, this);
			
		}
		
	}
```

Gruß

Paladin


----------

