Hallo allerseits,
1) im folgenden kleinen Demoprogramm unten werden verzögert Kreise
gezeichnet.
Alles funktioniert auch.
Mir ist aber nicht klar warum:
Mit
myg.drawOval(i , 2*i+15, 20, 20);
wird eine Ellipse in den Grafikkontext myg geschrieben.
Die Ausgabe wird allerdings mit
g.drawImage(myimg,0,0,null);
gemacht.
D.h. es wird der Grafikkontext g ausgegeben. Dort steht aber nicht die
gerade gezeichnete Ellipse drin (die steht nämlich im Grafikkontext
myg).
Warum funktioniert das Programm trotzdem, bzw. was muss man an dem
Programm ändern ?
2) Meine Erklärung:
Durch
myg = myimg.getGraphics();
wird vom Bild myimg der Graphikkontext myg erzeugt.
Mit
myg.drawOval(i , 2*i+15, 20, 20);
wird dann nicht in den Graphikkontext myg gezeichnet, sondern in das
zu myg zugehörige Bild myimg gezeichnet.
(Der Zusammenhang zwischen myimg und myg wurde ja durch
myg = mymg.getGraphics() hergestellt).
Ist diese Beschreibung von mir richtig?
Frage1:
Wäre es von der Logik nicht klarer, wenn dies
myimg.drawOval(i , 2*i+15, 20, 20);
heissen würde?
Frage2:
Wo wird dann mit
g.drawOval(i , 2*i+15, 20, 20);
hingezeichnet?
Hier gibt es ja kein zu g zugehöriges Bild, in das das gezeichnet
werden soll.
-----------------------------------------------------------
-----------------------------------------------------------
mfg
Ernst
1) im folgenden kleinen Demoprogramm unten werden verzögert Kreise
gezeichnet.
Alles funktioniert auch.
Mir ist aber nicht klar warum:
Mit
myg.drawOval(i , 2*i+15, 20, 20);
wird eine Ellipse in den Grafikkontext myg geschrieben.
Die Ausgabe wird allerdings mit
g.drawImage(myimg,0,0,null);
gemacht.
D.h. es wird der Grafikkontext g ausgegeben. Dort steht aber nicht die
gerade gezeichnete Ellipse drin (die steht nämlich im Grafikkontext
myg).
Warum funktioniert das Programm trotzdem, bzw. was muss man an dem
Programm ändern ?
2) Meine Erklärung:
Durch
myg = myimg.getGraphics();
wird vom Bild myimg der Graphikkontext myg erzeugt.
Mit
myg.drawOval(i , 2*i+15, 20, 20);
wird dann nicht in den Graphikkontext myg gezeichnet, sondern in das
zu myg zugehörige Bild myimg gezeichnet.
(Der Zusammenhang zwischen myimg und myg wurde ja durch
myg = mymg.getGraphics() hergestellt).
Ist diese Beschreibung von mir richtig?
Frage1:
Wäre es von der Logik nicht klarer, wenn dies
myimg.drawOval(i , 2*i+15, 20, 20);
heissen würde?
Frage2:
Wo wird dann mit
g.drawOval(i , 2*i+15, 20, 20);
hingezeichnet?
Hier gibt es ja kein zu g zugehöriges Bild, in das das gezeichnet
werden soll.
-----------------------------------------------------------
Code:
package de;
import java.awt.*;
import javax.swing.*;
public class MainVerzoegertZeichnen1 {
public static void main(String[] args){
JFrame f = new JFrame();
f.setSize(550,550);
Diagramm diagramm = new Diagramm(550, 550);
f.getContentPane().add(diagramm);
Thread t = new Thread(diagramm);
t.start();
f.setVisible(true);
}
}
class Diagramm extends JPanel implements Runnable{
private int xpAnz;
private int ypAnz;
private int i;
private Image myimg;
private Graphics myg;
private int sx;
private int sy;
private boolean ichMaleGerade;
public Diagramm(int xpAnz, int ypAnz){
i=0;
this.xpAnz=xpAnz;
this.ypAnz=ypAnz;
myimg=null;
ichMaleGerade=true;
//myg.setColor(Color.red);
}
public void paintComponent(Graphics g){
if(myimg==null){
sx = this.getSize().width;
sy = this.getSize().height;
myimg = createImage(sx, sy);
myg = myimg.getGraphics();
}
myg.setColor(Color.red);
myg.drawOval(i , 2*i+15, 20, 20);
ichMaleGerade=false;
g.drawImage(myimg,0,0,null);
}
public void run(){
while(i<200){
this.repaint();
while(ichMaleGerade==true){
}
ichMaleGerade=true;
try{
Thread.sleep(500);
}
catch(Exception e){}
i = i+20;
}
}
}
mfg
Ernst