Introduction à JavaFX8: Article 2 Les Evenements

Introduction à Java Fx 8:

Article 2: Les Evènements

Dans cet article nous allons faire une petite introduction à la gestion des évènements dans Java Fx.

Le principe est le suivant: une source (clique de Boutton, clique de souris, touche de clavier etc) génère un évènement et l’envoi à un ou plusieurs autres élément qui sont en mode écoute et qui prennent en charge la gestion et les actions  associé à l’évènement.

Dans notre exemple nous allons utiliser  la classe Event de javafx.event.Event

Cette classe nous fournira le moyen de capter l’action de clique sur un boutton par exemple.

Un évènement est traité par l’implémentation  de l’interface EventHandler qui prend en argument le type d’évènement qui sera traité.

L’exemple ci-dessous montre comment gérer diffèrent évent:

 

package sample.chap02;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;

public class JavaFxEvent extends Application {
    //les Variables globales
    Label keyBoardEvent;
    Label mouseEvent;
    Label zoneAffichage;
    CheckBox java;
    CheckBox javaFx;
    CheckBox springBoot;
    CheckBox checkAll;

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Les Evenements");
        //Definition d'une mise en place flux vertical pour les elements avec un espacement de 5px
        FlowPane root = new FlowPane(Orientation.VERTICAL,5,5);
        //le Layout est centré depuis le haut de la fenetre
        root.setAlignment(Pos.TOP_CENTER);
        Scene scene = new Scene(root,400,200);
        primaryStage.setScene(scene);

        Label cours = new Label("Selectionner un cours");
        zoneAffichage = new Label("Aucun cours n'est selectionner");
        java = new CheckBox("Java");
        javaFx = new CheckBox("JavaFx");
        springBoot = new CheckBox("Spring Boot");

        java.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent event) {
                if(java.isSelected())zoneAffichage.setText("Cours Java activé");
                else zoneAffichage.setText("Cours Java désactivé");
            }
        });

        javaFx.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent event) {
                if(javaFx.isSelected())zoneAffichage.setText("Cours JavaFx Activé");
                else zoneAffichage.setText("Cours JavaFx désactivé");
            }
        });

        springBoot.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent event) {
                if(springBoot.isSelected())zoneAffichage.setText("Cours spring Boot Activé");
                else zoneAffichage.setText("Cours spring Boot désactivé");
            }
        });

        //Ajout un checkbox qui se charge de tous selectionner ou a l'inverse tous desactivé
        checkAll = new CheckBox("All");
        checkAll.setOnAction(new EventHandler() {
            @Override
            public void handle(ActionEvent event) {
                if(checkAll.isSelected()){
                    javaFx.setSelected(true);
                    java.setSelected(true);
                    springBoot.setSelected(true);
                    zoneAffichage.setText("Tous les cours sont activé");
                }else{
                    javaFx.setSelected(false);
                    java.setSelected(false);
                    springBoot.setSelected(false);
                    zoneAffichage.setText("Tous les cours sont désactivé");
                }
            }
        });

        //Evenement touche clavier avec une event handler sur la scene
        keyBoardEvent = new Label("Taper une touche clavier");
        scene.setOnKeyTyped(new EventHandler() {
            @Override
            public void handle(KeyEvent event) {
                keyBoardEvent.setText("vous avez taper la touche: "+event.getCharacter());
            }
        });

        //si on tape des touche special comme les F1-F12 haut bas droite gauche
        //elle ne sont pas detecter pour cela il faut utiliser le key event suivant
        scene.setOnKeyPressed(new EventHandler() {
            @Override
            public void handle(KeyEvent event) {
                switch (event.getCode()){
                    case CONTROL:
                        keyBoardEvent.setText("vous avez tapé la touche CONTROL");
                        break;
                    case LEFT:
                        keyBoardEvent.setText("vous avez tapé la touche LEFT");
                        break;
                    case RIGHT:
                        keyBoardEvent.setText("vous avez tapé la touche RIGHT");
                        break;
                    case DOWN:
                        keyBoardEvent.setText("vous avez tapé la touche DOWN");
                        break;
                    case UP:
                        keyBoardEvent.setText("vous avez tapé la touche UP");
                        break;
                    case F1:
                        keyBoardEvent.setText("vous avez tapé la touche F1");
                        break;
                    case F2:
                        keyBoardEvent.setText("vous avez tapé la touche F2");
                        break;
                }
            }
        });

        //Evenement Sourie
        mouseEvent = new Label("Merci de bougé la souris");
        scene.setOnMouseMoved(new EventHandler() {
            @Override
            public void handle(MouseEvent event) {
                if(event.getSceneX()<0 || event.getSceneY()400 || event.getSceneY()>500){
                    System.out.println("sourie en dehors de la scene");
                }else mouseEvent.setText("Position de la sourie par rapport a la scene : [X:"+event.getSceneY()+" ,Y:"+event.getSceneY()+"]");
            }
        });

        scene.setOnMouseClicked(new EventHandler() {
            @Override
            public void handle(MouseEvent event) {
                int count = event.getClickCount();
                switch (event.getButton()){
                    case PRIMARY:
                        mouseEvent.setText("Boutton Gauche de la souris cliqué : "+count+"fois");
                        break;
                    case MIDDLE:
                        mouseEvent.setText("Boutton milieu de la souris cliqué : "+count+"fois");
                        break;
                    case SECONDARY:
                        mouseEvent.setText("Boutton Droit de la souris cliqué : "+count+"fois");
                        break;
                }
            }
        });

        root.getChildren().addAll(cours,
                java,
                javaFx,
                springBoot,
                checkAll,
                zoneAffichage,
                keyBoardEvent,
                mouseEvent);

        primaryStage.show();

    }
}

002-Article2-lesEvenements

 

Laisser un commentaire