MVC und ProgressBar

Status
Nicht offen für weitere Antworten.

javacup

Mitglied
hallo,

wie benutzt man prinzipiell das MVC-Pattern im Zusammenhang mit einer ProgressBar
oder einer sonstigen Anzeige über die noch zu verbleibende Zeit einer Operation.
Normalerweise berechnet das Model ja alles und wird erst danach an den View weitergereicht...wie kann man das Problem lösen?
 

Marco13

Top Contributor
Ich finde, da gibt es kaum einen universellen und wirklich objektiv "sauberen" Weg. Wenn man eine Berechung macht wie
Java:
for (int i=0; i<100; i++)
{
    macheRechenschritt(i);
}
dann macht man das so. Man würde nie auf die Idee kommen, sowas zu machen wie
Java:
private List<RechenschrittListener> rechenschrittListener = ... // add/remove Methoden dafür
for (int i=0; i<100; i++)
{
    macheRechenschritt(i);
    sageAllenRechenschrittListenernBescheidÜberSchritt(i);
}

Wenn man so einen Rechenfortschritt in einer Progressbar anzeigen will, müßte man das aber machen. Alternativen wie irgendwelche Ergebnis-Pollenden Threads mal außen vor gelassen. Bei irgendwelchen Berechnungen, die das Modell macht, und von denen eigentlich niemand was mitkriegen sollte, kann man progressBar.setIndeterminate(true); machen. Wenn z.B. die einzelnen durchzuführenden Schritte klar und einfach aufzuführen sind, und sich gut voneinander trennen lassen, dann kann man ggf. einen eigenen SwingWorker erstellen, der die Schritte nacheinander durchführt und mit setProgress über PropertyChangeListener die Progressbar aktualisiert.
 

byte

Top Contributor
Die imo "sauberste" Lösung ist über ein Callback, also ein Interface definieren mit ner Methode zum Setzen des Progress. Auf diese Weise bleibt das Model unabhängig von der View. Einzige Abhängigkeit wäre zum Callback Interface.

Siehe z.B. IProgressMonitor der Eclipse Job API.
 

Marco13

Top Contributor
Ob nun EINEN Callback oder beliebig viele (als "Listener") ist eigentlich egal: Normalerweise würde man das nicht machen, wenn man nicht wüßte, dass man das irgendwann in einer ProgressBar anzeigen will - man geht also beim schreiben des Modells in diesem Fall schon von der Existenz von etwas GUIigem aus... (nicht dass das hier irgendwie "falsch" wäre - es ist das IMHO (!) richtigste, was man machen kann, aber nur aus Ermangelung von Alternativen....)
 

byte

Top Contributor
Ja, das stimmt. Es wirkt schmutzig, daher hab ich das "sauber" in Anführungszeichen gesetzt. :)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben