
FAQ JavaFXConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 507, derni�re mise � jour : 2 novembre 2016 Ajouter une question
Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur le forum JavaFX de http://java.developpez.com ainsi que l'exp�rience personnelle des auteurs.
Nous tenons � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant r�dacteur, lisez ceci.
Sur ce, nous vous souhaitons une bonne lecture.
- Comment d�tecter des �v�nements clavier sur un n�ud ?
- Comment d�tecter des �v�nements souris sur un n�ud ?
- Comment bloquer ou d�bloquer les �v�nements de la souris ?
- Comment d�tecter le d�filement avec la roulette de la souris ?
- Comment d�tecter le d�filement tactile ?
- Comment d�tecter le zoom tactile ?
- Comment d�tecter la rotation tactile ?
- Comment d�tecter le balayage tactile ?
- Comment d�tecter la s�lection tactile ?
Vous devez modifier la valeur de l'un des callbacks suivants de la classe javax.scene.Node en sp�cifiant un objet de type EventHandler<KeyEvent> :
- onKeyPressed - ce callback est appel� quand une touche est enfonc�e. Il permet de manipuler le code de la touche ;
- onKeyReleased - ce callback est appel� quand une touche est rel�ch�e. Il permet de manipuler le code de la touche ;
- onKeyTyped - ce callback est appel� quand une touche a �t� saisie. Il permet de connaitre le caract�re qui a �t� saisi.
Par exemple :
Code Java : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class Main extends Application { @Override public void start(Stage primaryStage) { final Rectangle rectangle = new Rectangle(100, 100, 150, 100); rectangle.setFill(Color.RED); rectangle.setFocusTraversable(true); rectangle.setOnKeyPressed(keyEvent -> System.out.printf("Touche enfonc�e : %s %s", keyEvent.getCode(), keyEvent.getCharacter()).println()); rectangle.setOnKeyTyped(keyEvent -> System.out.printf("Touche saisie : %s %s", keyEvent.getCode(), keyEvent.getCharacter()).println()); rectangle.setOnKeyReleased(keyEvent -> System.out.printf("Touche rel�ch�e : %s %s", keyEvent.getCode(), keyEvent.getCharacter()).println()); final Pane root = new Pane(); root.getChildren().setAll(rectangle); final Scene scene = new Scene(root, 600, 600); primaryStage.setTitle("Test sur les �v�nements clavier"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Tout d'abord, il faut savoir que pour pouvoir recevoir des �v�nements clavier, notre n�ud doit pouvoir obtenir le focus. Nous devons donc commencer par mettre sa propri�t� focusTransversable � la valeur true. C'est �galement le cas pour toute autre forme g�om�trique ou tout n�ud basique. Les contr�les sont quant � eux d�j� pr�vus pour �tre utilisables au clavier et donc peuvent recevoir directement ces �v�nements.
Lan�ons notre programme et appuyons sur la touche S du clavier. La console va afficher la sortie suivante :
Code texte : | S�lectionner tout |
1 2 3 | Touche enfonc�e : S Touche saisie : UNDEFINED s Touche rel�ch�e : S |
- la premi�re ligne a �t� produite par le callback onKeyPressed : l��v�nement contient un code, mais pas de caract�re ;
- La seconde ligne a �t� produite par le callback onKeyTyped : l��v�nement contient un caract�re, mais son code n'est pas d�fini ;
- La derni�re ligne a �t� produite par le callback onKeyReleased : l��v�nement contient un code, mais pas de caract�re.
Vous devez modifier la valeur de l'un des callbacks suivants de la classe javax.scene.Node en sp�cifiant un objet de type EventHandler<MouseEvent> :
- onMouseClicked - ce callback est appel� si un clic de souris a eu lieu alors qu'elle se trouvait sur la surface du n�ud ;
- onMouseDragged - ce callback est appel� si la souris est cliqu�e-tir�e sur la surface du n�ud (et au-del� s'il se poursuit). Il peut servir �galement � initialiser les �v�nements de drag'n drop ;
- onMouseEntered - ce callback est appel� si la souris est entr�e sur la surface du n�ud ;
- onMouseExited - ce callback est appel� si la souris est sortie de la surface du n�ud ;
- onMouseMoved - ce callback est appel� si la souris est d�plac�e sur la surface du n�ud ;
- onMousePressed - ce callback est appel� si un bouton de la souris est enfonc� alors qu'elle se trouvait sur la surface du n�ud ;
- onMouseReleased - ce callback est appel� si un bouton de la souris est rel�ch� alors qu'elle se trouvait sur la surface du n�ud.
Par exemple :
Code Java : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class NodeMouseEvent extends Application { @Override public void start(Stage primaryStage) { final Rectangle rectangle = new Rectangle(100, 100, 150, 100); rectangle.setFill(Color.RED); rectangle.setOnMouseClicked(mouseEvent -> System.out.printf("Bouton %s cliqu� sur le n�ud, %d click(s) %f x %f.", mouseEvent.getButton(), mouseEvent.getClickCount(), mouseEvent.getX(), mouseEvent.getY()).println()); rectangle.setOnMouseDragged(mouseEvent -> System.out.printf("La souris effectue un cliquer-tirer sur le n�ud %f x %f.", mouseEvent.getX(), mouseEvent.getY()).println()); rectangle.setOnMouseEntered(mouseEvent -> System.out.printf("La souris entre sur le n�ud %f x %f.", mouseEvent.getX(), mouseEvent.getY()).println()); rectangle.setOnMouseExited(mouseEvent -> System.out.printf("La souris sort du n�ud %f x %f.", mouseEvent.getX(), mouseEvent.getY()).println()); rectangle.setOnMouseMoved(mouseEvent -> System.out.printf("La souris se d�place sur le n�ud %f x %f.", mouseEvent.getX(), mouseEvent.getY()).println()); rectangle.setOnMousePressed(mouseEvent -> System.out.printf("Bouton %s press� sur le n�ud %f x %f.", mouseEvent.getButton(), mouseEvent.getX(), mouseEvent.getY()).println()); rectangle.setOnMouseReleased(mouseEvent -> System.out.printf("Bouton %s rel�ch� sur le n�ud %f x %f.", mouseEvent.getButton(), mouseEvent.getX(), mouseEvent.getY()).println()); final Pane root = new Pane(); root.getChildren().setAll(rectangle); final Scene scene = new Scene(root, 600, 600); primaryStage.setTitle("Test sur les �v�nements souris"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Contrairement � la gestion des �v�nements clavier, nous n'avons pas besoin ici de modifier la propri�t� focusTransversable ; ce code fonctionne imm�diatement.
Il existe �galement une gestion des �v�nements de drag'n drop (DnD) qui permettent de faire transiter des valeurs, informations, n�uds ou contr�les vers et depuis le presse-papier, y compris vers le syst�me natif. Cette gestion s'initialise en g�n�ral via le callback onMouseDragged et utilise des callbacks suppl�mentaires � base de MouseDragEvent � positionner sur la source et la cible du DnD.
La gestion du d�filement avec la roulette de la souris est d�sormais prise en charge par les �v�nements de d�filement tactiles.
Par d�faut, les �v�nements de souris tels que les clics ou les d�placements du curseur ne peuvent pas traverser des n�uds qui se trouvent �tre superpos�s les uns aux les autres. Le noeud situ� au sommet de la pile d'affichage intercepte tous les �v�nements. Seules les zones qui ne sont pas consid�r�es comme faisant partie d'un n�ud laissent passer les �v�nements vers les n�uds situ�s en dessous.
Il est possible de modifier ce comportement en changeant la valeur de la propri�t� mouseTransparent :
- true - le n�ud (ainsi que tous les sous-n�uds qu'il contient) ne r�agit plus aux �v�nements souris. Tous les �v�nements sont propag�s aux n�uds qui se trouvent affich�s sous lui sans �tre bloqu�s.
- false - le n�ud r�agit � tous les �v�nements souris. S'il s'agit d'un groupe, d'un gestionnaire de mise en page, d'un contr�le ou d'une skin, les �v�nements souris seront transmis � ses n�uds enfants. Les autres n�uds qui se trouvent affich�s sous lui seront occult�s et ne recevront pas les �v�nements d�clench�s � l�int�rieur du n�ud.
La propri�t� mouseTransparent a pour valeur par d�faut la valeur false.
Depuis JavaFX 2.x, les �v�nements de d�filement avec la roulette de la souris ont �t� unifi�s avec la gestion des �v�nements de d�filement tactile. Vous devez donc utiliser les �v�nements tactiles m�me si vous ne disposez pas d'interface de saisie tactile.
Vous devez modifier la valeur de l'un des callbacks suivants de la classe javax.scene.Node en sp�cifiant un objet de type EventHandler<ScrollEvent> :
- onScrollStarted - le d�filement a commenc� ;
- onScroll - le d�filement est en cours ;
- onScrollFinished - le d�filement est termin�.
L'objet de type ScrollEvent re�u en param�tre du callback dispose de m�thodes permettant de connaitre l'axe, la direction et l�intensit� du d�filement de m�me que le nombre de lignes de texte �quivalent au d�filement en pixels.
Vous devez modifier la valeur de l'un des callbacks suivants de la classe javax.scene.Node en sp�cifiant un objet de type EventHandler<ZoomEvent> :
- onZoomStarted - le zoom a commenc� ;
- onZoom - le zoom est en cours ;
- onZoomFinished - le zoom est termin�.
L'objet de type ZoomEvent re�u en param�tre du callback dispose de m�thodes permettant de connaitre la position (en 3 dimensions) ainsi que le facteur de zoom.
Vous devez modifier la valeur de l'un des callbacks suivants de la classe javax.scene.Node en sp�cifiant un objet de type EventHandler<RotateEvent> :
- onRotationStarted - la rotation a commenc� ;
- onRotate - la rotation est en cours ;
- onRotationFinished - la rotation est termin�e.
L'objet de type RotateEvent re�u en param�tre du callback dispose de m�thodes permettant de connaitre la position (en 3 dimensions) ainsi que l'angle de rotation.
Vous devez modifier la valeur de l'un des callbacks suivants de la classe javax.scene.Node en sp�cifiant un objet de type EventHandler<SwipeEvent> :
- onSwipeDown - un balayage vers le bas a eu lieu ;
- onSwipeLeft - un balayage vers la gauche a eu lieu ;
- onSwipeRight - un balayage vers la droite a eu lieu ;
- onSwipeUp - un balayage vers le haut a eu lieu.
L'objet de type SwipeEvent re�u en param�tre du callback dispose de m�thodes permettant de connaitre la position (en 3 dimensions).
Vous devez modifier la valeur de l'un des callbacks suivants de la classe javax.scene.Node en sp�cifiant un objet de type EventHandler<TouchEvent> :
- onTouchMoved - la s�lection tactile est d�plac�e ;
- onTouchPressed - la s�lection tactile a commenc� ;
- onTouchReleased - la s�lection tactile a pris fin ;
- onTouchStationary - la s�lection tactile reste stationnaire.
L'objet de type TouchEvent re�u en param�tre du callback dispose de m�thodes permettant de connaitre la position (en 3 dimensions) ainsi que la liste des points tactiles activ�s.
Proposer une nouvelle r�ponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �aLes sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.