Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Java Swing Gui Update » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 5 Beiträge
InformaTiger

Ohh man, bin ich doof. Zunge raus Ich habe die klarerweise die falsche Aktivität im eigenen Thread gestartet: also das UI Update war im eigenen Thread und die Berechnung fand im UI Thread statt. War jetzt auch nicht mehr wirklich schwer - musste nur einen Thread um die Berechnung packen. Danke, ist klar jetzt.

Mfg
InformaTiger
eulerscheZahl

Das die Funktion aufgerufen wird, heißt nicht, dass die Oberfläche auch neu gezeichnet wird. Und selbst wenn dir das gelingt, wird die Oberfläche bei nur einem Thread zwischen den Änderungen an der Progressbar nicht reagieren.

Du kannst es mit Events machen, aber die eigentliche Berechnung darf nicht im selben Thread erfolgen, wie das UI. Dazu kannst du von Thread erben oder Runnable implementieren und diese Klasse dann von der UI Klasse aufrufen.

Im Anhang ist ein Programm, das mit Runnable und Observer arbeitet, war eine Übungsaufgabe im letzten Semester.

Dateianhang:
zip Runnable.zip (37,08 KB, 344 mal heruntergeladen)
InformaTiger

Ich habe mir das von Oracle mal angesehen. Muss ich zwingend den PropertyListener bzw. den SwingWorker verwenden, damit ich das entsprechende Update machen kann? Ich habe eben das hier implementiert. Also eigenen Listener usw. - aufgerufen wird es laut Debugging auch.

Gruß,
InformaTiger
eulerscheZahl

Du brauchst verschiedene Threads, wenn die Benutzeröberfläche während der Arbeit reagieren soll.
Schau mal hier vorbei: oracle.com
InformaTiger Java Swing Gui Update

Hallo,

ich bin derzeit bei einem Projekt beschäftigt bei welchem ich anhand eines Events (mit einem Listener) eine Swing Gui updaten muss. Ich habe es bereits mit revalidate(), repaint(), SwingUtilities.invokeLater und sogar einem eigenen Thread versucht. Jedoch bewegt sich die Progressbar und die Label erst wenn der Prozess durchgelaufen ist unglücklich Die letzte Version meines Codes sieht so aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
@Override
public void backupChanged(){
         SwingUtilities.invokeLater(() -> {
               jPBProgress.setMaximum(backupManager.getCount());
               jPBProgress.setValue(backupManager.getCurrent());
               jLCount.setText(backupManager.getCurrent() + " of " + backupManager.getCount());
               jLCurrent.setText(backupManager.getCurrentFile().getName());
               getRootPane().revalidate();
         });     
}