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.
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.
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.