Image, Graphics, verzögert zeichnen

Status
Nicht offen für weitere Antworten.

ernst

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


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

SlaterB

Gast
deine Erklärung kann man so gelten lassen, ja

die Grafikoperationen direkt auf dem Bild auszuführen, mag in diesem konkreten Beispiel vielleicht sinniger erscheinen,
passt aber nicht ins allgemeine Konzept

ein Graphics-Objekt kann auf beliebige Dinge malen (z.B. auch auf den Bildschirm),
mit einem Image können auch ganz andere Dinge gemacht werden,
als nur mit den beschränkten Möglichkeiten von AWT-Graphis bemalt zu werden,

sollen alle Operationen, die jeder irgendwann mal damit machen will, in der Klasse selber auftauchen?


Trennung der Aufgaben:
das eine ist eine Logikklasse, das andere ein simpler Datencontainer

vergleich auch ArrayList/ Collections.sort(list)


zweite Frage:
direkt in die Ausgabe, also der Bildschirm,
so wurde g konfiguriert, bevor es an die Operation paintComponent übergeben wurde
 

ernst

Top Contributor
>die Grafikoperationen direkt auf dem Bild auszuführen, mag in diesem
>konkreten Beispiel vielleicht sinniger erscheinen,
>passt aber nicht ins allgemeine Konzept
>
was ist das allgemeine Konzept?
>
>ein Graphics-Objekt kann auf beliebige Dinge malen
>(z.B. auch auf den Bildschirm), mit einem Image können auch ganz
>andere Dinge gemacht werden, als nur mit den beschränkten
>Möglichkeiten von AWT-Graphis bemalt zu werden,
>
welche anderen Dinge zum Beispiel?
>
>Trennung der Aufgaben:
>das eine ist eine Logikklasse, das andere ein simpler Datencontainer
>
welches ist hier konkret die Logigklasse, und was der Datencontainer?
>
Frage:
Statt mit der Variablen "ichMaleGerade" will ich die Sache anders synchronisieren.
Dazu will ich an das Image einen Listener anbringen, der bei einer Änderung (die auftritt, wenn ein neuer Kreis dazugemalt wird) dann automatisch eine entsprechende Methode aufruft.
Ich habe dies versucht mit ChangeListener, aber es ist nicht möglich an das Image img einen Listener anzubringen.
Deswegen:
Wie kann man an das Image einen Listener anbringen?

mfg
Ernst
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Graphics to Image AWT, Swing, JavaFX & SWT 3
H awt Graphics und Image selbermachen ? AWT, Swing, JavaFX & SWT 12
D Image aus Graphics erstellen? AWT, Swing, JavaFX & SWT 2
X Problem mit Image und Graphics AWT, Swing, JavaFX & SWT 2
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
kodela angezeigtes Image entfernen AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
S Stretch Image in ImageView AWT, Swing, JavaFX & SWT 4
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
L JavaFX Image mit Blureffect AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
L Image in anderes kopieren AWT, Swing, JavaFX & SWT 0
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
I Image im PopupMenu vom SystemTray AWT, Swing, JavaFX & SWT 8
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
F Swing Image einem Button hinzufügen AWT, Swing, JavaFX & SWT 5
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
T Image aus "nicht-src-ordner" AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Image in JTable einfügen AWT, Swing, JavaFX & SWT 9
M Image aus MS Access anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Image im Array per Knopfdruck ändern AWT, Swing, JavaFX & SWT 6
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
G JavaFX Image vergrößern AWT, Swing, JavaFX & SWT 5
U Image mit Zeichenbereich rotieren AWT, Swing, JavaFX & SWT 3
P Speicherproblem SWT.Image in Nebula-Gallery AWT, Swing, JavaFX & SWT 3
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
D JLabel Image ausrichten AWT, Swing, JavaFX & SWT 2
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
I Image Button AWT, Swing, JavaFX & SWT 4
U IntBuffer zum Image konvertieren. AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
D Image.getScaledInstance() vs. Netzwerkverbindung??? AWT, Swing, JavaFX & SWT 2
reibi SWT Image viewer AWT, Swing, JavaFX & SWT 2
lumo SWT Image funktion auf ImageDaten AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
M Image wird nicht neugezeichnet nach dem Wechsel AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
M Swing Image in JPanel als Componente AWT, Swing, JavaFX & SWT 2
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
S Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 2
0 Mousecurser mit Image hinterlegen AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
N Java Choice Bilderausgabe - images - - image - AWT, Swing, JavaFX & SWT 2
D iText PdfPCell mit Image AWT, Swing, JavaFX & SWT 3
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
S Button mit Image AWT, Swing, JavaFX & SWT 7
A Skaliertes Image pixelweise bearbeiten AWT, Swing, JavaFX & SWT 6
L Swing Image zur Laufzeit verändern AWT, Swing, JavaFX & SWT 6
F SWT GC drawText auf halbtransparentem Image AWT, Swing, JavaFX & SWT 21
G Swing JEdtitorPane und HTML Image Seite AWT, Swing, JavaFX & SWT 2
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
C Image performant skalieren AWT, Swing, JavaFX & SWT 5
D SWT Image Farbtiefe AWT, Swing, JavaFX & SWT 2
L Swing Auf unabhängiges Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 8
lumo SWT Composite + Image + zeichnen AWT, Swing, JavaFX & SWT 4
V Ein Image als Button (nicht mit JButton(Icon)) AWT, Swing, JavaFX & SWT 5
D Image Viewer gesucht AWT, Swing, JavaFX & SWT 5
Kr0e Image schärfen AWT, Swing, JavaFX & SWT 2
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
T Image auf Image zeichnen AWT, Swing, JavaFX & SWT 2
E Warum ist offscreen (mit Image) schneller? AWT, Swing, JavaFX & SWT 11
G Swing Image speichern / 0 Byte AWT, Swing, JavaFX & SWT 7
H Image abspeichern AWT, Swing, JavaFX & SWT 4
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben