JavaFX - Raccourcis clavier pour des boutons

DĂ©pendances JavaFX Maven

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

Code Java : Button fire et KeyCode

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;

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

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

  @Override
  public void start(Stage stage) {

    // Label de taille 24 où le numéro est affiché
    Label label = new Label();
    label.setFont(new Font(24));

    // Les trois boutons
    Button button1 = new Button("Bouton 1");
    Button button2 = new Button("Bouton 2");
    Button button3 = new Button("Bouton 3");

    // Les événements sur les boutons
    button1.setOnAction(event -> {
      label.setText("1");
    });
    button2.setOnAction(event -> {
      label.setText("2");
    });
    button3.setOnAction(event -> {
      label.setText("3");
    });

    // Affichage des boutons à l'horizontal
    HBox buttons = new HBox(button1, button2, button3);

    // Affichage du label et du bloc des boutons à la vertical
    VBox root = new VBox(label, buttons);

    // Ecouteur d'événement clavier sur la racine
    root.addEventHandler(KeyEvent.KEY_PRESSED, event -> {
      // Récupération du code de la touche
      KeyCode eventKeyCode = event.getCode();

      // Si touche clavier 1 ou pavé numérique 1
      if (eventKeyCode == KeyCode.DIGIT1 || eventKeyCode == KeyCode.NUMPAD1) {
        // Focus sur le bouton
        button1.requestFocus();
        // Appuyer sur le bouton
        button1.fire();
        // Consomation de l'événement pour éviter la propagation
        event.consume();
      } else if (eventKeyCode == KeyCode.DIGIT2 || eventKeyCode == KeyCode.NUMPAD2) {
        button2.requestFocus();
        button2.fire();
        event.consume();
      } else if (eventKeyCode == KeyCode.DIGIT3 || eventKeyCode == KeyCode.NUMPAD3) {
        button3.requestFocus();
        button3.fire();
        event.consume();
      }
    });

    // Scene et affichage de la fenêtre
    Scene scene = new Scene(root, 200, 100);
    stage.setScene(scene);
    stage.show();

  }

}

Commentaires