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();
}
}
