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.


SommaireSceneGraphInterface utilisateurGestion des fenêtres (15)
précédent sommaire suivant
 

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.

Mis à jour le 12 septembre 2014 bouye

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.

Mis à jour le 12 septembre 2014 bouye

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 :

Mis à jour le 12 septembre 2014 bouye

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.

Mis à jour le 12 septembre 2014 bouye

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

Mis à jour le 12 septembre 2014 bouye

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

Mis à jour le 12 septembre 2014 bouye

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

Mis à jour le 16 septembre 2014 bouye

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

Mis à jour le 12 septembre 2014 bouye

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.

Mis à jour le 12 septembre 2014 bouye

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

Mis à jour le 12 septembre 2014 bouye

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.

Mis à jour le 6 octobre 2014 bouye

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.

Mis à jour le 6 octobre 2014 bouye

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

Mis à jour le 27 octobre 2014 bouye

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

Mis à jour le 27 octobre 2014 bouye

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.

Mis à jour le 27 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 © 2017 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.

 
Responsables bénévoles de la rubrique Java : Mickael Baron - Robin56 -