JavaFX : Ajouter des boutons à l'élément HTMLEditor (éditeur WYSIWYG)

Cet exemple vous montre comment ajouter des boutons dans l'éditeur HTML avec l'élément HTMLEditor de JavaFX (éditeur WYSIWYG ou What You See Is What You Get)

package fr.ronanlefichant.wysiwyg;

import java.io.IOException;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Orientation;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Control;
import javafx.scene.control.Separator;
import javafx.scene.control.TextArea;
import javafx.scene.control.ToolBar;
import javafx.scene.web.HTMLEditor;
import javafx.stage.Stage;

public class App extends Application {

  private HTMLEditor htmlEditor;

  @Override
  public void start(Stage stage) throws IOException {

    /* Editeur HTML wysiwyg */
    htmlEditor = new HTMLEditor();

    /* Bouton pour effacer tout le texte */
    Button resetBtn = new Button("Reset");
    resetBtn.setOnAction(this::handleCustomResetButtonAction);

    /* Bouton pour afficher le HTML dans une fenêtre modale */
    Button printBtn = new Button("Afficher HTML");
    printBtn.setOnAction(this::handleCustomPrintButtonAction);

    Scene scene = new Scene(htmlEditor, 1280, 720);
    stage.setScene(scene);
    stage.show();

    /* Insertion du séparateur et du bouton dans la première barre d'outils */
    insertButtonInToolBar(".top-toolbar", new Separator(Orientation.VERTICAL));
    insertButtonInToolBar(".top-toolbar", resetBtn);

    /* Insertion du bouton dans la seconde barre d'outils */
    insertButtonInToolBar(".bottom-toolbar", printBtn);

  }

  /**
   * Insertion d'un élément à la barre d'outils de l'editeur HTML
   * 
   * @param styleClass   La classe de l'élément à chercher
   * @param controlToAdd L'élément à ajouter
   */
  private void insertButtonInToolBar(String styleClass, Control controlToAdd) {
    /* Recherche l'élément avec la classe de style */
    Node node = htmlEditor.lookup(styleClass);

    /* Si l'élément est une barre d'outils */
    if (node instanceof ToolBar) {
      ToolBar toolBar = (ToolBar) node;
      /* Ajoute l'élément à la barre d'outils */
      toolBar.getItems().add(controlToAdd);
    }

  }

  /** Efface tout */
  private void handleCustomResetButtonAction(ActionEvent event) {

    /* Demande de confirmation avec une alerte */
    Alert alert = new Alert(AlertType.CONFIRMATION, "Supprimer tout le contenu HTML ?", ButtonType.YES,
      ButtonType.CANCEL);
    alert.showAndWait();

    /* Si le bouton oui est cliqué */
    if (alert.getResult() == ButtonType.YES) {
      /* Reset HTML */
      htmlEditor.setHtmlText("");
    }

  }

  /** Affiche HTML */
  private void handleCustomPrintButtonAction(ActionEvent event) {
    /* Création d'une alerte et affiche le HTML dans une zone texte */
    Alert alert = new Alert(AlertType.INFORMATION);
    alert.setHeaderText("Contenu HTML");
    alert.getDialogPane().setContent(new TextArea(htmlEditor.getHtmlText()));
    alert.showAndWait();
  }

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

}

Commentaires