class BusyWorker extends ShowMessage
BusyWorker helps running UI tasks a separate threads (other than the JavaFX Application thread).
It will show busy cursor and disable specified nodes while task is performed.
It gives an option to show progress and status messages.
BusyWorker
run tasks and takes care of handling handling exceptions and displaying error dialogs.
There is also option to perform custom finish actions after task is completed.
While task is performed property busy
is set to true.
Only one task, for a given worker, can be run at the time.
When a task in being performed busyDisabledNode
will be disabled and its cursor will be set to Wait
/Busy
cursor.
Progress and messages from the running task can be monitored using progressValue
and progressMessage
properties.
Below is an example of using using BusyWorker that updates a progress message and progress indicator.
The full example can be found in the BusyWorkerDemo
of the ScalaFX Extras Demo project.
val buttonPane: Pane = ... val progressLabel: Label = ... val progressBar: ProgressBar = ... val busyWorker = new BusyWorker("BusyWorker Demo", buttonPane) { progressLabel.text <== progressMessage progressBar.progress <== progressValue } val button = new Button("Click Me") { onAction = () => busyWorker.doTask("Task 1")( new SimpleTask[String] { override def call(): String = { val maxItems = 10 for (i <- 1 to maxItems) { println(i) message() = s"Processing item $i/$maxItems" progress() = (i - 1) / 10.0 Thread.sleep(250) } progress() = 1 "Done" } } ) }
- Source
- BusyWorker.scala
- Alphabetic
- By Inheritance
- BusyWorker
- ShowMessage
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
-
new
BusyWorker(title: String, disabledNodes: Seq[Node])
Creates a busy worker with a title and nodes to disable when performing tasks.
Creates a busy worker with a title and nodes to disable when performing tasks. The parent window is the parent window of the first node.
The input is a collection of JavaFX or ScalaFX nodes.
val nodes = Seq[scalafx.scene.Node] = ... val busyWorker = new BusyWorker("My Task", nodes))
- title
title used for unexpected error dialogs.
- disabledNodes
nodes that will be disabled when performing a task, if not specified it will be set to root pane of the
parentWindow
.
-
new
BusyWorker(title: String, disabledNode: Node)
Creates a busy worker with a title and nodes to disable when performing tasks.
Creates a busy worker with a title and nodes to disable when performing tasks. The parent window is the parent window of the node.
The input is a collection of JavaFX or ScalaFX nodes.
val node: scalafx.scene.Node] = ... val busyWorker = new BusyWorker("My Task", node))
- title
title used for unexpected error dialogs.
- disabledNode
node that will be disabled when performing a task, cannot be null.
-
new
BusyWorker(title: String, parent: Option[Window])
Creates a busy worker with a title and nodes to disable when performing tasks.
Creates a busy worker with a title and nodes to disable when performing tasks. The root node of the parentWindow will be disabled when task is being executed.
The input is a collection of JavaFX or ScalaFX nodes.
val parent: Option[Window] = ... val busyWorker = new BusyWorker("My Task", parent))
- title
title used for unexpected error dialogs.
- parent
window that will be used to display dialogs (if any).
-
new
BusyWorker(title: String, parent: Window)
Creates a busy worker with a title and nodes to disable when performing tasks.
Creates a busy worker with a title and nodes to disable when performing tasks. The root node of the parentWindow will be disabled when task is being executed.
The input is a collection of JavaFX or ScalaFX nodes.
val parent: Window = ... val busyWorker = new BusyWorker("My Task", parent))
- title
title used for unexpected error dialogs.
- parent
window that will be used to display dialogs (if any).
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
final
val
busy: BooleanProperty
busy
property istrue
when worker is performing a task.busy
property istrue
when worker is performing a task. Only one task can be done at a time. -
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native() @IntrinsicCandidate()
- def disabledNodes: Seq[Node]
- def disabledNodes_=(implicit v: Seq[Node]): Unit
-
def
doTask[R](name: String)(task: SimpleTask[R]): Future[R]
Run a
task
on a separate thread.Run a
task
on a separate thread. Returns immediately (beforetask
is completed). If the task returns a value is can be retrieved through the returnedFuture
.Example of running a task without waiting to complete, using a lambda
worker.doTask("My Task") { () => // Some workload code, does not produce value ot it is discard Thread.sleep(1000) print(1 + 1) }
Example of stating a task (with a lambda) and waiting till it finishes and returns a result
// This code will return before workload is completed val future = worker.doTask("My Task") { () => // Some workload code producing final value Thread.sleep(1000) 1 + 1 } // This will block till workload competes and the result is retrieved val result = future.get() print(result)
Example of running task that updates
progress
andmessage
, for more details seeBusyWorkerDemo
.busyWorker.doTask("Task 1")( new SimpleTask[String] { override def call(): String = { val maxItems = 10 for (i <- 1 to maxItems) { println(i) message() = s"Processing item $i/$maxItems" progress() = (i - 1) / 10.0 Thread.sleep(250) } progress() = 1 "Done" } } )
- name
name used for thread that runs the task. May be useful in debugging.
- task
actions to perform, can be provided a as a lambda op: => R, see examples above.
- returns
Future
that can be used to retrieve result produced the workload, if any.
-
def
doTask[R](task: SimpleTask[R]): Future[R]
Run a
task
on a separate thread.Run a
task
on a separate thread. Returns immediately (beforetask
is completed). If the task returns a value is can be retrieved through the returnedFuture
.Example of running a task without waiting to complete, using a lambda
worker.doTask{ () => // Some workload code, does not produce value ot it is discard Thread.sleep(1000) print(1 + 1) }
Example of stating a task (with a lambda) and waiting till it finishes and returns a result
// This code will return before workload is completed val future = worker.doTask{ () => // Some workload code producing final value Thread.sleep(1000) 1 + 1 } // This will block till workload competes and the result is retrieved val result = future.get() print(result)
Example of running task that updates
progress
andmessage
, for more details seeBusyWorkerDemo
.busyWorker.doTask( new SimpleTask[String] { override def call(): String = { val maxItems = 10 for (i <- 1 to maxItems) { println(i) message() = s"Processing item $i/$maxItems" progress() = (i - 1) / 10.0 Thread.sleep(250) } progress() = 1 "Done" } } )
- task
actions to perform, can be provided a as a lambda op: => R, see examples above.
- returns
Future
that can be used to retrieve result produced the workload, if any.
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
def
messageLogger: Option[ShowMessageLogger]
Logger to use for error and warning dialogs.
Logger to use for error and warning dialogs.
- Attributes
- protected
- Definition Classes
- ShowMessage
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
def
parentWindow: Option[Window]
Parent window for a dialog.
Parent window for a dialog. Dialogs are shown modal, the window will be blocked while dialog is displayed.
- Definition Classes
- BusyWorker → ShowMessage
- def parentWindow_=(v: Window): Unit
- def parentWindow_=(v: Option[Window]): Unit
-
final
val
progressMessage: ReadOnlyStringProperty
Progress message posted by running task, if any.
Progress message posted by running task, if any. Current running task's
message
property is bound to this property (only when task is running). -
final
val
progressValue: ReadOnlyDoubleProperty
Progress indicator of a running task, if any, value are between [0 and 1].
Progress indicator of a running task, if any, value are between [0 and 1]. Current running task's
progress
property is bound to this property (only when task is running). -
def
showConfirmation(title: String, header: String, content: String = ""): Boolean
Show a confirmation dialog with "OK" and "Cancel" buttons.
Show a confirmation dialog with "OK" and "Cancel" buttons.
- title
dialog title.
- header
header text.
- content
content text.
- returns
true
when user selected 'OK' andfalse
when user selectedCancel
or dismissed the dialog.
- Definition Classes
- ShowMessage
-
def
showConfirmationYesNoCancel(title: String, header: String, content: String = ""): Option[Boolean]
Show a confirmation dialog with "OK", "No", and "Cancel" buttons.
Show a confirmation dialog with "OK", "No", and "Cancel" buttons.
- title
dialog title.
- header
header text.
- content
content text.
- returns
Some(true)
when user selected 'OK',Some(false)
when user selectedNo
, andNone
user selectedCancel
or dismissed the dialog.
- Definition Classes
- ShowMessage
-
def
showError(title: String, header: String, content: String = ""): Unit
Show error dialog
Show error dialog
- title
dialog title
- header
header text.
- content
main content text.
- Definition Classes
- ShowMessage
-
def
showException(title: String, message: String, t: Throwable): Unit
Displays error dialog with expandable exception information.
Displays error dialog with expandable exception information.
- title
Dialog title
- message
Message (excluding t.getMessage(), it is automatically displayed)
- t
exception to be displayed in the dialog
- Definition Classes
- ShowMessage
-
def
showInformation(title: String, header: String, content: String): Unit
Show information dialog
Show information dialog
- title
dialog title
- header
header text.
- content
main content text.
- Definition Classes
- ShowMessage
-
def
showWarning(title: String, header: String, content: String): Unit
Show warning dialog
Show warning dialog
- title
dialog title
- header
header text.
- content
main content text.
- Definition Classes
- ShowMessage
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
- val title: String
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
Helper methods and classes to simplify ScalaFX use.
Package
org.scalafx.extras
contains basic helper methods for running tasks on threads and showing messages.Package
org.scalafx.extras.image
contains image display component with scrolling and zooming.Package
org.scalafx.extras.mvcfx
contains classes for creating with UI components based on FXML.