JavaFX vidéo YouTube intégrée

Les dépendances Maven JavaFX controls et web

<dependencies>
   <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>18</version>
   </dependency>
   <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-web</artifactId>
      <version>18</version>
   </dependency>
</dependencies>

Code Java

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

/**
 * JavaFX App
 */
public class App extends Application {

  public static void main(String[] args) {
    launch(args);
  }

  public void start(Stage primaryStage) {

    VBox root = new VBox();
    // Espace de 20 entre les noeuds dans root
    root.setSpacing(20);

    // Le titre
    Label title = new Label("Vidéo HTML");
    title.setStyle("-fx-font-size: 32px;");

    // Le moteur et la vue web
    WebView webView = new WebView();
    WebEngine webEngine = webView.getEngine();

    /*
     * iframe contenant la vidéo et suppression des marges pour l'élément body
     */
    webEngine.loadContent(
      "<html><body style=\"margin: 0;\"><iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>");

    // La web view n'excède pas 560x315
    webView.setMaxWidth(560);
    webView.setMaxHeight(315);

    // Libellé sous la vidéo
    Label label = new Label("Vidéo 560x315");
    label.setStyle("-fx-font-size: 18px;");

    // Ajoute tous les éléments à la racine
    ObservableList < Node > rootChildren = root.getChildren();
    rootChildren.add(title);
    rootChildren.add(webView);
    rootChildren.add(label);

    Scene scene = new Scene(root, 800, 600);

    primaryStage.setScene(scene);
    primaryStage.show();

  }

}

Commentaires