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 afficher une fenêtre ?
- Comment cacher une fenêtre ?
- Comment faire varier l'opacité de la fenêtre ?
- Comment changer le style de la fenêtre ?
- Pourquoi, après l'ajout d'une scène, ma fenêtre n'est-elle plus transparente ?
- Comment empêcher une fenêtre d’être fermée ?
- Comment spécifier l'icône de la fenêtre ?
- Comment passer en affichage plein écran ?
- Comment changer le message du passage en affichage plein écran ?
- Comment changer le raccourci clavier pour sortir de l'affichage plein écran ?
- Comment attacher une fenêtre à une autre ?
- Comment spécifier la modalité d'une fenêtre ?
- Comment récupérer la liste des écrans de la machine ?
- Comment connaitre l'écran principal de la machine ?
- Comment savoir sur quels écrans est affichée une zone rectangulaire ?
Pour afficher une fenêtre, il suffit d'invoquer sa méthode show() :
Code Java : | Sélectionner tout |
stage.show();
La fenêtre s'affichera immédiatement.
Pour cacher une fenêtre, il suffit d'invoquer sa méthode hide() :
Code Java : | Sélectionner tout |
stage.hide();
La fenêtre se fermera immédiatement.
Vous pouvez également invoquer la méthode close(). Ces deux méthodes sont interchangeables.
Vous devez modifier la valeur de la propriété opacity de la classe Stage pour faire varier l’opacité de la fenêtre. La valeur du champ doit être comprise entre 0 (complètement transparent) et 1 (complètement opaque). La modification de valeur sera ignorée sur les systèmes qui ne supportent pas la transparence des fenêtres.
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 | public class StageOpacity 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, 350, 300); primaryStage.setTitle("Test sur l'opacité de la fenêtre"); primaryStage.setScene(scene); primaryStage.show(); primaryStage.setOpacity(0.5); } public static void main(String[] args) { launch(args); } } |
Ce qui nous donne :
Le style de la fenêtre peut être modifié en appelant la méthode initStyle() de la classe Stage et en lui passant en paramètre une valeur de type javafx.stage.StageStyle.
Code Java : | Sélectionner tout |
1 2 | stage.initStyle(StageStyle.UTILITY); stage.setVisible(true); |
Parmi les valeurs possibles :
- StageStyle.DECORATED - il s'agit du style par défaut, la fenêtre prend l'apparence d'une fenêtre native du système d'exploitation, la partie cliente au centre de la fenêtre est blanc opaque (lorsque la feuille de style Modena est utilisée, le nœud racine de la scène est gris opaque et cache donc la couleur de la partie cliente de la fenêtre).
- StageStyle.UNDECORATED - la fenêtre perd toutes ses décorations, mais conserve une couleur de fond blanc opaque
- StageStyle.TRANSPARENT - la fenêtre perd toutes ses décorations et sa couleur de fond est totalement transparente
Dans certains cas (Applet, Java Web Start), le gestionnaire de sécurité peut interdire l'usage de ce style ; son support peut donc être testé en invoquant :Code Java : Sélectionner tout Platform.isSupported(ConditionalFeature.TRANSPARENT_WINDOW);
- StageStyle.UTILITY - une fenêtre secondaire décorée avec des contrôles minimaux. Peut être utilisée pour des boites de dialogue ou des palettes rattachées à une fenêtre principale.
- StageStyle.UNIFIED - la fenêtre prend l'apparence d'une fenêtre native du système d'exploitation, tout en éliminant l'espace entre la partie cliente et la bordure. La partie cliente au centre de la fenêtre a la même couleur que la bordure de la fenêtre (noir sous Windows 7, 8.x et Mac OS X).
Cette fonctionnalité est optionnelle et son support peut être testé en invoquant :Code Java : Sélectionner tout Platform.isSupported(ConditionalFeature.UNIFIED_WINDOW);
En cas de non-support, le résultat est identique à une fenêtre utilisant le style StageStyle.DECORATED
La méthode initStyle() doit être invoquée avant que la fenêtre ne devienne visible. Cette méthode lèvera une IllegalStateException si elle est invoquée après que la fenêtre est devenue visible.
La couleur de fond d'une scène est blanche (javax.scene.paint.Color.WHITE) par défaut. Vous devez donc la remplacer par la couleur transparente (javax.scene.paint.Color.TRANSPARENT) :
Code Java : | Sélectionner tout |
scene.setFill(Color.TRANSPARENT);
De plus, si vous utilisez la feuille de style Modena, le nœud racine de la scène n'est pas transparent. Vous devez donc modifier sa couleur de fond soit via CSS soit via l'API :
Code Java : | Sélectionner tout |
root.setBackground(Background.EMPTY);
Ou :
Code Java : | Sélectionner tout |
root.setStyle("-fx-background-color: transparent;");
Pour empêcher une fenêtre d’être fermée, il faut lui passer un callback de type EventHandler<WindowEvent> sur sa propriété onCloseRequest. Dans le corps de ce callback, on prendra soin de consommer l’événement, ce qui l’empêchera de se propager.
Code Java : | Sélectionner tout |
1 2 3 4 5 6 | stage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent event) { event.consume(); } }); |
Ou :
Code Java : | Sélectionner tout |
stage.setOnCloseRequest(event -> event.consume());
Pour changer l’icône de la fenêtre, vous devez modifier la liste observable icons du stage. Cette liste peut contenir plusieurs versions de la même icône à différentes tailles et résolutions. Le système d'exploitation choisira l'image de la taille appropriée en fonction de ses besoins (icône au coin supérieur gauche de la fenêtre, icône lors du changement de tâche, icône dans la barre des tâches ou le doc, etc.).
Par exemple :
Code Java : | Sélectionner tout |
1 2 3 4 5 6 7 | stage.getIcons().setAll(new Image(getClass().getResource("appIcon_16.png").toExternalForm()), new Image(getClass().getResource("appIcon_24.png").toExternalForm()), new Image(getClass().getResource("appIcon_32.png").toExternalForm()), new Image(getClass().getResource("appIcon_48.png").toExternalForm()), new Image(getClass().getResource("appIcon_64.png").toExternalForm()), new Image(getClass().getResource("appIcon_128.png").toExternalForm()), new Image(getClass().getResource("appIcon_256.png").toExternalForm())); |
Pour passer en affichage plein écran, il faut modifier la propriété fullScreen du Stage et la mettre à la valeur true. Cette propriété est en lecture seule mais dispose d'un setter.
Par exemple :
Code JavaFX : | Sélectionner tout |
stage.setFullScreen(true);
Une fois ceci fait, la fenêtre passera en mode plein écran exclusif. Après le passage en mode plein écran, un message s'affichera brièvement sur la fenêtre indiquant que l'utilisateur peut utiliser une combinaison de touches dépendant du système d'exploitation pour repasser en mode fenêtré (par exemple la touche ESC sous Windows).
Il suffit de mettre cette propriété à la valeur false pour repasser en mode fenêtré.
Sur JavaFX 8 ou ultérieur, pour changer le message qui s'affiche après le passage en mode plein écran, il suffit de changer la propriété fullScreenExitHint du Stage avant de passer dans ce mode.
Par exemple :
Code Java : | Sélectionner tout |
stage.setFullScreenExitHint("");
La chaine de caractères vide permet de ne pas afficher de message. Si la valeur null est utilisée, alors le message par défaut inclus dans JavaFX s'affichera.
Sur JavaFX 8 ou ultérieur, pour changer le raccourci clavier qui permet de sortir du mode plein écran, il suffit de changer la propriété fullScreenExitKeyCombination du Stage avant de passer dans ce mode.
Par exemple :
Code Java : | Sélectionner tout |
primaryStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH);
Ici, la valeur KeyCombination.NO_MATCH fait qu'il n'est plus possible de quitter le mode plein écran en utilisant un raccourci clavier. Si la valeur null est utilisée, alors c'est le raccourci clavier par défaut du système d'exploitation qui sera utilisé.
Le parent d'une fenêtre peut être spécifié en appelant la méthode initOwner() de la classe Stage en lui passant en paramètre une valeur de type javafx.stage.Window.
Par exemple :
Code Java : | Sélectionner tout |
dialogWindow.initOwner(primaryStage);
La méthode initOwner() doit être invoquée avant que la fenêtre ne devienne visible. Cette méthode lèvera une IllegalStateException si elle est invoquée après que la fenêtre est devenue visible.
Pour spécifier la modalité d'une fenêtre ou d'une boite de dialogue, il faut invoquer la méthode initModality() de la classe Stage et lui passer en paramètre une valeur de type javafx.stage.Modality.
- Modality.APPLICATION_MODAL - ce mode de modalité bloque la saisie dans les fenêtres de l'application.
- Modality.NONE - aucun blocage de saisie n'est actif.
- Modality.WINDOW_MODAL - toutes les fenêtres dépendantes de la fenêtre parente sont bloquées. N'a aucun effet si un parent n'est pas spécifié.
Par exemple :
Code Java : | Sélectionner tout |
dialogWindow.initModality(Modality.NONE);
La méthode initModality() doit être invoquée avant que la fenêtre ne devienne visible. Cette méthode lèvera une IllegalStateException si elle est invoquée après que la fenêtre est devenue visible.
Il est possible de récupérer la liste des écrans d'une machine en invoquant la méthode statique getScreens() de la classe javafx.stage.Screen.
Par exemple :
Code Java : | Sélectionner tout |
final ObservableList<Screen> screens = Screen.getScreens();
Cette méthode retourne une liste observable, il est donc possible d'y placer un ListChangeListener<Screen> pour recevoir des notifications quand un écran est ajouté ou retiré de la machine.
Par exemple :
Code Java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | screens.addListener(new ListChangeListener<Screen>() { @Override public void onChanged(ListChangeListener.Change<? extends Screen> change) { while (change.next()) { [...] } } }); |
Ou :
Code Java : | Sélectionner tout |
1 2 3 4 5 | screens.addListener((ListChangeListener.Change<? extends Screen> change) -> { while (change.next()) { [...] } }); |
Pour savoir quel est l’écran principal de la machine, il suffit d'invoquer la méthode statique getPrimary() de la classe javafx.stage.Screen.
Par exemple :
Code Java : | Sélectionner tout |
final Screen screen = Screen.getPrimary();
Pour une zone rectangulaire donnée (région, boite englobante de forme, fenêtre, etc.) on peut récupérer la liste des écrans qui affichent cette zone en invoquant une des variantes de la méthode statique getScreensForRectangle() de la classe javafx.stage.Screen.
Par exemple :
Code Java : | Sélectionner tout |
final ObservableList<Screen> screens = Screen.getScreensForRectangle(100, 200, 150, 300);
Si la liste retournée est vide, c'est que la forme n'est affichée sur aucun écran.
Note : bien que la liste retournée soit une liste observable, l’implémentation actuelle de la méthode (JDK8_25) fait qu'elle n'est jamais mise à jour en cas de connexion ou de déconnexion d’écran.
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 © 2024 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.