
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. N�uds (26)
9.2. Transformations (5)
9.3. Effets (10)
9.4. Animations (28)
9.5. 2D (17)
9.6. Images (10)
9.7. M�dia (5)
9.8. Interface utilisateur (170)
9.9. Web (10)
9.10. Impression (5)
9.11. Transfert de donn�es (18)
9.12. 3D (16)
9.13. CSS (16)
9.14. FXML et SceneBuilder (27)
9.15. Utilisation avanc�e (17)
- Qu'est-ce qu'un graphe de sc�ne ?
- Qu'est-ce qu'une impulsion ?
- Comment utiliser l'API SceneGraph ?
- Qu'est-ce que la sc�ne ?
- Est-il possible de cr�er et manipuler des n�uds graphiques sur un autre thread ?
- Comment savoir si mon code s'ex�cute dans le JavaFX Application Thread ?
- Comment forcer l'ex�cution du code dans le JavaFX Application Thread ?
- Existe-t-il un outil permettant d'inspecteur l'arborescence de ScenegGraph ?
Un SceneGraph (litt�ralement, graphe de sc�ne) est une arborescence d'objets graphiques, des n�uds graphiques. Chaque n�ud disposant de ses propres propri�t�s graphiques (couleur, forme, position, etc.). Stocker ainsi les �l�ments � afficher permet de d�tecter plus facilement les zones de l��cran qui sont activ�es et doivent �tre rafraichies en cas de modification (d�placement, changement de couleur, etc. ) d'un noeud ou d'un groupe de n�uds. Il devient �galement plus facile d'arriver � d�terminer au-dessus de quel �l�ment se trouve le curseur de la souris et de r�agir en cons�quence en cas de clic ou de saisie tactile.
En JavaFX, le SceneGraph forme une API publique constitu�e de n�uds graphiques (rectangle, bouton, sph�re, etc.) ou des gestionnaires de mise en page que le programmeur peut manipuler pour composer l'interface graphique de son application. Modifier une propri�t� graphique d'un de ces n�uds provoquera automatiquement la r�actualisation de la partie de l'affichage concern�e sans que le programmeur ait besoin d'invoquer quoi que ce soit.
Derri�re le SceneGraph reposent le moteur de dessin Prism, le moteur de rendu Pisces et le moteur d'effets Decora auxquels le programmeur n'a pas directement acc�s. Le gestionnaire de fen�trage utilis� par JavaFX se nomme Glass tandis que le port de Glass pour syst�mes embarqu�s se nomme Monocle.
Un pulse (litt�ralement, une impulsion) est un �v�nement qui indique au SceneGraph qu'il doit se synchroniser avec le moteur de rendu sous-jacent Prism de mani�re � changer l'affichage � l��cran. En cas d'affichage passif, une impulsion a lieu quand un objet graphique voit une de ses propri�t�s visuelles modifi�e. A contrario, les impulsions ont lieu de mani�re continue lorsque des animations ont lieu ou lors de lecture de m�dias vid�o.
JavaFX essaie de cibler un taux d'impulsions constant d'au maximum 60 images par seconde (60fps), en cas d'animations.
Vous devez inclure un objet de type javafx.scene.Scene dans votre Stage. Vous placerez ensuite des objets de type javafx.scene.Node dans cette sc�ne pour cr�er votre interface graphique. Ces n�uds graphiques peuvent contenir du texte, des formes vectorielles, des images, des composants Swing, un design fait dans un logiciel externe�
Reprenons le code de notre application de base et ajoutons-y un contr�le :
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 Button helloButton = new Button(); helloButton.setText("Dire \"Bonjour le monde !\""); helloButton.setOnAction(actionEvent -> System.out.println("Bonjour le monde !")); final StackPane root = new StackPane(); root.getChildren().add(helloButton); final Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Ma premi�re application JavaFX"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Ici, nous avons cr�� un contr�le bouton de type javafx.scene.control.Button que nous avons inclus dans un gestionnaire de mise en page de type javafx.scene.layout.StackPane. Nous avons positionn� ce gestionnaire en tant que n�ud racine de notre sc�ne et nous avons inclus la sc�ne dans la fen�tre avant de rendre la fen�tre visible.
Si le Stage est une sc�ne d'une salle de th��tre (au sens de la zone physique sur laquelle se joue une pi�ce de th��tre), la Scene est quant � elle est la sc�ne du moment, l'action de la pi�ce qui est en train d��tre jou�e sur la sc�ne physique devant vos yeux et avec tous les d�cors, ainsi que les acteurs en train de r�citer leur texte du moment. L'agencement des d�cors, des acteurs et des accessoires forme le graphe de sc�ne (SceneGraph).
La sc�ne est donc l'objet qui est destin� � afficher (on dit aussi ��rendre��) le contenu du SceneGraph. G�n�ralement cet objet est attach� � une fen�tre (Stage, Window, etc.), mais ce n'est pas toujours le cas (par exemple, quand on imprime).
La sc�ne dispose d'un unique n�ud racine accessible par la propri�t� root. Cette propri�t� ne peut jamais avoir la valeur null. Pour construire une interface utilisateur, il suffit d'ajouter et de positionner des n�uds et contr�les dans cette racine.
Pour changer compl�tement et rapidement le contenu de la sc�ne, il suffit de changer son n�ud racine en rempla�ant l'ancienne racine par une nouvelle qui contient un tout autre graphe de sc�ne.
Une autre mani�re de changer l'affichage de la fen�tre est de remplacer la sc�ne par une nouvelle.
Attention : le code qui modifie le contenu de la sc�ne ou la sc�ne elle-m�me doit �tre ex�cut� sur le JavaFX Application Thread. Si un n�ud est rattach� � une sc�ne directement ou via l'arborescence de ses parents, veillez � ne pas le modifier dans des threads externes. Si vous ne respectez pas cette r�gle, des exceptions seront lev�es.
En th�orie, oui, il est possible de cr�er et manipuler des n�uds graphiques sur un thread autre que le JavaFX Application Thread. Cela permet entre autres de g�n�rer des n�uds graphiques complexes dans des t�ches de fond sans pour autant bloquer l'affichage.
MAIS, une fois que le n�ud a �t� attach� dans une arborescence qui fait partie d'une sc�ne, vous ne devez y acc�der que depuis le JavaFX Application Thread.
De plus, � l'heure actuelle (JDK8_u20), suite � des bogues dans l'API, certains n�uds qui g�rent leur affichage via des fen�tres popup secondaires (ex. : Tooltip) ne peuvent pas �tre instanci�s depuis d'autres threads.
Il est possible de savoir si votre code s�ex�cute dans le JavaFX Application Thread en invoquant la m�thode statique isFxApplicationThread() de la classe javafx.application.Platform.
Cette m�thode retourne true quand le code s�ex�cute dans le JavaFX Application Thread. Elle retourne false dans le cas contraire.
Par exemple :
Code Java : | S�lectionner tout |
1 2 3 | if (Platform.isFxApplicationThread()) { [...] } |
Il est possible de forcer du code � s�ex�cuter dans le JavaFX Application Thread en invoquant la m�thode statique runLater() de la classe javafx.application.Platform et lui passant en param�tre un objet de type java.lang.Runnable.
Par exemple :
Code Java : | S�lectionner tout |
1 2 3 4 5 6 7 | Platform.runLater(new Runnable() { @Override public void run() { myButton.setText(text); } }); |
Ou :
Code Java : | S�lectionner tout |
Platform.runLater(() -> myButton.setText(text));
Oui, Jonathan Giles, de l��quipe de d�veloppement JavaFX chez Oracle, a mis � disposition l'outil Scenic View qui permet d'inspecter le contenu d'une sc�ne ou d'une arborescence SceneGraph.
Une fois le fichier JAR de Scenic View ajout� � votre projet, suivant les versions de l'outil, pour le lancer il faudra faire :
Code Java : | S�lectionner tout |
1 2 3 | ScenicView.show(scene); // ou // ScenicView.show(unN�udParent); |
ou
Code Java : | S�lectionner tout |
1 2 3 | ScenicViewBooter.show(scene); // ou // ScenicViewBooter.show(unN�udParent); |
Ce qui nous donne :

Vous pouvez utiliser l'arborescence sur le c�t� gauche de l��cran pour naviguer dans l'arborescence et s�lectionner vos n�uds graphiques, ce qui aura pour effet de les mettre en surbrillance dans votre application. La partie droite de l'affichage vous donnera des informations sur la mise en page du n�ud s�lectionn� ainsi que sur ses propri�t�s qu'il est possible d��diter.
Note : la version 1.x de Scenic View est destin�e � JavaFX 2.x, tandis que la version 8.x de Scenic View est destin�e � JavaFX 8.x.
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.