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.

SommaireApplication (22)
pr�c�dent sommaire suivant
 

Une application est une classe qui �tend la classe javafx.application.Application et qui surcharge ses m�thodes init() et start(). Il s'agit du point d�entr�e d'un programme en JavaFX.

Voici le code de notre premi�re application :

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
28
29
30
31
32
33
34
35
36
37
38
39
package test; 
  
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 
  
public class Main extends Application { 
  
    @Override 
    public void init() throws Exception { 
        super.init();  
        // Faire des initialisations ici. 
    } 
  
    @Override 
    public void start(Stage primaryStage) {          
        // Cr�er le contenu de la sc�ne ici. 
        // Bouton. 
        final Button button = new Button("Salut le monde !"); 
        button.setOnAction(actionEvent -> System.out.println("Salut le monde !")); 
        // N�ud racine. 
        final StackPane root= new StackPane(); 
        root.getChildren().setAll(button); 
        // Configuration de la sc�ne. 
        final Scene scene = new Scene(root); 
        // Configuration de la fen�tre. 
        primaryStage.setScene(scene); 
        primaryStage.setTitle("Ma premi�re application"); 
        primaryStage.setWidth(350); 
        primaryStage.setHeight(300); 
        primaryStage.show(); 
    } 
  
    public static void main(String[] args) { 
        launch(args); 
    }     
}

Ce qui nous donnera :



Ici, la m�thode statique main(), qui est le point d�entr�e habituel d'une application Java, appelle la m�thode statique launch() de la classe Application. Bien qu'il soit possible de lancer une application JavaFX de cette mani�re, vous devez cependant �viter de mettre du code dans la m�thode main(). En effet, si la m�thode main() est bien appel�e lorsque vous d�marrez une application JavaFX depuis un JAR ex�cutable ou un lanceur natif, ce n'est pas du tout le cas si vous ex�cutez votre programme en tant qu'Applet dans une page web ou via le service Java Web Start.

C'est donc la m�thode statique launch() de la classe Application qui servira en fait � initialiser une instance de notre classe. Celle-ci se doit d'avoir un constructeur par d�faut (pas de constructeur d�fini) ou un constructeur sans argument public pour pouvoir �tre charg�e ; tout autre constructeur sera ignor�. Si aucun constructeur compatible n'est trouv�, une exception sera lev�e.

La m�thode init() peut �tre surcharg�e pour initialiser des connexions r�seau ou bases de donn�es ou charger les donn�es ou fichiers contenus dans l'application. Cette m�thode n��tant pas invoqu�e sur le JavaFX Application Thread, il ne faut pas l'utiliser pour construire la sc�ne.

La m�thode start() sert � initialiser le contenu de la sc�ne qui sera affich�e dans la fen�tre primaryStage. Cette m�thode est invoqu�e sur le JavaFX Application Thread.

Mis � jour le 10 septembre 2014 bouye

Un Stage est litt�ralement la sc�ne d'une salle de th��tre, une estrade ou encore la piste d'un cirque : il s'agit de l'endroit physique dans lequel votre application va s'afficher. La classe javafx.stage.Stage h�rite de la classe javafx.stage.Window. Pour autant, il ne s'agit pas forc�ment d'une fen�tre au sens d'une fen�tre native de votre syst�me d'exploitation :

  • mode Applet dans un navigateur web : il s'agit de la surface, g�n�ralement fixe et non redimensionnable, de l'Applet incluse dans la page web ;
  • mode JAR ex�cutable, lanceur natif ou Java Web Start : g�n�ralement, il s'agit d'une fen�tre redimensionnable et mobile du syst�me d'exploitation disposant des boutons d'action habituels. Il peut aussi s'agir d'une surface fixe et non redimensionnable couvrant toute la surface d'affichage si on passe l'application en mode plein �cran ;
  • syst�me embarqu� ou mobile : il s'agit g�n�ralement d'une surface, fixe et non redimensionnable, couvrant toute la surface affichable (ex. : surface du frame buffer sur Raspberry Pi). Sur certaines plateformes, cette surface peut cependant �tre amen�e � pivoter (ex. : sur tablettes, etc.). Certaines plateformes mobiles (ex: Windows 8.1) supportent �galement l'affichage de multiples applications sur un m�me �cran, donc l'application peut �tre amen�e � s'afficher sur une surface plus petite que celle de l��cran.

Mis � jour le 15 mars 2015 bouye

Un Preloader, litt�ralement un pr�chargeur, est un type particulier d�application qui �tend la classe javafx.application.Preloader (classe qui elle-m�me h�rite de javafx.application.Application).

Il s'agit d'une application l�g�re destin�e � afficher un �cran de chargement (splashscreen), une barre de chargement ou n'importe quoi d'autre qui soit destin� � faire patienter l'utilisateur le temps que l'application principale se lance dans le cas o� son d�marrage serait long (chargement de beaucoup de donn�es depuis le disque, connexion � un serveur distant, mise � jour, connexion � une base de donn�es, etc.).

Le code suivant vous montre un preloader basique qui se contente d'afficher une barre de progression et de disparaitre juste avant l'affichage de son application m�re :

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
28
public class MyPreloader extends Preloader { 
  
    private ProgressBar bar; 
    private Stage stage; 
  
    @Override 
    public void start(Stage stage) throws Exception { 
        this.stage = stage; 
        bar = new ProgressBar(); 
        final BorderPane root = new BorderPane(); 
        root.setCenter(bar); 
        final Scene scene = new Scene(root, 300, 150); 
        stage.setScene(scene); 
        stage.show(); 
    } 
  
    @Override 
    public void handleStateChangeNotification(StateChangeNotification stateChangeNotification) { 
        if (stateChangeNotification.getType() == StateChangeNotification.Type.BEFORE_START) { 
            stage.hide(); 
        } 
    } 
  
    @Override 
    public void handleProgressNotification(ProgressNotification progressNotification) { 
        bar.setProgress(progressNotification.getProgress()); 
    } 
}

Cette classe dispose de m�thodes qui peuvent �tre surcharg�es pour lui permettre de recevoir des notifications quant � l'avancement du chargement de l'application principale et d'agir en fonction.

Le preloader dispose de son propre stage, cependant :
  • mode Applet dans un navigateur web : le preloader partage la m�me surface d'affichage d�finie dans la page web que l'application principale ;
  • mode JAR ex�cutable, lanceur natif ou Java Web Start : le preloader s'affiche dans une fen�tre s�par�e de celle de l'application principale ;
  • syst�me embarqu� ou mobile : le preloader partage la m�me surface plein �cran que l'application principale (ex. : frame buffer sur Raspberry Pi).


Mis � jour le 10 septembre 2014 bouye

Comme nous vous le disions tant�t, il est possible d'utiliser JavaFX depuis un autre langage de programmation que Java.

Par exemple, nous pouvons utiliser JavaScript qui dispose d'un interpr�teur, jjs, fourni avec la JVM :

Code JavaScript : 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
// Imports. 
var Scene = Java.type('javafx.scene.Scene') 
var StackPane = Java.type('javafx.scene.layout.StackPane') 
var Button = Java.type('javafx.scene.control.Button') 
  
// Bouton. 
var button = new Button("Salut le monde !"); 
button.onAction = sayHello 
  
// N�ud racine. 
var root = new StackPane() 
root.children.setAll(button); 
  
// Configuration de la fen�tre. 
$STAGE.scene = new Scene(root) 
$STAGE.title = "Ma premi�re application" 
$STAGE.width = 350 
$STAGE.height = 300 
$STAGE.show() 
  
function sayHello(actionEvent) { 
    print("Salut le monde !") 
}

Ce script cr�era une application identique � celle que nous avons cr��e plus t�t en Java.



Pour ex�cuter ce script, il suffit de faire :

Code : S�lectionner tout
jjs -fx Application1st.js

L'argument -fx indique � l�interpr�teur jjs qu'il s'agit d'une application JavaFX.

Mis � jour le 15 septembre 2014 bouye

Pour quitter une application JavaFX, il suffit d'invoquer la m�thode exit() de la classe utilitaire javafx.application.Platform. Invoquer cette m�thode fermera l'application en invoquant sa m�thode stop().

Code Java : S�lectionner tout
Platform.exit();

Attention cependant, s'il existe des threads qui ne sont pas deamon, le programme ne se terminera pas pour autant tant que ces derniers existeront.

Cette m�thode n'aura pas d'effet si l'application est incluse en tant qu'Applet dans une page Web.

Mis � jour le 22 septembre 2014 bouye

Pour acc�der aux services d'h�te d'une application, il suffit d'invoquer la m�thode getHostServices() de l'application. Les services d�h�te permettent, entre autres, de connaitre l'emplacement de base d'une application ou d�interagir avec la page web h�te lorsque l'application s�ex�cute en mode Applet.

Par exemple :

Code Java : S�lectionner tout
final HostServices hostServices = application.getHostServices();

Mis � jour le 1er octobre 2014 bouye

En acc�dant aux services d'h�te d'une application, il est possible d'invoquer la m�thode getCodeBase(). Cette m�thode peut retourner l'emplacement du code de l'application, mais le r�sultat de cet appel varie en fonction du mode d�ex�cution de l'application :

  • ex�cution directe des fichiers class - la chaine sera la chaine vide ;
  • JAR ex�cutable ou lanceur natif - la chaine retourn�e contient le r�pertoire contenant le fichier JAR ;
  • Java Web Start - la chaine retourn�e contient la valeur sp�cifi�e dans le param�tre codebase du fichier JNLP ;
  • Applet - la chaine retourn�e contient l'URL du site h�bergeant l'applet.


Par exemple :

Code Java : S�lectionner tout
final String codebase = application.getHostServices().getCodeBase();

Mis � jour le 1er octobre 2014 bouye

En acc�dant aux services d'h�te d'une application, il est possible d'invoquer la m�thode getDocumentBase(). Cette m�thode peut retourner l'emplacement du code de l'application, mais le r�sultat de cet appel varie en fonction du mode d�ex�cution de l'application :

  • ex�cution directe des fichiers class ou JAR ex�cutable ou lanceur natif - la chaine retourn�e contient le r�pertoire de travail de l'application ;
  • Java Web Start - la chaine retourn�e contient la valeur sp�cifi�e dans le param�tre codebase du fichier JNLP ;
  • Applet - la chaine retourn�e contient l'URL de la page web h�bergeant l'applet.


Par exemple :

Code Java : S�lectionner tout
final String documentbase = application.getHostServices().getDocumentBase();

Mis � jour le 1er octobre 2014 bouye

En acc�dant aux services d'h�te d'une application, il est possible d'invoquer la m�thode getWebContext(). Cette m�thode peut retourner un objet permettant d�interagir avec la page web contenant l�application JavaFX, mais le r�sultat de cet appel varie en fonction du mode d�ex�cution de l'application :

  • Applet - la m�thode retourne un objet de type netscape.javascript.JSObject qui permet d�interagir avec le DOM de la page web contenant l'applet. Il est possible d'invoquer les m�thodes habituelles de la nouvelle API LiveConnect introduite dans le JDK6 sur les objets de ce type ;
  • autre - la valeur retourn�e est null.


Par exemple :

Code Java : S�lectionner tout
final JSObject webContext = application.getHostServices().getWebContext();

Mis � jour le 1er octobre 2014 bouye

En acc�dant aux services d'h�te d'une application, il est possible d'invoquer la m�thode showDocument() en passant en param�tre une chaine de texte contenant une URI. Invoquer cette m�thode permet d'ouvrir le navigateur web du syst�me d'exploitation sur une page web ou encore d'ouvrir un fichier stock� sur le disque dur (ex. : un fichier PDF ou Excel) dans l'application par d�faut qui prend en charge ce type de fichiers.

Par exemple :

Code Java : S�lectionner tout
application.getHostServices().showDocument("http://www.developpez.com/");

Cette instruction ouvrira le navigateur web par d�faut du syst�me d'exploitation sur la page de garde du site de D�veloppez.

�galement :

Code Java : S�lectionner tout
getHostServices().showDocument("file:///C:/Users/fabriceb/Desktop/test.pdf");

Cette instruction ouvrira le fichier PDF sp�cifi� dans la visionneuse PDF par d�faut.

Dans le cas o� votre application s�ex�cute en tant qu'Applet, un appel � cette m�thode peut ne pas avoir d'effets si votre navigateur web est configur� de mani�re � pr�venir l'apparition de fen�tres popup. De plus, le gestionnaire de s�curit� Java peut emp�cher l�acc�s � un fichier local.

Mis � jour le 1er 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.