IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
logo

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.

SommaireSceneGraphN�uds (26)
pr�c�dent sommaire suivant
 

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.

Mis � jour le 5 septembre 2014 bouye

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.

Mis � jour le 19 septembre 2014 bouye

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.

Mis � jour le 5 septembre 2014 bouye

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.

Mis � jour le 5 septembre 2014 bouye

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.

Mis � jour le 5 septembre 2014 bouye

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.

Mis � jour le 5 septembre 2014 bouye

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.

Mis � jour le 5 septembre 2014 bouye

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.

Mis � jour le 5 septembre 2014 bouye

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.

Mis � jour le 5 septembre 2014 bouye

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.

Mis � jour le 18 septembre 2014 bouye

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.

Mis � jour le 18 septembre 2014 bouye

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.

Mis � jour le 18 septembre 2014 bouye

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.  
  [...]  
}

Mis � jour le 18 septembre 2014 bouye

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.

Mis � jour le 9 octobre 2014 bouye

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

Mis � jour le 29 octobre 2014 bouye

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.

Mis � jour le 15 mars 2015 bouye

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.

Mis � jour le 15 mars 2015 bouye

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 �a


R�ponse � la question

Liens sous la question
pr�c�dent sommaire suivant
 

Les 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.