Paint wird 2 mal ausgeführt (?)

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hi,

ich hab da ein sehr komisches problem. Evtl. sehe ich den Fehler einfach nicht....

Hier mal der code

Code:
public class MyImage extends Component {
	Image img;
	int x;
	int y;
	MyImage(String fileName){
		try{
			img = ImageIO.read(new File("..."));  
		}catch(Exception e) {e.printStackTrace();}
		setSize(16,16);
		
	}
	public void paint(Graphics g){
		try{Thread.sleep(500);}catch(Exception e){}
		setSize(16,16);
		((Graphics2D)(g)).drawImage(img,x,y,null);
		setLocation(x,y);
		System.err.println("Painted Component");
}
}

public class MyFrame extends Frame implements MouseMotionListener,MouseListener 
{ 
	private Image dbImage;
	private Graphics dbg;
    MyImage img;
  public void init() 
  { 
     setSize(600,600);
	 img = new MyImage("");
     img.addMouseListener(this);
     img.x=50;
     img.y=50;
     add(img);
     setVisible(true);
  } 
  public void update (Graphics g)
  {
        // Initialisierung des DoubleBuffers
        if (dbImage == null)
        {
              dbImage = createImage (this.getSize().width, this.getSize().height);
              dbg = dbImage.getGraphics ();
        }

        // Bildschirm im Hintergrund löschen
        dbg.setColor (getBackground ());
        dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
        // Auf gelöschten Hintergrund Vordergrund zeichnen
        dbg.setColor (getForeground());
        //paint (dbg);
        img.paint(dbg);
        // Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
        g.drawImage (dbImage, 0, 0, this);
  }
(...)
  public void mousePressed(MouseEvent arg0) {
	// TODO Auto-generated method stub
	 img.x=(int) (Math.random()*500+20);
	 img.y=(int) (Math.random()*500+20);
	 repaint();
	}
}

Komischerweise wird die paint - Methode 2x aufgerufen und ausgeführt. Aber warum den das ???
Hat jemand vielleicht eine Idee was hier passiert??
 

Leroy42

Top Contributor
Gegenfrage: Was stört dich daran? ???:L

Die paint-Methoden müssen so designed werden, das sie
beliebig oft aufgerufen werden können.

Jedesmal nachdem ein Teil deiner Zeichnung wieder sichtbar wird
(Fenster wurde überlagert, war im Hintergrund, minimiert, ...) ruft
die GUI die Methode von sich aus auf und wie genau der erste Aufbau
eines Fensters vonstatten geht, darfst du ihr auch nicht vorschreiben

Die paint-Methode darf einfach nicht so konzipiert werden, daß irgendeine
Programmlogik in ihr davon abhängt, wieoft sie aufgerufen wurde.
 

L-ectron-X

Gesperrter Benutzer
Diese Zeile gehört meines Erachtens nicht in die update()-Methode.
Ein ziemlich häufig gemachter Fehler im Zusammenhang mit DoubleBuffering...
Code:
img.paint(dbg); //zu entfernen

update() ist die Reaktion auf repaint(). Die paint()-Methode wird automatisch im Anschluss aufgerufen.
Und in der paint()-Methode sollte auch auf nichts gewartet werden.
sleep() hat dort nichts zu suchen.
 
G

gast

Gast
hi,

ich versteh nur nich , warum die paint methode 2x aufgerufen wird.

selbst wenn ich es so mache:
Code:
public class MyImage extends Component {
   Image img;
   int x;
   int y;
   MyImage(String fileName){
      try{
         img = ImageIO.read(new File("...")); 
      }catch(Exception e) {e.printStackTrace();}
      setSize(16,16);
      
   }
   public void paint(Graphics g){
      setSize(16,16);
      ((Graphics2D)(g)).drawImage(img,x,y,null);
      setLocation(x,y);
      System.err.println("Painted Component");
}
} 
public class MyFrame extends Frame implements MouseMotionListener,MouseListener
{
   private Image dbImage;
   private Graphics dbg;
    MyImage img;
  public void init()
  {
     setSize(600,600);
    img = new MyImage("");
     img.addMouseListener(this);
     img.x=50;
     img.y=50;
     add(img);
     setVisible(true);
  }
  public void paint (Graphics g)
  {
        img.paint(dbg);

   }
(...)
  public void mousePressed(MouseEvent arg0) {
   // TODO Auto-generated method stub
    img.x=(int) (Math.random()*500+20);
    img.y=(int) (Math.random()*500+20);
    repaint();
   }
}

wenn ich auf das image klicke, führt er die paint-Methode 2x aus!
eigentlich sollte sie aber nur 1x ausgeführt werden.
Ist meiner meinung nach einfach ein Performance-Problem. Mich Persönlich stört es ja nicht.(Jedenfalls nicht in diesem beispiel, da es ja nur ein 16x16 bild ist.)
Wenn ich aber etwas aufwendigere Zeichnungen machen möchte, dann ist es schon ein wenig blöd, daß java hier 2x das selbe zeichnet!
Weiß jemand woran das liegen kann?? (Es muß ein Fehler im Code sein..)
Evtl. führt java beim Mouse-press und beim Mouse-release die Methode mouse-Pressed auf?? ???:L
 
G

Gast

Gast
sorry...

muss so heißen:

public void paint (Graphics g)
{
img.paint(g);

}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
D paint-Funktion wird nicht ausgeführt AWT, Swing, JavaFX & SWT 6
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
S paint() verzögern AWT, Swing, JavaFX & SWT 9
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
E Warum übermalt paint das ganze Fenster? AWT, Swing, JavaFX & SWT 15
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
H paint verwenden AWT, Swing, JavaFX & SWT 3
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
M Probleme mit paint() aus JFrame AWT, Swing, JavaFX & SWT 2
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
D JPanel und Paint AWT, Swing, JavaFX & SWT 2
B Gui und Zeichnen (paint ? ) AWT, Swing, JavaFX & SWT 4
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen


Oben