
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.
9.1.1. �v�nements (9)
- Qu'est-ce qu'un n�ud graphique ?
- Est-ce qu'il est possible d'avoir un m�me n�ud � plusieurs endroits ?
- Comment cacher un n�ud ?
- Comment faire varier l'opacit� d'un n�ud ?
- Comment d�placer un n�ud ?
- Comment effectuer une rotation sur un n�ud ?
- Comment agrandir ou r�tr�cir un n�ud ?
- Qu'est-ce qui est consid�r� comme �tant � l'int�rieur de mon n�ud ?
- Comment grouper des n�uds ?
- Comment d�sactiver un n�ud ?
- Comment savoir si un n�ud est d�sactiv� ?
- Comment demander le focus sur un n�ud ?
- Comment savoir si un n�ud a le focus ?
- Comment stocker des valeurs arbitraires sur un n�ud ?
- Comment changer l'orientation d'un n�ud ?
- Comment changer l'apparence du curseur de souris au-dessus d'un n�ud ?
- Comment cr�er une nouvelle apparence de curseur de souris ?
Un n�ud est un objet qui h�rite de la classe javafx.scene.Node. Il s'agit des �l�ments de base de l'API SceneGraph. Ce sont ces �l�ments qui permettent de dessiner et de cr�er des interfaces graphiques en JavaFX. En effet, la sc�ne contient une arborescence de n�uds destin�s � �tre affich�s � l'�cran.
Un n�ud peut �tre :
- une forme g�om�trique en 2D ou en 3D, voir le package javafx.scene.shape ;
- du texte, voir la classe, voir le package javafx.scene.text ;
- une vue sur une image, voir le package javafx.scene.image ;
- une vue sur un m�dia (vid�o, son), voir le package javafx.scene.media ;
- une vue sur une page web, voir le package javafx.scene.web ;
- une zone de dessin, voir le package javafx.scene.canvas ;
- un contr�le (un composant skinnable JavaFX), voir le package javafx.scene.control ;
- un graphique de donn�es statistiques, voir le package javafx.scene.chart ;
- un groupement de n�uds ou un gestionnaire de mise en page, voir la classe javafx.scene.Group et le package javafx.scene.layout ;
- un composant Swing, voir le package javafx.embed.swing.
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 | public class Main extends Application { @Override public void start(Stage primaryStage) { final Rectangle rectangle = new Rectangle(100, 100, 150, 100); rectangle.setFill(Color.RED); final Pane root = new Pane(); root.getChildren().setAll(rectangle); final Scene scene = new Scene(root, 600, 600); primaryStage.setTitle("Affichage d'un rectangle"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Nous avons cr�� ici un n�ud qui est de type javafx.scene.shape.Rectangle. Nous avons rempli ce rectangle avec la couleur rouge, et l'avons ensuite plac� dans un gestionnaire d'affichage de type javafx.scene.layout.Pane que nous avons inclus en tant que n�ud racine de la sc�ne. Nous avons ensuite inclus la sc�ne dans la fen�tre et nous avons rendu la fen�tre visible.
Les n�uds ont ceci en commun qu'il est possible de leur appliquer des transformations (par exemple de les d�placer dans les trois dimensions) ou m�me des animations dans la sc�ne. Les n�uds utilisent un syst�me d'�v�nements identiques pour la gestion de la souris, du clavier ou encore des �v�nements tactiles; ceci se fait par la surcharge de fonctions callback ou en installant des �couteurs appropri�s.
On peut �galement les rendre invisibles, faire varier leur opacit�, sp�cifier leur zone de clip, leur donner un effet ou encore leur appliquer des transformations basiques directement via les propri�t�s translateX, translateY, translateZ, scaleX, scaleY, scaleZ, rotate, etc.
Ils disposent �galement d'une boite englobante rectangulaire, consultable selon trois syst�mes de coordonn�es via des propri�t�s en lecteur seule :
- boudsInLocal repr�sente les coordonn�es de la boite englobante du n�ud dans son rep�re � lui sans qu'aucune transformation ne soit appliqu�e ;
- layoutBounds repr�sente les coordonn�es de la boite englobante qui doit �tre utilis�e lorsqu'on veut positionner le n�ud ou le mettre en page dans un gestionnaire de mise en page. Pour les formes g�om�triques, cela inclut par exemple l��paisseur de la bordure qui d�passe hors de la zone remplie. Tandis que pour les contr�les, cette m�me �paisseur est souvent omise ;
- boundsInParent repr�sente les coordonn�es de la boite englobante locale sur laquelle sont appliqu�es TOUTES les transformations plac�es sur le n�ud (y compris les modifications des propri�t�s translateX, translateY, scaleX, scaleY, layoutX, layoutY et rotate ainsi que toutes les transformations du n�ud) dans le rep�re de son n�ud parent.
Non, il n'est pas possible d'avoir un m�me n�ud graphique � plusieurs endroits dans le graphe de sc�ne.
Si vous essayez d'inclure un n�ud d�j� pr�sent dans le SceneGraph � un nouvel endroit, dans la majorit� des cas, une exception indiquant que cette op�ration est impossible sera lev�e. Dans le meilleur des cas, le n�ud sera retir� de son ancien parent et inclus dans son nouveau parent.
Il suffit de modifier l'�tat de sa propri�t� visible.
Par exemple, en faisant :
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 | public class Main extends Application { @Override public void start(Stage primaryStage) { final Rectangle rectangle = new Rectangle(100, 100, 150, 100); rectangle.setFill(Color.RED); // Le n�ud devient invisible ! rectangle.setVisible(false); final Pane root = new Pane(); root.getChildren().setAll(rectangle); final Scene scene = new Scene(root, 350, 300); primaryStage.setTitle("Test sur la visibilit�"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Ici, le rectangle en pointill� indique la position � laquelle se trouve le rectangle rouge.

Le n�ud est d�sormais invisible, mais il occupe toujours un espace dans le SceneGraph. Si vous utilisez un gestionnaire de mise en page, un espace vide apparaitra alors � l'endroit o� se trouve le n�ud.
Par d�faut, la propri�t� visible vaut true.
Il suffit de modifier l'�tat de sa propri�t� opacity entre 0 (compl�tement transparent) et 1 (compl�tement opaque).
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 | public class Main extends Application { @Override public void start(Stage primaryStage) { final Rectangle rectangle = new Rectangle(100, 100, 150, 100); rectangle.setFill(Color.RED); // Le n�ud devient transparent ! rectangle.setOpacity(0.5); final Pane root = new Pane(); root.getChildren().setAll(rectangle); final Scene scene = new Scene(root, 350, 300); primaryStage.setTitle("Test sur l'opacit�"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Ce code rendra notre n�ud semi-transparent :

Ici, nous voyons d�sormais la couleur de fond de la sc�ne (le blanc) � travers la couleur rouge du rectangle.
Par d�faut, la propri�t� opacity vaut 1.0.
Nous pouvons d�placer un n�ud en modifiant directement ses propri�t�s translateX et translateY pour le plan 2D de l��cran. Si le n�ud est destin� � �tre plac� dans une sc�ne en trois dimensions, nous pouvons �galement modifier la valeur de sa propri�t� translateZ.
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(0, 0, 150, 100); rectangle.setFill(Color.RED); // D�placement de 100 pixels vers la droite. rectangle.setTranslateX(100); // D�placement de 100 pixels vers la gauche. rectangle.setTranslateY(100); final Pane root = new Pane(); root.getChildren().setAll(rectangle); final Scene scene = new Scene(root, 350, 300); primaryStage.setTitle("Test de translation"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Ce qui nous donne :

Ici, le rectangle en pointill� indique la position initiale � laquelle se trouve le rectangle rouge avant d'appliquer une translation.
Nous avons d�plac� notre rectangle de 100 pixels vers la droite et de 100 pixels vers le bas. Ceci ne modifiera pas le champ layoutBounds du n�ud.
Par d�faut, translateX, translateY et translateZ valent tous les trois 0.0.
Lorsque l'on manipule des n�uds dans un gestionnaire de mise en page ou un groupe, on peut �tre �galement amen� � utiliser leurs propri�t�s layoutX et layoutY pour les positionner � l�int�rieur.
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 | public class Main extends Application { @Override public void start(Stage primaryStage) { final Rectangle rectangle = new Rectangle(0, 0, 150, 100); rectangle.setFill(Color.RED); rectangle.setLayoutX(100); rectangle.setLayoutY(100); final Rectangle outline = new Rectangle(0, 0, 150, 100); outline.setFill(null); outline.setStroke(Color.BLACK); outline.setStrokeWidth(0.5); outline.setStyle("-fx-stroke-dash-array: 5 5;"); final Pane root = new Pane(); root.getChildren().setAll(rectangle, outline); final Scene scene = new Scene(root, 350, 300); primaryStage.setTitle("Test de positionnement"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Ce qui nous donne :

Ici, le rectangle en pointill� indique la position initiale o� se trouve le rectangle avant son repositionnement.
Nous avons repositionn� le rectangle 100 pixels vers la droite et 100 pixels vers le bas. Visuellement, cet affichage est similaire au pr�c�dent. Pourtant ces positionnements viennent s'ajouter aux d�placements effectu�s via les propri�t�s translateX et translateY ainsi qu'aux autres transformations plac�es sur le n�ud. Ces valeurs de repositionnement viennent donc s'appliquer apr�s toutes les autres transformations subies par un n�ud. Elles sont principalement destin�es au positionnement durant la phase de mise en page des n�uds dans un gestionnaire de mise en page ou un groupe.
Par d�faut, layoutX et layoutY valent tous les deux 0.0.
Nous pouvons faire tourner le n�ud sur lui-m�me en modifiant sa propri�t� rotate, en lui affectant une valeur en degr�s. Par d�faut, la rotation s'effectue autour de l'axe Z qui est perpendiculaire � la surface de l��cran. Dans le cas o� on voudrait effectuer une rotation du n�ud dans une autre dimension, il est possible de sp�cifier l'axe de rotation en acc�dant � sa propri�t� rotationAxis.
Code Java : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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.setRotate(45); final Pane root = new Pane(); root.getChildren().setAll(rectangle); final Scene scene = new Scene(root, 350, 300); primaryStage.setTitle("Test de rotation"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Ici, le rectangle en pointill� indique la position initiale � laquelle se trouve le rectangle rouge.

Ce code fait tourner le n�ud de 45� autour de son centre. Ceci ne modifiera pas la propri�t� layoutBounds du n�ud.
Par d�faut, la propri�t� rotate vaut 0.0 et les rotations se font dans le sens des aiguilles d'une montre (sens horaire). Le centre de la rotation se trouve �tre le centre la propri�t� layoutBounds du n�ud.
Par d�faut, la propri�t� rotationAxis vaut Rotate.Z_AXIS : c'est-�-dire que les rotations se font autour de l'axe Z, dans le plan 2D de l��cran.
Nous pouvons op�rer un changement d��chelle sur un n�ud (l'agrandir ou le r�tr�cir) en modifiant ses propri�t�s scaleX ou scaleY et en lui donnant une valeur repr�sentant un multiplicateur d'�chelle. Si le n�ud est destin� � �tre affich� dans une sc�ne en trois dimensions, il est �galement possible de modifier sa propri�t� scaleZ.
- 1 est la valeur par d�faut et signifie que le n�ud est affich� � l'�chelle 1/1 ;
- 2 signifie que le n�ud est affich� � l'�chelle 2/1, soit deux fois plus grand ;
- 0.5 signifie que le n�ud est affich� � l'�chelle 1/2 soit deux fois plus petit.
- -1 signifie que le n�ud est affich� � l'�chelle 1/1 mais souffre d'une sym�trie par rapport � l'axe sur lequel cette valeur est appliqu�e.
Ainsi, soit le code suivant :
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 | 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.setScaleX(0.5); rectangle.setScaleY(0.5); final Pane root = new Pane(); root.getChildren().setAll(rectangle); final Scene scene = new Scene(root, 350, 300); primaryStage.setTitle("Test de mise � l'�chelle"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Ici, le rectangle en pointill� indique la position et la taille initiales du rectangle rouge.

Ce code affiche notre rectangle moiti� plus petit qu'il ne l'est r�ellement. Ceci ne modifiera pas le champ layoutBounds du n�ud.
Par d�faut, scaleX, scaleY et scaleZ valent tous les trois 0.0. La multiplication d'�chelle s'effectue par rapport � des axes passant au centre de la boite englobante du n�ud telle que d�finie par layoutBounds.
La r�ponse est : cela d�pend.
Dans le cas de n�uds qui sont des formes g�om�triques ou des groupements de n�uds, les zones qui sont naturellement en dehors de la forme g�om�trique du n�ud sont consid�r�es comme n��tant pas � l�int�rieur.
L'image suivante vous montre l'apparence des n�uds et des images qui vont �tre utilis�s pour ces tests :
De gauche � droite et du haut vers le bas :
- Un rectangle rouge avec des bords arrondis.
- Un cercle avec une bordure vert semi transparent dont la couleur de remplissage a une valeur null.
- Un cercle avec une bordure cyan dont la couleur de remplissage est la couleur transparente.
- Une image qui a des parties transparentes (pickOnBounds est � la valeur false).
- Une image qui a des parties transparentes (pickOnBounds est � la valeur true).
Les rectangles en pointill� gris montrent les positions et tailles des boites englobantes des objets utilis�s.
Commen�ons par le rectangle avec des coins arrondis :
Code Java : | S�lectionner tout |
1 2 3 4 5 6 | final Rectangle rectangle = new Rectangle(50, 50, 150, 100); rectangle.setFill(Color.RED); rectangle.setArcWidth(100); rectangle.setArcHeight(100); rectangle.setOnMouseEntered(mouseEvent -> System.out.println("Dans le rectangle !")); rectangle.setOnMouseExited(mouseEvent -> System.out.println("Hors du rectangle !")); |
Ici, par exemple, notre rectangle rouge a des coins arrondis. Les r�gions comprises entre les coins arrondis et le bord de la boite englobante du rectangle sont consid�r�es comme �tant � l�ext�rieur.
- Les parties du n�ud, bordures comprises, qui sont remplies avec une couleur opaque ou semi-transparente sont toujours consid�r�es comme �tant � l�int�rieur.
- Les parties du n�ud, bordures comprises, qui sont remplies avec la couleur Color.TRANSPARENT (couleur compl�tement transparente avec un alpha ou une opacit� �gaux � 0) sont consid�r�es comme faisant partie de la surface du n�ud et donc sont toujours consid�r�es comme �tant � l�int�rieur.
- Cependant, les surfaces sur lesquelles on a mis une couleur �gale � null ne sont pas remplies et sont consid�r�es comme vides et donc � l�ext�rieur.
Nous pouvons v�rifier cela en testant les deux cercles :
Code Java : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | final Circle circle1 = new Circle(300, 100, 50); circle1.setStroke(Color.GREEN.deriveColor(0, 0, 0, 0.5)); circle1.setFill(null); circle1.setStrokeWidth(20); circle1.setOnMouseEntered(mouseEvent -> System.out.println("Dans le cercle 1 !")); circle1.setOnMouseExited(mouseEvent -> System.out.println("Hors du cercle 1 !")); final Circle circle2 = new Circle(450, 100, 50); circle2.setStroke(Color.CYAN); circle2.setFill(Color.TRANSPARENT); circle2.setStrokeWidth(20); circle2.setOnMouseEntered(mouseEvent -> System.out.println("Dans le cercle 2 !")); circle2.setOnMouseExited(mouseEvent -> System.out.println("Hors du cercle 2 !")); |
Ici, par exemple, le centre du cercle 1 est consid�r� comme ne faisant pas partie de l�int�rieur du n�ud, car sa propri�t� fill est � la valeur null.
Au contraire, le centre du cercle 2 est consid�r� comme faisant partie de l�int�rieur du n�ud, car sa propri�t� fill est � la valeur Color.TRANSPARENT.
Dans les deux cas, la bordure du cercle, m�me celle qui est semi-transparente est consid�r�e comme faisant partie de l�int�rieur.
Prenons maintenant le cas d'une image ayant des zones � �vid�es �, c'est-�-dire compl�tement transparentes :
Code Java : | S�lectionner tout |
1 2 3 4 5 6 7 | final URL imageURL = getClass().getResource("imageInsideTest.png"); final Image image = new Image(imageURL.toExternalForm()); final ImageView imageView1 = new ImageView(image); imageView1.setLayoutX(50); imageView1.setLayoutY(200); imageView1.setOnMouseEntered(mouseEvent -> System.out.println("Dans l'image 1 !")); imageView1.setOnMouseExited(mouseEvent -> System.out.println("Hors de l'image 1 !")); |
Au survol du curseur, nous pouvons voir que seules les zones opaques ou semi-transparentes de l'image sont consid�r�es comme �tant � l�int�rieur.
Il est possible de modifier le comportement par d�faut en changeant l��tat de la propri�t� pickOnBounds. Par exemple en faisant :
Code Java : | S�lectionner tout |
1 2 3 4 5 6 | final ImageView imageView2 = new ImageView(image); imageView2.setLayoutX(350); imageView2.setLayoutY(200); imageView2.setPickOnBounds(true); imageView2.setOnMouseEntered(mouseEvent -> System.out.println("Dans l'image 2 !")); imageView2.setOnMouseExited(mouseEvent -> System.out.println("Hors de l'image 2 !")); |
D�sormais, le passage du curseur ne tient plus compte des zones �vid�es de l'image. Seule la boite englobante du n�ud telle que d�finie par layoutBounds est prise en compte.
Initialement, la propri�t� pickOnBoundsest � la valeur false.
La plupart des effets graphiques tels que les ombres port�es ou les reflets sont g�n�ralement consid�r�s comme �tant hors du n�ud.
Il existe plusieurs moyens de grouper des n�uds. Le moyen le plus simple est d'utiliser un objet de type javafx.scene.Group, un groupement ou encore un groupe.
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 26 27 | public class Main extends Application { @Override public void start(Stage primaryStage) { final Rectangle rectangle = new Rectangle(100, 100, 150, 100); rectangle.setFill(Color.RED); final Circle circle = new Circle(350, 150, 50); circle.setStroke(Color.GREEN); circle.setFill(null); circle.setStrokeWidth(20); final Button button = new Button("Mon bouton"); button.setLayoutX(200); button.setLayoutY(250); final Group group = new Group(); group.getChildren().setAll(rectangle, circle, button); final Pane root = new Pane(); root.getChildren().setAll(group); final Scene scene = new Scene(root, 600, 600); primaryStage.setTitle("Test de groupe"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Ici, le rectangle en pointill� indique la position et la taille du groupe.

Dans ce code, nous avons ins�r� des n�uds graphiques (un rectangle, un cercle et un bouton) dans un groupe en modifiant le contenu de la liste observable retourn�e par la m�thode getChildren().
Dans un groupe, les composants sont dessin�s dans leur ordre d'insertion : un �l�ment situ� en fin de liste et qui chevauche un autre �l�ment situ� en t�te de liste le recouvrira durant l'affichage. Il est possible de modifier cet ordre, soit en agissant directement sur le contenu la liste observable retourn�e par getChildren(), soit en utilisant les m�thodes toBack() ou toFront() sur un des n�uds qu'il contient. Ces deux m�thodes changeront donc la profondeur du n�ud en question.
Par d�faut, un groupe a une boite englobante �gale � l'union des boites englobantes des n�uds qu'il contient. Les groupements sont eux-m�mes des n�uds. Il est donc possible de les mettre dans d'autres groupements, de leur appliquer des effets ou des transformations.
Il est �galement possible de grouper des n�uds en utilisant un gestionnaire de mise en page.
Mise en page sur la FAQ JavaFX.
Pour d�sactiver un n�ud, vous pouvez modifier la valeur de sa propri�t� disable.
Par exemple :
Code Java : | S�lectionner tout |
node.setDisable(true);
Cela d�sactivera le n�ud ainsi que tous les sous-n�uds qu'il contient.
Pour savoir si un n�ud est d�sactiv�, vous devez tester la valeur de sa propri�t� en lecture seule disabled (� ne pas confondre avec la propri�t� modifiable disable).
Code Java : | S�lectionner tout |
1 2 3 4 | if (node.isDisabled()) { // Faire quelque chose lorsque le n�ud est d�sactiv�. [...] } |
En effet, un n�ud peut �tre d�sactiv� :
- parce que vous avez directement modifi� la valeur de sa propri�t� disable � la valeur true ;
- si un de ses anc�tres a �t� d�sactiv�. Dans ce cas, la valeur de la propri�t� disable du n�ud actuel peut �tre � la valeur false.
Par d�faut, la plupart des n�uds (hors contr�les) ne peuvent pas recevoir le focus. Il convient donc de s'assurer que la valeur de leur propri�t� focusTransversable est � la valeur true.
Code Java : | S�lectionner tout |
node.setFocusTransversable(true);
Ensuite, pour demander � ce que votre n�ud re�oive le focus, vous pouvez invoquer la m�thode requestFocus() de ce n�ud.
Code Java : | S�lectionner tout |
node.requestFocus();
Quand un n�ud a le focus, cela se traduit g�n�ralement par le fait de pouvoir �couter des �v�nements clavier ou, dans le cas des contr�les, le fait d'avoir une bordure sp�ciale en surbrillance.
Pour savoir si un n�ud a le focus, vous devez tester la valeur de sa propri�t� en lecture seule focused.
Par exemple :
Code Java : | S�lectionner tout |
1 2 3 4 | if (node.isFocused()) { // Faire quelque chose lorsque le n�ud a le focus. [...] } |
Il est possible de stocker des valeurs arbitraires sur un n�ud sans pour autant devoir n�cessairement �tendre sa classe et rajouter des propri�t�s JavaFX pour y acc�der. En effet, chaque objet qui h�rite de la classe Node dispose d'une table de hachage observable properties. Il vous suffit donc d'y stocker des valeurs avec des cl�s qui vous sont propres.
Code Java : | S�lectionner tout |
node.getProperties().put("test", "test");
Note : il faudra penser � retirer ces valeurs de la table de hachage lorsqu'elles sont devenues inutiles. Sinon elles ne seront r�clam�es par le garbage collector que lorsque le n�ud sera lui-m�me r�clam�.
Dans l'API, les gestionnaires de mise en page utilisent fr�quemment ce m�canisme pour stocker des valeurs n�cessaires � leur bon fonctionnement. Par exemple lors des appels suivants :
Code Java : | S�lectionner tout |
1 2 3 | AnchorPane.setTopAnchor(checkBox, 10d); VBox.setVgrow(button, Priority.NEVER); GridPane.setConstraints(image, 3, 2, 1, 5); |
Ici, en fait les gestionnaires de mise en page vont stocker des valeurs dans la table de hachage observable properties du n�ud et vont utiliser ces valeurs pour proc�der au positionnement des n�uds � l��cran.
Ces gestionnaires offrent �galement des m�thodes permettant de vidanger le contenu de ces valeurs de mani�re � �viter les fuites m�moire.
L'orientation d'un n�ud permet d'indiquer le sens dans lequel doivent se faire la pr�sentation et la mise en page, voire la saisie du texte. Cette orientation est g�n�ralement d�pendante de la Locale du logiciel, de la JVM ou des options de langues ou r�gionales du syst�me d'exploitation sous-jacent. Il est possible de modifier l�orientation d'un n�ud en modifiant la valeur de sa propri�t� nodeOrientation et en lui donnant une valeur de l��num�ration javafx.geometry.NodeOrientation :
- NodeOrientation.LEFT_TO_RIGHT - le n�ud est orient� de la gauche vers la droite ; cela est g�n�ralement utilis� pour des langues bas�es sur l'alphabet latin. Certains n�uds comme ImageView par exemple ont leur orientation par d�faut � cette valeur ;
- NodeOrientation.RIGHT_TO_LEFT - le n�ud est orient� de droite vers la gauche ; cela est utilis� pour des langues telles que l'arabe ou l�h�breu ;
- NodeOrientation.INHERIT - le n�ud h�rite son orientation de celle de son n�ud parent. Il s'agit de la valeur par d�faut sur la plupart des n�uds graphiques.
Par exemple :
Code Java : | S�lectionner tout |
textField.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT);
�tant donn� que la plupart des n�uds ont leur propri�t� nodeOrientation avec une valeur �gale � NodeOrientation.INHERIT, il suffit de changer l'orientation de la sc�ne pour changer l'orientation des n�uds de toute une application.
Par exemple :
Code Java : | S�lectionner tout |
scene.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT);
En fonction de votre syst�me d'exploitation, cette derni�re instruction peut �galement changer l'apparence de la fen�tre. Par exemple, sous Windows les positions des ic�nes, titres, et boutons de contr�le de la fen�tre s'en trouvent invers�s.
Il est �galement possible de changer l'orientation de la sc�ne en utilisant le param�tre suivant de la JVM :
Code : | S�lectionner tout |
-Djavafx.scene.nodeOrientation.RTL=true
ou en modifiant une propri�t� syst�me au lancement de votre application :
Code Java : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 | String lang = Locale.getDefault().getLanguage(); switch (lang) { case "ar": // Arabe. case "iw": // Hebreu - ancien code. case "he": // Hebreu - nouveau code. case "fa": // Perse. System.setProperty("javafx.scene.nodeOrientation.RTL", "true"); break; } |
Pour changer l'apparence du curseur de souris qui se trouve au-dessus d'un n�ud, vous devez modifier la valeur de sa propri�t� cursor et lui donner comme valeur une instance de la classe abstraite javafx.scene.Cursor. Cette classe contient des valeurs pr�d�finies permettant d'utiliser les curseurs habituels de votre plateforme.
Par exemple :
Code Java : | S�lectionner tout |
node.setCursor(Cursor.CROSSHAIR);
D�sormais, lorsqu'il passe au-dessus de notre n�ud, le curseur prendra la forme d'une croix. L'apparence exacte de cette croix d�pend de votre syst�me.
La valeur Cursor.DEFAULT repr�sente le curseur par d�faut.
Pour cr�er une nouvelle apparence de curseur de souris, vous pouvez invoquer la m�thode publique statique cursor() de la classe Cursor et lui passer en param�tre au choix :
- l'identifiant d'un des curseurs syst�me pr�d�finis ;
- une chaine de texte contenant l'URL d'une image qui sera utilis�e en tant que nouveau curseur.
Si cette m�thode s�ex�cute sans erreur, elle retournera alors une instance de la classe Cursor. Une exception de type IllegalArgumentException sera lev�e si le param�tre ne contient ni une URL valide ni un nom de curseur standard valide.
Alternativement, la classe javafx.scene.ImageCursor permet de cr�er des curseurs customis�s � partir d'une instance de la classe javafx.scene.image.Image et d'un point de contact qui d�terminera la partie active du curseur.
Attention : toutes les plateformes ne supportent pas l'usage de curseurs customis�s ou ayant des dimensions peu conformes. Il est donc recommand� d'invoquer la m�thode publique statique chooseBestCursor() de la classe ImageCursor en lui fournissant des images de diff�rentes tailles.
Code Java : | S�lectionner tout |
final Cursor cursor = ImageCursor.chooseBestCursor(new Image[] {image1, image2, image3}, 0, 0);
Cette m�thode retournera alors un curseur aux dimensions adapt�es pour le syst�me. Si le syst�me ne supporte pas les curseurs customis�s, c'est la valeur Cursor.DEFAULT qui sera retourn�e.
La classe ImageCursor dispose �galement de la m�thode publique statique getMaximumColors() qui retourne le nombre maximal de couleurs utilisables dans une image destin�e � devenir un curseur pour votre plateforme. De plus, la m�thode publique statique getBestSize() permet de connaitre les dimensions les plus proches des tailles que vous passerez en param�tres et qui sont support�es par le syst�me.
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.