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.

SommaireSceneGraph (388)
pr�c�dent sommaire suivant
 

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.

Mis � jour le 6 octobre 2014 bouye

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.

Mis � jour le 6 octobre 2014 bouye

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.

Mis � jour le 5 septembre 2014 bouye

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.

Mis � jour le 5 septembre 2014 bouye

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.

Mis � jour le 1er octobre 2014 bouye

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

Mis � jour le 1er octobre 2014 bouye

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

Mis � jour le 1er octobre 2014 bouye

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.

Mis � jour le 3 octobre 2014 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.