Grafikaktualisierung mit repaint()

Status
Nicht offen für weitere Antworten.

Razzi2007

Mitglied
Huhu erstmal!

Fange gerade an mich mit Grafikoberflächen zu beschäftigen und habe dabei ein Problem, dass bei einem Beispiel zu AWT aus dem Buch "Handbuch der Javaprogrammierung" von Guido Krueger auftritt.

Es geht um folgendes Programm:

Code:
/* Listing2902.java */

import java.awt.*;
import java.awt.event.*;

class ComponentRepaintAdapter
extends ComponentAdapter
{
  public void componentMoved(ComponentEvent event)
  {
    event.getComponent().repaint();
  }

  public void componentResized(ComponentEvent event)
  {
    event.getComponent().repaint();
  }
}

class BirdsEyeFrame
extends Frame
{
  public BirdsEyeFrame()
  {
    super("BirdsEyeFrame");
    addWindowListener(new WindowClosingAdapter(true));
    addComponentListener(new ComponentRepaintAdapter());
    setBackground(Color.lightGray);
  }

  public void paint(Graphics g)
  {
    Dimension screensize = getToolkit().getScreenSize();
    Dimension framesize  = getSize();
    double qx = framesize.width  / (double)screensize.width;
    double qy = framesize.height / (double)screensize.height;
    g.setColor(Color.white);
    g.fillRect(
      (int)(qx * getLocation().x),
      (int)(qy * getLocation().y),
      (int)(qx * framesize.width),
      (int)(qy * framesize.height)
    );
    g.setColor(Color.darkGray);
    g.fillRect(
      (int)(qx * getLocation().x),
      (int)(qy * getLocation().y),
      (int)(qx * framesize.width),
      (int)(qy * getInsets().top)
    );
    g.drawRect(
      (int)(qx * getLocation().x),
      (int)(qy * getLocation().y),
      (int)(qx * framesize.width),
      (int)(qy * framesize.height)
    );
  }
}

public class Listing2902
{
  public static void main(String[] args)
  {
    BirdsEyeFrame wnd = new BirdsEyeFrame();
    wnd.setSize(300,200);
    wnd.setLocation(200,100);
    wnd.setVisible(true);
  }
}


Das Programm dient zur Demonstration von Component Events. Jedesmal wenn man die Größe des Fensters verändert oder das Fenster verschiebt, sollte rapaint() aufgerufen werden und damit die neue Position des Fensters als shematische Grafik in meinem Frame ausgegeben werden. Soweit die Theorie:

Bei mir passiert allerdings folgendes: Wenn ich das Programm ausführe und z.B. die Fenstergröße ändere, passiert grafisch gesehen garnichts, also das veränderte Fenster (also die grafische Darstellung aus Rechtecken) wird nicht ausgegeben, sondern ich sehe weiterhin das alte Rechteck.

Minimiere ich nach einer Veränderung des Fensters allerdings selbiges (also es in den Hintergund setzen) und rufe es danach wieder auf, wird jetzt die richtige Grafik ausgegeben (also das Rechteck in richtiger Größe).

Zuerst dachte ich, das rapaint() würde nicht funktionieren und habe deshalb mal nen System.out.println("paint()"); ans Ende der Methode paint(...) gesetzt. Zu meiner Überrschung sehe ich dadurch allerdings in der Console, dass die paint(...) durchaus bei jeder Veränderung des Fensters korrekt aufgerufen wird.

Nun meine Frage: Wieso wird die Grafik (also die Rechtecke) nicht sofort aktualisiert ausgegeben, obwohl es richtig aufgerufen wird?!


Danke im voraus für alle Tipps.
 

Kaladial

Bekanntes Mitglied
also das du das richtige symbol/ die richtige grafik siehst nachdem du das fester in den hintergrund geschoben hast und nun wieder hervorholst ist normal... denn es wird ja mit dem wieder nach vorn holen die repaint / paint methode aufgerufen...

also für mich klingt es als ob der aufruf von repaint net klappt.. guck da nochmal ob du in dem event nen fehler hast
 

Razzi2007

Mitglied
Kaladial hat gesagt.:
also das du das richtige symbol/ die richtige grafik siehst nachdem du das fester in den hintergrund geschoben hast und nun wieder hervorholst ist normal... denn es wird ja mit dem wieder nach vorn holen die repaint / paint methode aufgerufen...

also für mich klingt es als ob der aufruf von repaint net klappt.. guck da nochmal ob du in dem event nen fehler hast


Eigentlich wüßte ich nicht, was ich da großartig falsch machen könnte, immerhin habe ich das Beispiel 1:1 aus nem an sich anerkannten Fachbuch (Handbuch der Javaprogrammierung) übernommen. :shock:

Des weiteren habe ich ja mal in der paint zum Spaß ans Ende ne System.out.println("paint"); eingegeben und jedesmal wenn ich das Fenster in seiner größe verändere bekomme ich ne entsprechende anzahl an "paint" ausgaben in der Console. Scheint also an sich zu gehen, nur rigendwie passiert nix :autsch:
 

Marco13

Top Contributor
Hm. Seltsam. Du könntest mal am Anfang der main sowas machen wie
Toolkit.getDefaultToolkit().setDynamicLayout(true);
aber daran sollte es nicht liegen.

Lass' dir notfalls mal in der paint auch gleich die getLocation() und die getSize() auf der Konsole ausgeben, um zu sehen, ob die sich richtig ändern.... ???:L
 

Razzi2007

Mitglied
Hat die richtigen Daten ausgegeben und ich habe meinen Fehler gefunden. Irgendwie (Gott alleine weiß wie das trotz copy - past passieren konnte) hat er bei der 2. Methode den ersten Buchstaben componentResized zu nem großen C gemacht. Jetzt geht alles.

