Mit einer XdevProgressBar lässt sich der Fortschritt eines laufenden Prozesses visualisieren. Der Fortschritt wird mit Hilfe eines Wertes zwischen 0.0 und 1.0 angegeben. Um den aktuellen Fortschritt eines Prozesses anzeigen zu können, müssen Sie zuvor dessen Gesamtumfang ermitteln. In vielen Fällen ist das Anzeigen eines Fortschritt-Rads ausreichend, das dem Anwender lediglich signalisiert, dass gerade ein Prozess mit unbestimmter Dauer läuft. Diese Variante ist einfacher umzusetzen.
Wenn Sie den jedoch den Fortschritt in Echtzeit anzeigen, neben der XdevProgressBar noch weitere UI-Komponenten aktualisieren oder die Oberfläche während eines Hintergrundprozesses nicht sperren möchten, müssen Sie den Prozess in einem eigenen, parallel ablaufenden Thread ausführen und bei jeder Änderung die Oberfläche im Browser aktualisieren.
Wichtige Events:
Include Page Event valueChange Event valueChange
Wichtige Properies:
Value - Aktueller Fortschritt, der als Wert zwischen 0.0 und 1.0 angegeben werden muss.
Indeterminate - Anstelle eines Fortschritt-Balkens wird ein ständig laufendes Fortschritts-Rad angezeigt. Der aktuelle Stand ist damit nicht erkennbar.
Examples:
Aufrufen eines PopupWindow zum Anzeigen des Fortschritts. Das PopupWindow sperrt die gesamte Benutzeroberfläche und wird automatisch geschlossen sobald der Prozess im Hintergrund abgeschlossen ist.
- Legen Sie eine neue View View ProgressView an. Wählen Sie das das XdevGridLayout als als initiales Layout.
- Ändern Sie die Größe der View auf auf 300 x x 200 Pixel Pixel. Klicken Sie dazu in der der Toolbox bei bei Width auf auf px und und geben Sie Sie 300 ein ein, klicken Sie bei bei Height auf auf px und und geben Sie Sie 200 ein ein.
- Fügen Sie einen XdevProgressBar in die View ein.
- Selektieren Sie in den Properties > Indeterminate.
- Geben Sie bei bei Caption > > Please , waitWait! ein ein.
- Rufen
Legen Sie
die View ProgressView als PopupWindow aufeine weitere View an, fügen Sie einen XdevButton ein, definieren Sie ein Event buttonClick und rufen Sie darin die View ProgressView als PopupWindow auf, das automatisch geschlossen wird, sobald der Prozess beendet
ist.
Wichtige Events:
- valueChange - Wird ausgelöst, wenn sich der Fortschritt ändert.
Wichtige Properies:
...
Value - Aktueller Fortschritt, der als Wert zwischen 0,0 und 1,0 angegeben wird.
...
ist
...
:
Fortschritts-Rad solange Prozess dauert - Ruft durch Button-Klick die View ProgressView als PopupWindow auf und schließt es automatisch sobald der Prozess beendet ist. Das PopupWindow sperrt die Benutzeroberfläche automatisch. Nur deshalb muss der Prozess nicht zwingend in einem eigenen Thread ausgeführt werden. - Zeigt lediglich ein Fortschritts-Rad an, dasden aktuellen Fortschritt in der XdevProgressBar an.
Code Block language java theme Confluence private void button_buttonClick(Button.ClickEvent event) { Window popup = PopupWindow.For(new ProgressView()).closable(false).draggable(false).resizable(false).modal(true).show(); UI.getCurrent().push(); try { // Start your process here } catch (InterruptedException e) { e.printStackTrace(); } popup.close(); }
Selektieren Sie in der ProgressView bei XdevProgressBar > Properties > Indeterminate.
XdevProgressBar dynamisch aktualisieren - Zeigt Zeigt den aktuellen Fortschritt in der XdevProgressBar an. Der gesamte Prozess muss in einem eigenem Thread laufen. Da der Thread auf dem Server abläuft und die XdevProgressBar im Browser davon nichts mitbekommt, muss für jede Aktualisierung der XdevProgressBar durch den Methodenaufruf getUI().access(()→progressBar.setValue(value)); ein Server Push durchgeführt werden.
Code Block language java theme Confluence private void progressBar_attach(ClientConnector.AttachEvent event) { // Find out the lenght of your process in total. The value is 1.0. // Starts a new thread on the serverside Runnable task = ()->{ // Start your process. Find out the current progress and store it in 'value'. Value must be between 0.1 and 1.0. // SetsServer Push to update in the valueProgressBar ofin the Browser ProgressBar getUI().access(()->progressBar.setValue(value)); }; new Thread(new RunnableAccessWrapper(task)).start(); }
...