Tutorial Application
Application object
A sapphire application must contain an Application object that extends SFXApplication.
All startup code is inside this SFXApplication pattern.
sourcepackage com.sfxcode.sapphire.javafx.demo.tutorial
import com.sfxcode.sapphire.javafx.application.SFXApplication
import com.sfxcode.sapphire.javafx.controller.SFXApplicationController
object Application extends SFXApplication {
  val applicationController: SFXApplicationController = new ApplicationController
  override def height: Int = 600
  override def width: Int = 800
  override def forceMaxWidth: Boolean = true
  override def forceMaxHeight: Boolean = true
}
SFXApplicationController
Application controller is used for startup purposes.
Normally the main scene content is replaced by a SFXViewController.
Here we will use a MainViewController and later we connect a Navigation-, Workspace- and StatusBarController.
sourcepackage com.sfxcode.sapphire.javafx.demo.tutorial
import java.util.{ Locale, ResourceBundle }
import com.sfxcode.sapphire.javafx.application.SFXApplicationEnvironment
import com.sfxcode.sapphire.javafx.controller.SFXApplicationController
import com.sfxcode.sapphire.javafx.demo.tutorial.controller.app.MainViewController
class ApplicationController extends SFXApplicationController {
  var mainViewController: MainViewController = _
  def applicationDidLaunch() {
    logger.info("start " + this)
    // #Resources
    SFXApplicationEnvironment.loadResourceBundle("bundles/application")
    // #Resources
    reload()
  }
  def reload(): Unit = {
    // Styling
    reloadStyles()
    // Resources
    SFXApplicationEnvironment.clearResourceBundleCache()
    SFXApplicationEnvironment.loadResourceBundle("bundles/application")
    // FXML
    mainViewController = getController[MainViewController]()
    replaceSceneContent(mainViewController)
    // do some other stuff
  }
  def applicationName: ApplicationName =
    ApplicationName(configStringValue("application.name"))
  // #CustomBundle
  // only example values ...
  override def resourceBundleForView(viewPath: String): ResourceBundle =
    if (viewPath.contains("mySpecialViewName")) {
      val path = "myCustomResourcePath"
      val classLoader = Thread.currentThread().getContextClassLoader
      ResourceBundle.getBundle(path, Locale.getDefault(), classLoader)
    } else
      super.resourceBundleForView(viewPath) // =  applicationEnvironment.resourceBundle
  // #CustomBundle
}
case class ApplicationName(name: String)
MainViewController
The following code snippet loads the MainViewController by the FXMLoader from the CDI managed ApplicationController Bean.
  lazy val mainViewController = getController[MainViewController]()
This pattern for Controller-Loading is commonly used in sapphire-javafx Framework.
1.1.3*