Verzögerung

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo, ich möchte die Farbe eines TabbedPane ändern.

Die Standardfarbe ist 102, 255, 102.
Das TabbedPane soll sozusagen einmal in der Farbe 255, 51, 51 aufblinken.

Habe es schon mehrmals versucht, aber das was ich versucht hab hat irgendwie nichts gebracht.

jTabbedPane1.setBackground(new java.awt.Color(255, 51, 51));

hier soll gewartet werden.

jTabbedPane1.setBackground(new java.awt.Color(102, 255, 102));

Gruß Frank
 
G

Guest

Gast
Vielleicht kannst du dazwischen
Code:
try {
         Thread.sleep(5000);
      } catch (InterruptedException e) {
         //nichts
      }
setzen.

Dort, wo jetzt 5000 steht, kannst du die Zeit in Millisekunden setzen.
 
G

Guest

Gast
Danke für die Antwort, aber irgendwie klappt das nicht.

Er ignoriert aus irgendeinem Grund das hier

jTabbedPane1.setBackground(new java.awt.Color(255, 51, 51));

warten dann so lange wie es dort steht und geht dann sofort hierhin

jTabbedPane1.setBackground(new java.awt.Color(102, 255, 102));
 
G

Guest

Gast
Aber wenn er solang wartet, wie es eingetragen ist, dann funktioniert doch alles! Oder nicht??? :wink:
 
G

Guest

Gast
Ja, warten tut er schon richtig, aber er überspringt den wichtigen Teil.


Das macht er:

Code:
try { 
         Thread.sleep(5000); 
      } catch (InterruptedException e) { 
         //nichts 
      }

jTabbedPane1.setBackground(new java.awt.Color(102, 255, 102));




Obwohl aber das steht und das gemacht werden soll:
Code:
jTabbedPane1.setBackground(new java.awt.Color(255, 51, 51)); 

try { 
         Thread.sleep(5000); 
      } catch (InterruptedException e) { 
         //nichts 
      }

jTabbedPane1.setBackground(new java.awt.Color(102, 255, 102));
 
B

Beni

Gast
Du blockierst den Thread, der das alles zeichnen soll... logisch funktioniert es nicht :wink:

Benutz einen Thread (-> Suche, Bücher) oder einen Timer (javax.swing.Timer).

Code:
new Thread(){
  public void run(){
    EventQueue.invokeLater( new Runnable(){
      public void run(){
        tabbedPane.setBackground( ... )
      }
    });

    // Thread.sleep( solange du willst );

    EventQueue.invokeLater( new Runnable(){
      public void run(){
        tabbedPane.setBackground( ... )
      }
    });
  }
}.start();
 
B

Beni

Gast
Yzebär hat gesagt.:
Machst du auch ein updateUI() nach dem Setzen des Hintergrunds?
Das setzt das LookAndFeel neu, etwa so wirkungsvoll wie mit einer Atombombe Spatzen jagen... und in diesem Fall würde es wegen dem blockierten Thread nichtmal funktionieren :bae:
 

Yzebär

Bekanntes Mitglied
Beni hat gesagt.:
Yzebär hat gesagt.:
Machst du auch ein updateUI() nach dem Setzen des Hintergrunds?
Das setzt das LookAndFeel neu, etwa so wirkungsvoll wie mit einer Atombombe Spatzen jagen... und in diesem Fall würde es wegen dem blockierten Thread nichtmal funktionieren :bae:

Warum nicht? Der Thread kann doch nicht blockiert werden, bevor die updateUi-Methode verlassen wurde, wenn die sleep-Methode danach aufgerufen wird?
 
B

Beni

Gast
Yzebär:
Thread setzt Farbe
Thread ruft updateUI auf
Thraed schläft
Thread setzt Farbe

... wo soll der Thread noch Zeit haben, das Tabbedpane zu zeichnen? Das kommt erst nachdem all diese Dinger abgearbeitet sind, und dann ist es zu spät. (Ich geh jetzt mal davon aus, dass der Gast das im EventDispatcherThread gemacht hat, sonst wäre es witzlos).
 

Yzebär

Bekanntes Mitglied
@Beni
Ach so ist das, ich kannte das bisher nur von C#, daß die GUI erst am Schluß neu gezeichnet wird... ist besonders bei nem Statusbalken äußerst witzlos (wenn man keinen eigenen Thread dafür verwendet).
Ist dieses Verhalten abhängig vom Bertriebssystem?
 
B

Beni

Gast
Das ist unabhängig vom Betriebssystem (Java ist ja zu 99% Platformunabhängig - das bedeutet alles verhält sich gleich :wink: )
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben