IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Utiliser l'Annotation @PostConstruct


Sujet :

JavaFX

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 112
    Par défaut Utiliser l'Annotation @PostConstruct
    Bonjour, est-ce qu'on peut utiliser l'annotation @PostConstruct en JavaFX
    Si oui comment l'activer car dans mon cas elle n'est jamais appelée.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class A
    {
    	public A()
    	{
    		System.out.println("A");
    	}
     
    	@PostConstruct
    	public void init()
    	{
    		System.out.println("init");
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @Override
    public void start(Stage stage) throws Exception
    {
        stage.setScene(new Scene(new Group(), 300, 250));
        stage.show();
        A a = new A();
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Beuuuuuuuuuuhhhhhhh...
    Ah c'est du JEE / CDI ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 112
    Par défaut
    Non c'est bien en JavaFX. Donc je dois en déduire que je suis à côté de la plaque ? ^^
    Ca serait pourtant bien pratique.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Non mais ça je n'en doute pas que c'est du JavaFX, mais a part avoir un moteur d'annotation qui prend ce genre de trucs en charge (ce qui n'est pas le cas de plain old Java SE), les seules choses que je vois quand je cherche @PostConstruct sur Google c'est des trucs en rapport avec JEE ou CDI donc il n'y a rien d’étonnant a ce que cette annotation soit ignorée quand tu n'utilises pas un contexte / framework particulier.

    La javadoc est pourtant claire, outre les quelques RARES annotations supportées par Java SE de base, il n'existe que 3 annotation dans JavaFX :

    • javafx.beans.DefaultProperty - pour tagger la propriété de base d'un contrôle, ce qui permet d’écrire du FXML sans devoir déclarer la balise (ex: children sur la plupart des gestionnaires de mise en page, généralement pas besoin d'ecrire <children> dans le FXML).
    • javafx.beans.NamedArg - ???
    • javafx.fxml.FXML - pour tagger les membres et les méthodes du contrôleur FXML pour faciliter l'injection.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 112
    Par défaut
    Dans l'idée ça me semblait pourtant assez général, mais bon tant pis je ferais sans, merci pour tes réponses.

  6. #6
    Nouveau candidat au Club
    Inscrit en
    Mai 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Par défaut
    Hello,

    J'ai eu le même problème, il suffit de créer une méthode dans ton controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void initialize();
    Cf. http://docs.oracle.com/javafx/2/api/...ml#controllers

  7. #7
    Membre chevronné
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Par défaut
    Salut,
    tu peux inclure du CDI dans JavaFX -> https://dzone.com/articles/fxml-java...ered-cdi-jboss mais l’intérêt serait plus pour les injections de dépendances que pour juste un méthode d'init.

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Effectivement CDI fonctionne en javaSE et peux ainsi prendre en charge @PostConstruct .PostConstruct est une annotation java enterprise, comprise par toute une série d'outils faisant de l'IOC (spring, cdi, conteneur ejb, hibernate, ...) et a pour but d'appeler une méthode après que toute les dépendance ont été injectée dans l'objet, avant sa mise en oeuvre. A utiliser donc lorsque l'on instancie pas les classes soit même, mais lorsqu'elle sont instanciée par on conteneur gérant leur cycle de vie. Après dans ces classe tu y fait ce que tu veux y compris du javafx. Mais c'est un peu la grosse artillerie si tout ce que tu cherche c'est un bloc d'initialisation de ta scene

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Je suis en train de lire le numéro de sept-oct 2017 du java magazine d'Oracle et ils discutent (page 54 a 62) d'une fonctionnalité de FXMLLoader que je n'avais jamais utilisé pour justement permettre une injection de dépendances pré-initialisation plus aisée : fournir au loader une fabrique a contrôleur.

    Le code fourni est un peu bateau (le controlleur est initialise a mano avant le loader) mais l'idee est la (on pourrait le faire dynamiquement via la fabrique).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package sample;
     
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Scene;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    import java.net.URL;
     
    public class AppMain extends Application {
      @Override
      public void start(Stage primaryStage) throws Exception {
        // Initialized via DI framework
        AppController controller = ...
        URL location = getClass().getResource("app.fxml");
        FXMLLoader fxmlLoader = new FXMLLoader(location);
        // set the ControllerFactory
        fxmlLoader.setControllerFactory(param -> controller);
        VBox vbox = fxmlLoader.load();
        Scene scene = new Scene(vbox);
        primaryStage.setScene(scene);
        primaryStage.sizeToScene();
        primaryStage.show();
      }
    }
    Pour une post-initialisation par contre je ne vois pas trop mais ils mentionnent

    There you have it. The controller instance is fetched from the DI container. This fetch operation varies from framework to framework and, thus, is omitted from the example. You can even apply a lambda expression to define a simple ControllerFactory. Given that the AppController class is now managed by the DI container, you can leverage other features such as methods annotated with @PostConstruct, thus allowing further customizations on the controller. Just remember that any methods annotated with @PostConstruct will be invoked before any @FXMLannotated fields are injected into the controller instance. As a side efect of this setup, the value of fx:controller becomes irrelevant. However, it is still a good idea to specify the actual type of the controller supplied by the DI container, because your IDE will give you hints on the types and names of widgets that can be injected using the @FXML annotations, as well as the names of event handlers supplied by the controller. As an alternative, you could set the controller property directly in FXMLLoader, but I decided to show the factory approach, because that might come in handy for lazily calculating the value.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. utiliser l'annotation @WebServiceClient
    Par bidts dans le forum Services Web
    Réponses: 1
    Dernier message: 14/04/2009, 10h31
  2. Réponses: 3
    Dernier message: 04/01/2009, 18h24
  3. [Data] [Transaction][Annotation] Utilisation des annotations Spring
    Par hkefi dans le forum Spring
    Réponses: 6
    Dernier message: 26/12/2008, 15h22
  4. Réponses: 0
    Dernier message: 13/11/2008, 13h56
  5. Utiliser les Annotations pour générer un WebService
    Par tvonstebut dans le forum Services Web
    Réponses: 3
    Dernier message: 09/01/2008, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo