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 :

Transmettre un objet lors de l'initialisation d'une fenêtre


Sujet :

JavaFX

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur chef de projet
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur chef de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Transmettre un objet lors de l'initialisation d'une fenêtre
    Bonjour,

    Voilà mon problème, je souhaiterai dans une application que j'ai créé modifier les données de la fenêtre en fonction de l'utilisateur. Pour se faire j'ai dans mon main un objet utilisateur contenant tout les informations que je souhaite sur l'utilisateur de l'appli. J'aimerais à présent le transmettre au controller de ma fenêtre dès son initialisation pour pouvoir modifier les données en fonction de la personne.

    Ça fait plusieurs jour que je suis bloqué à cause de ça, quelqu'un pourrait-il venir à mon secours ?

    PS : J'espère que mon problème est assez compréhensible, n'hésitez pas à me redemander si vous ne comprenais pas quelque chose.

    Par avance merci.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Ingénieur chef de projet
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur chef de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    J'utilise JAVA FX pour la partie graphique que je code depuis scene builder.

    Voila mon code dans mon main
    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
    public void showPesee() {
            try {
     
                // Charger le fichier FXML.
                FXMLLoader loader = new FXMLLoader();
                loader.setLocation(MainApp.class.getResource("View/Pesee.fxml"));
     
                // Afficher la scene
                PeseeController controller = new PeseeController();
                controller.setMainApp(this);
                loader.getController();
                AnchorPane modulePesee = (AnchorPane) loader.load();
     
                //Mettre modulePesee au centre du menuPrincipal
                menuPrincipal.setCenter(modulePesee);
     
            } catch (IOException e) {
            }
        }
    et dans le controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Override
        public void initialize(URL location, ResourceBundle resources) {
     
            //Remplir TableView
            machineColumn.setCellValueFactory(new PropertyValueFactory<Machine, String>("nom"));
            numColumn.setCellValueFactory(new PropertyValueFactory<Pesee, ImageView>("image"));
            dateColumn.setCellValueFactory(new PropertyValueFactory<Pesee, Date>("date_enregistrement"));
            visaColumn.setCellValueFactory(new PropertyValueFactory<Pesee, String>("personnelNom"));
            okColumn.setCellValueFactory(new PropertyValueFactory<Pesee, Integer>("pcsOk"));
            koColumn.setCellValueFactory(new PropertyValueFactory<Pesee, Integer>("pcsKo"));
     
            updateAffichageMachine(mainUtilisateur); }
    Donc si je comprend se que tu me dis il faut que je supprime le code dans initialize pour le mettre dans un écouteur de chargement de la page ?

  3. #3
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Désolé aamat, je n'avais pas compris que tu travaillais avec Java FX.
    Quoi qu'il en soit, j'ai des difficultés à comprendre ta question.
    Au regard de tes précisions sur la partie Java FX, je remarque que cela semble ressembler à ce que décrit le tuto suivant : http://code.makery.ch/library/javafx-2-tutorial/part3/
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    A un moment tu fais controller.setMainApp(this); donc tu sais comment interagir avec le contrôleur. Qu'est ce qui t’empêche de créer dedans une propriété user et de lui passer l'utilisateur courant quand ce dernier a ete initialise ? Alternativement user pourrait être une propriété de l'application et le contrôleur pourrait très bien écouter les changements de valeur de cette propriété.

    Note : c'est du pseudo code, pas le temps de taper du code java complet;

    Sol #1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Controlleur {
       userProperty().addListener( (obs, oldValue, newValue) -> updateUI(oldValue, newValue));
     
       propriete user;
       get()
       set();
       property();
     
       private void updateUI(User oldUser, User newUser) {
           // ...
       }
    }
    Sol #2
    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
    26
    27
    class Controlleur {
       mainAppProperty().addlistener(  (obs, oldValue, newValue) -> {
          Optional.ofNullable(oldValue).
              .ifPresent(app -> app.userProperty().removeListener(userListener));
          Optional.ofNullable(newValue).
              .ifPresent(app -> app.userProperty().addListener(userListener));
          updateUI((oldValue == null) ? null : oldValue.getUser(), (newValue== null) ? null : newValue.getUser());
       }); 
     
       private final ChangeListener<User> userListener = (obs, oldValue, newValue) -> updateUI(oldValue, newValue);
     
       propriete mainApp;
       get()
       set();
       property();
     
       private void updateUI(User oldUser, User newUser) {
           // ...
       }
    }
     
    class MainApp {
       propriete user;
       get()
       set();
       property();
    }
    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
    Futur Membre du Club
    Homme Profil pro
    Ingénieur chef de projet
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur chef de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Déjà merci beaucoup pour vos retours.

    yotta : Oui je connais ces tutos qui m'ont déjà pas mal aidé d'ailleurs, mais pour le coup je n'ai pas pu trouver mon bonheur dedans

    bouye : J'ai du mal à comprendre ton astuce, je transmet déjà mon utilisateur à mon controller au travers de
    controller.setMainApp(this);
    mais mon soucis, c'est que je reçois cet élément "trop tard", mon controller a déjà été initialisé. Ma ligne
    updateAffichageMachine(mainUtilisateur);
    c'est donc exécuté avec mainUtilisateur=null, se qui engendre une erreur.

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Oui mais tu est en train de faire une app reactive (AKA react) voir meme responsive. Tu dois justement tenir compte que ton utilisateur n'a pas encore été chargé lorsque tu initialises le contrôleur et changer le contenu de l'affichage lorsque ce dernier est enfin disponible (d'ou le ChangeListeneur sur la propriété suivit d'un appel a updateUI()). Donc quand tu auras ton utilisateur alors tu actives, désactives, affiches les champs et contrôles, remplis les tables, listes et boites déroulantes avec les valeurs qu'il faut pour cet utilisateur precis. Et aussi tenir compte du moment quand l'utilisateur est null (tout est gris, vide et désactivé)

    Si vraiment tu as des interfaces differences (ex: un utilisateur λ a une interface classique et un administrateur a une vue avancée) alors c'est que tu dois avoir un composant qui est une espèce de boite noire initialement vide et qui va changer son contenu en chargeant le bon FXML (ex: uiNormal.fxml et uiAdmin.fxml) après que l'application lui ait fournie l'utilisateur.
    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

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur chef de projet
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur chef de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    D'accord !!!!! Je comprend, je vais essayer ça merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Dépassement de mémoire (sans allocation d'objet) lors de l'exécution d'une macro simple
    Par MistyFlip dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/07/2018, 13h52
  2. [Débutant] Condition lors de l'initialisation d'une propriété
    Par III Jonathan III dans le forum C#
    Réponses: 11
    Dernier message: 25/09/2017, 14h31
  3. Réponses: 9
    Dernier message: 19/08/2009, 10h43
  4. problème lors de l'initialisation d'une Applet
    Par blueLight dans le forum Applets
    Réponses: 0
    Dernier message: 27/07/2009, 11h51
  5. Arrêter un ttmt en cours, lors de la fermeture d'une fenêtre
    Par teska dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/12/2004, 14h08

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