Swing Aus verschiedenen Klassen zeichnen.

Chibu

Mitglied
Hej, ich bins wieder^^. ich wollte nochmal genauer Fragen wie man aus anderen Klassen heraus zeichnen kann. Ich habe Folgendes Problem.
Ich will auf ein JPanel zeichnen und habe daher in einer klasse von JPanel abgeleitet und überschreibe die paintcomponent methode.

Java:
public class TDBackground extends JPanel{

	private Tile[][] tile;
	private int rows, cols;
	private Minion m;
	private boolean drawMinion = false;
	
	 TDBackground(Minion m, int rows, int cols, Tile[][] tile) {
		 this.m = m;
		 this.rows = rows;
		 this.cols = cols;
		 this.tile = tile;
	 }
	 
	 public void draw(){
		 
		 this.drawMinion = true;
		 m.move();
		 repaint();
	 }
	  
	 public void paintComponent(Graphics g) {
		 super.paintComponent(g);	
		 
		 for(int i = 0; i < rows; i++)
		 {
			for(int j = 0; j < cols; j++)
			{
				g.drawImage(tile[i][j].getImage(),
							tile[i][j].getX(),
							tile[i][j].getY(),
							tile[i][j].getWidth(),
							tile[i][j].getHeight(),
							null);
				
			}
		 }	 
		 if(drawMinion)
		 {
			 g.drawImage(m.getImage(), m.getX(), m.getY(), null);
			 
		 }
			 
	 }
}

public class MyThread extends Thread{
	
	TDBackground back;
	
	MyThread(TDBackground back){
		this.back = back;
	}	
	
	public void run(){

		while(true){
			back.draw();
			try{
				Thread.sleep(20);
			}catch(InterruptedException e){
				System.out.println(e);
			}

		}
	}
}

Das Problem ist, das ich die paintcomponent methode nicht verstehe. Ich weiß, das sie vom system selbst aufgerufen wird und daraufhin selber neuzeichnet. Man kan sie auch durch repaint(); aufrufen lassen.
Das problem ist, ich kriege es nicht hin aus einer anderen Klasse heraus irgendwas zu zeichnen. Ich habe gehört man soll zeichnungen wie z.b Minions die sich auf der Karte bewegen nicht in paintComponents zeichnen lassen. Das Problem ist ja offensichtlich, da es die ganze zeit zeichnen würde. Selbst wenn ich noch nicht will das sie geizchnet werden.
Ich verstehe aber auch überhaupt nicht, was das Graphics g sein soll, welches paint Component erwartet. Wocher kommt es? was ist es? wieso läuft es nur in paintcomponent, und wenn ich es in andere Klassen zum zeichnen gebe passiert nichts?
Ich versuche nun seit einer weile aus irgendeiner Klasse zu zeichnen, indem ich diesen Klassen getGraphics() oder auf dem zu zeichnenden JPanel übergebe. Es geht aber nie.
Kann mir jemand erklären was diese Graphics g ist, und wie ich es selber erzeugen um aus anderen Klassen zu zeichnen? z.. durch draw() aufrufe und nicht durch das überschreiben von paintcomponent.
 
Da rate ich zum Studium des Graphics-Tutorial.

Da erkennst du, das Graphics ein Objekt ist mit dem du via verschiedener Methoden "zeichnen" kannst.

Swing erzeugt beispielsweise für jedes JPanel ein solches Objekt, so dass Swing selbst oder du in deiner paintComponents malen kannst was du möchtest. Das kannst du dir quasi als Malstaffette für eine Leinwand vorstellen. Das Objekt welches du bei paintComponents als Parameter erhältst ist also eine initialiserte "Staffette" für die Leinwand (dein Panel). Also alles was du via Graphics zeichnet wird auf dem Panel gemalt.

Du kannst aber auch in ein BufferedImage malen. Dazu erzeugst du selbst ein BufferedImage, fragst den Graphics ab und alles was du nun darüber "malst" wird in das Image gezeichnet. Dies wird oft verwendet, wenn du komplizierte Dinge zeichnen möchtest und das von Swing entkoppeln möchtest, denn in deinem paintComponent malst du "nur" das Image und wie das aussieht...
Java:
BufferedImage bufferedImage = new    BufferedImage(200,200,BufferedImage.TYPE_INT_RGB);
      Graphics g = bufferedImage.getGraphics();
 
Zuletzt bearbeitet:
hmm ok. hab mir schonmal etwas angeschaut und ich probiere das später mal umzusetzen. Die Methode wo ich ein BufferedImage erstelle und darauf zeiche indem ich getGraphics() aufrufe sieht schon vielversprechend aus^^
da im moment alles noch läuft lasse ich es bis zum ende so, und bau dann das neuzeichnen mal anders auf.
 

Zurück
Oben