Danke nochmal für die Hilfestellungen und nen schönes Wochenende!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
D JUNG Repaint function does not work AWT, Swing, JavaFX & SWT 2
E repaint Probleme AWT, Swing, JavaFX & SWT 13
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
I Swing Verhindern, dass repaint() kaskadiert AWT, Swing, JavaFX & SWT 6
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
K Methode repaint() AWT, Swing, JavaFX & SWT 1
B Swing Wann brauche ich repaint() ? AWT, Swing, JavaFX & SWT 1
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
A repaint(); AWT, Swing, JavaFX & SWT 9
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
S 2D-Grafik repaint()-Aufruf. Und nichts geschieht. AWT, Swing, JavaFX & SWT 5
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
P JPanel und Repaint AWT, Swing, JavaFX & SWT 5
J JavaFX Automatisches Neuzeichnen ("Repaint") abstellen. AWT, Swing, JavaFX & SWT 10
F JTable Repaint Issue AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
C Repaint() funktioniert nicht in TabbedPanel AWT, Swing, JavaFX & SWT 5
S JList repaint AWT, Swing, JavaFX & SWT 1
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D repaint() klappt anders als vorgestellt AWT, Swing, JavaFX & SWT 15
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Gezielter Repaint einzelner Frames in Java-Game AWT, Swing, JavaFX & SWT 6
javampir Bei repaint nix los AWT, Swing, JavaFX & SWT 2
B Swing repaint() AWT, Swing, JavaFX & SWT 3
Ernesto95 AnimationLoop - Problem bei Aufruf von repaint AWT, Swing, JavaFX & SWT 6
P 2D-Grafik repaint(); steigender RAM Verbauch AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
S Applet Repaint AWT, Swing, JavaFX & SWT 3
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
R Swing Grafikfehler bei repaint AWT, Swing, JavaFX & SWT 2
N repaint() blockieren AWT, Swing, JavaFX & SWT 6
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
M Repaint() AWT, Swing, JavaFX & SWT 14
J Swing repaint, repaint, repaint AWT, Swing, JavaFX & SWT 8
M Applet repaint() verlangsamen AWT, Swing, JavaFX & SWT 7
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
kodela Problem mit repaint() AWT, Swing, JavaFX & SWT 3
N Swing Funktion repaint() updated nicht AWT, Swing, JavaFX & SWT 5
F repaint reagiert nicht AWT, Swing, JavaFX & SWT 8
S AWT Probleme mit repaint() AWT, Swing, JavaFX & SWT 2
G Repaint()? Oder was??? AWT, Swing, JavaFX & SWT 5
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
R validate(), repaint funktionieren nicht! AWT, Swing, JavaFX & SWT 7
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
S validate(), invalidate(), repaint(),... Was kommt wann? AWT, Swing, JavaFX & SWT 5
M 2D-Grafik repaint() löscht altes Bild nicht AWT, Swing, JavaFX & SWT 2
J repaint() nicht richtig? AWT, Swing, JavaFX & SWT 6
R repaint erzwingen AWT, Swing, JavaFX & SWT 3
Zettelkasten repaint() von anderen Klassen aufrufen AWT, Swing, JavaFX & SWT 4
H repaint()-Problem - 50% CPU-Auslastung AWT, Swing, JavaFX & SWT 4
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
T repaint() Problem AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Repaint - Alternative? AWT, Swing, JavaFX & SWT 3
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
N Swing repaint() funktioniert nicht AWT, Swing, JavaFX & SWT 5
T Swing repaint funktioniert nur manchmal? AWT, Swing, JavaFX & SWT 6
K Jpanel repaint problem (Fullscreen) AWT, Swing, JavaFX & SWT 5
V Swing Bei repaint() tut sich nichts AWT, Swing, JavaFX & SWT 7
G ColorReader, bei Fadenkreuz zeichnen mit repaint() flackern AWT, Swing, JavaFX & SWT 19
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
D Swing Actionlistener verhindert repaint?! AWT, Swing, JavaFX & SWT 2
S JLabel repaint AWT, Swing, JavaFX & SWT 8
C Swing Linux mag mein Swing-repaint() nicht... AWT, Swing, JavaFX & SWT 7
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
Luk10 repaint() auch in anderen Klassen! AWT, Swing, JavaFX & SWT 6
A repaint() zu langsam, bitte um alternativen AWT, Swing, JavaFX & SWT 5
T Überlappende Transparenz und repaint() AWT, Swing, JavaFX & SWT 10
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
O Girdbag Formatierung nach repaint verloren AWT, Swing, JavaFX & SWT 2
E Swing - repaint() AWT, Swing, JavaFX & SWT 6
T Image wird nicht angezeigt?! - MediaTracker/repaint AWT, Swing, JavaFX & SWT 9
E AWT Problem mit Repaint (in Loop oder Timer) AWT, Swing, JavaFX & SWT 3
O Exception bei repaint AWT, Swing, JavaFX & SWT 3
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
Dit_ Zeilenmarkierung verschwindet nach repaint() AWT, Swing, JavaFX & SWT 12
A Swing Infinite repaint loop unterbrechen AWT, Swing, JavaFX & SWT 7
hdi Swing EDT macht kein repaint() AWT, Swing, JavaFX & SWT 2
F "Verrutschen" von Komponenten bei repaint() AWT, Swing, JavaFX & SWT 9
Junker Fensterinhalt vor ausführen von repaint komplett löschen. AWT, Swing, JavaFX & SWT 2
T Fenster wird trotz repaint() und revalidate() nicht sofort neu gezeichnet AWT, Swing, JavaFX & SWT 6
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
J Swing Verständnis-Problem repaint(int x,int y,int width,int height) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben