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 :

Accès aux attributs et méthodes d'un contrôleur FXML


Sujet :

JavaFX

  1. #1
    Membre régulier
    Homme Profil pro
    IT in outer space
    Inscrit en
    Novembre 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : IT in outer space

    Informations forums :
    Inscription : Novembre 2006
    Messages : 88
    Points : 96
    Points
    96
    Par défaut Accès aux attributs et méthodes d'un contrôleur FXML
    Bonjour,
    Je suis en train de faire une nouvelle version d'un programme que j'avais fait avec Swing et je la fait en JavaFX cette fois-ci.
    Seulement ce qui me paraissait évident avec Swing ne l'est plus avec JavaFX.

    Sous Swing les dialogues sont des classes qui étendent JFrame donc il me suffit de déclarer une instance de ma classe dans le main pour avoir accès à ses méthodes et attributs.

    Sous JavaFX je charge un fichier FXML qui est lié à un contrôleur, ce qui me plait mais je ne sais pas comment accéder aux méthodes du contrôleur (ni aux attributs mais pas besoin pour le moment).
    Sauriez-vous m'éclairer ?
    J'ai regardé à gauche et à droite sur Google, le document de JM Doudoux ou même ici et je n'ai pas trouvé ce que je cherche. Ça me parait pourtant basique.

    Voici le code source de 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    package application;
     
    import java.util.Locale;
    import java.util.ResourceBundle;
    import java.util.Timer;
    import java.util.TimerTask;
     
    import controller.MainController;
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.paint.Color;
    import javafx.stage.Stage;
    //import javafx.stage.StageStyle;
     
     
    public class Main extends Application {
        @Override
        public void start(Stage primaryStage) {
            try {
                Locale myLocale = Locale.getDefault();
                ResourceBundle rb = ResourceBundle.getBundle("locale.MainUI", myLocale);
     
                Parent root = FXMLLoader.load(getClass().getResource("/ui/MainUI.fxml"), rb);
                Scene scene = new Scene(root,640,480, Color.TRANSPARENT);
                //Scene scene = new Scene(root,640,480);
                scene.getStylesheets().add(getClass().getResource("/css/application.css").toExternalForm());
                //primaryStage.initStyle(StageStyle.TRANSPARENT);
                primaryStage.setOpacity(0.98);;
                primaryStage.setScene(scene);
                primaryStage.show();
     
                TimerTask timerTask = new TimerTask() {
                    public void run() {
                        System.out.println("Refreshed ! ");
                        //root.lookup("#refreshGUI");
                    }
                };
     
                Timer t = new Timer();
                t.scheduleAtFixedRate(timerTask, 0, 1000);
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
     
        public void stop(Stage primaryStage){
            System.out.println("Close has been fired !");
            primaryStage.close();
        }
     
        public static void main(String[] args) {
            launch(args);
        }
    }
    Je cherche à avoir accès à la méthode refreshGUI depuis le contrôleur mais je ne sais pas comment l'atteindre. J'ai vu des exemples de codes qui ne marchent pas chez moi notamment avec des getController() qui n'apparaissent jamais à la complétion de code.

    Si vous avez besoin de plus d'infos merci de me le faire savoir.
    Merci d'avance.

  2. #2
    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
    1. Ne pas utiliser la méthode statique load() dans FXMLLoader ; lui préférer la méthode d'instance (celle sans argument).
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      FXMLLoader loader = new FXMLLoader(url, bundle);
      Parent root = loader.load();
    2. Manipuler une instance de FXMLLoader permet également de récupérer le contrôleur via la méthode getController() (après l'appel a load() of course).
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ParentController controller = loader.getController();


    Ensuite, c'est a toi de déclarer ce que tu veux dans ton contrôleur pour permettre au reste de ton code d’interagir avec lui :
    • Tout déclarer toutes les variables injectée public ou package protected pour les manipuler depuis l'exterieur (pas recommandé).
    • Faire des méthodes qui permettent de manipuler le contenu des variables et de récupérer les modifs.
    • ze JavaFX way : faire des propriétés FX manipulables depuis l’extérieur et auxquelles le contrôleur va réagir. Faire également des propriétés (en lecture seule si besoin) accessibles depuis l’extérieur qui permettent de réagir en cas de modification a l’intérieur du contrôleur/via les contrôles a l’écran.
    • ze MVC JavaFX way : faire un nouveau contrôle qui encapsule le chargement du FXML et la manipulation du contrôleur. Ton code n’accède directement qu'a ce nouveau contrôle et a ses propriétés FX.
    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 régulier
    Homme Profil pro
    IT in outer space
    Inscrit en
    Novembre 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : IT in outer space

    Informations forums :
    Inscription : Novembre 2006
    Messages : 88
    Points : 96
    Points
    96
    Par défaut
    Merci de ta réponse il va falloir que j’essaie.

    Je découvre JavaFX par petites touches.
    J'ai aussi trouvé de la doc sur le site d'Oracle.
    Je ne sais pas si je vais trouver mon bonheur mais il faudrait surement que je la lise pour savoir où je mets les pieds.

    http://docs.oracle.com/javase/8/java...n_to_fxml.html
    http://docs.oracle.com/javase/8/javafx/fxml-tutorial/

  4. #4
    Membre régulier
    Homme Profil pro
    IT in outer space
    Inscrit en
    Novembre 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : IT in outer space

    Informations forums :
    Inscription : Novembre 2006
    Messages : 88
    Points : 96
    Points
    96
    Par défaut
    Yop C'est de nouveau moi.
    J'ai un peu laissé tout ça de côté pour un moment et je viens d'essayer.

    J'ai rencontré un autre problème Not on FX application thread que j'ai pu résoudre grace à ce thread.

    Bon,
    plus qu'à résoudre un petit problème d'interface et à compléter la méthode que j'appelle depuis mon contrôleur et ça aura pas mal avancé.

    Merci beaucoup.

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

Discussions similaires

  1. Erreur lors de l'acces aux attributs
    Par userB dans le forum C++Builder
    Réponses: 1
    Dernier message: 14/09/2006, 12h37
  2. [POO] Acces aux attributs d'un objet depuis une methode evenement :s
    Par NikoGJ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/07/2006, 19h01
  3. Acces aux attributs d'un bean dans une jsp
    Par mariemor64 dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/06/2006, 10h32
  4. Accès aux attributs d'une balise HTML
    Par tatou42 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/02/2006, 14h01
  5. [DOM] Accès aux attributs d'un noeud
    Par vasilov dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 13/07/2005, 14h19

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