Quarkus FX

This extension allows you to use Java FX to your Quarkus application.

Installation

In order to use this extension, you need to add the io.quarkiverse.fx:quarkus-fx dependency to your project.

Maven

<dependency>
    <groupId>io.quarkiverse.fx</groupId>
    <artifactId>quarkus-fx</artifactId>
    <version>0.4.0</version>
</dependency>

Gradle

dependencies {
    implementation 'io.quarkiverse.fx:quarkus-fx:0.4.0'
}

Usage

The extension allows using cdi features in JavaFX controller classes.
The FXMLLoader is made a CDI bean and can be injected in your application.

@Inject
FXMLLoader fxmlLoader;

public void load() {
  Parent root = this.fxmlLoader.load(this.getClass().getResourceAsStream("/app.fxml"));
  Scene scene = new Scene(root);
  stage.setScene(scene);
  stage.show();
}
public class MyFxmlController {

  @Inject
  MyService myService;

  @FXML
  private void onButtonClicked() {
    this.myService.doSomething();
  }
}

Startup

The application will automatically be launched (thanks to a call to javafx.application.Application::launch) when the extension is present.

If you need to customize the launch, you can provide a custom @QuarkusMain, such as :

package io.quarkiverse.fx.fxapp;

import io.quarkiverse.fx.FxApplication;
import io.quarkus.runtime.QuarkusApplication;
import io.quarkus.runtime.annotations.QuarkusMain;
import javafx.application.Application;

@QuarkusMain
public class QuarkusFxApplication implements QuarkusApplication {
    @Override
    public int run(final String... args) {
        Application.launch(FxApplication.class, args);
        return 0;
    }
}

When the application is started, you can get obtain access to the primary Stage instance by observing the FxStartupEvent CDI event :

void onStart(@Observes final FxStartupEvent event) {
  Stage stage = event.getPrimaryStage();
}