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
- Protected
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(classOf[java.lang.CloneNotSupportedException]) @native()
- 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: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- 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()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- 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, resizable: Boolean = false): 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(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
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.