paint(), repaint(), update() von Thread gesteuert ...
-
Ich habe einen Thread der eine Reihe von Komponeneten alle Sec/Frames benachrichtigt, da die Komponenten ihre position,Farbe,etc. verändern sollen ...
Eigentlich hatte ich vor, alle Komponenten von der Hauptklasse aus zu repainten() um doppelte paint() aufrufe zu vermeiden (Flackern der Komponenten). Leider besteht das Problem, dass z.B. beim Aufruf von setBackground(), setBounds(), etc. innerhalb der Komponenten, ein repaint() zur Folge hat ... Besteht eine Möglichkeit das zu unterdrücken, oder sollte ich jede Komponente bei benachrichtigung neu zeichnen ?! Oder gibt es eine noch bessere Lösung?
Weiß außerdem jemand, ob es an meinem (langsamen) Rechner liegt, dass es zum Flackern kommt, wenn ich dem gesamten Hintergrund eine neue Farbe setze (im 0.05 Sekundenbereich) ...http://jakob.tim-kiener.de/jflash/
MFG John
-
Das liegt daran, daß die Komponenten zuerst mit der Hintergrundfarbe übermalt werden. Das lässt sich durch Überschreiben einer Methode abstellen.
-
Einer, welcher?
Kurzer pseudo zum Verständnis noch:main class{ Component c; components.add(this) components.add(c); add(c); new FrameThread(Vector<c> components); change(){ updateAll(); } } FrameThread{ sleep(sec/frames); for(c : components) c.change(); } Component{ change(){ doSomethingLikeSetNewBounds(); //repaint :( } }