Automatisches Repaint deaktivieren.

Kai008

Erfahrenes Mitglied
Geht das bei JFrames eigendlich.
Habe eine Liste von JLabels die ihr Icon per Methodenaufruf tauschen.
In einer Methode werden sie gesamelt, die ihr Icon ändern sollen, und dann einfach in einer Liste abgearbeitet, damit der Abstand der Aufrufe in möglichst kurzer Zeit folgen.
Aber er aktualisiert immer zwischendurch, wodurch sich die Icons nicht gleichzeitig ändern.
Schaut zwar recht cool aus, aber passt trotzdem nicht dazu.

Gibts da einen Weg?
 
Dein Problem hat nichts mit repaint() zu tun, sondern mit Deiner Programmlogik. Wie wärs wenn Du ein Boolean verwendest, um anzuzeigen, ob beim nächsten Repaint die Icons, die in einer Liste abgelegt sind, getauscht werden sollen?
 
Ich überschreibe die Repaint nicht, sondern setze die Icons direkt.
So müsste ich doch vorher die JLabels markieren, die Repaint überschreiben und erst dort alle markierten JLabels sagen, dass sie ein anderes Icon verwenden sollen, oder?

Ist doch nicht das Wahre. :/
 
Was hat eigentlich die Methode repaint() mit den Icons der JLabels zu tun? Reichts nicht, wenn Du nur setIcon aufrufst?
 
Da hier keinerlei Code zur Verfügung steht, könnte ich nur Vermutungen äußern.
Könntest Du einen Code schnippsel hier abbilden?

Verstehe ich das Problem richtig:
Die Icons werden schon getauscht, bevor die Liste zur Änderung durchlaufen wird?
 
Hallo.

Was hat eigentlich die Methode repaint() mit den Icons der JLabels zu tun? Reichts nicht, wenn Du nur setIcon aufrufst?

Die Methode repaint() wird in der setIcon aufgerufen.
Mein Vorschlag wäre, dass du die Klasse JLabel erweiterst.

Code:
public class MyLabel extends JLabel{
 
   private boolean repaintAllow = true;

   public void setRepaintAllow(boolean repaintAllow){
      this.repaintAllow = repaintAllow;
   }

   public void isRepaintAllow(){
      return repaintAllow;
   }

   public void repaint(){
      if(isRepaintAllow())
         super.repaint();
   }


}

So könntest du es für jedes Label einzeln setzen oder du machst die Variable static und kannst es so für alle auf einmal setzen.

Gruß

Sascha
 

Neue Beiträge

Zurück