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 :

Changer de Fenêtre en passant des données


Sujet :

JavaFX

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2013
    Messages : 49
    Par défaut Changer de Fenêtre en passant des données
    Bonjour, je suis en train de creer una application qui montre de données obtenus dans una base de données.
    Disons que j'ai une fenêtre principale qui permet de chercher dans la bd. Si des données sont trouves je montre une tableView avec Nom et Prenom... et à chaque line de la table j'ajoute un menu contextuel oú l'une des options c'est d'éditer le registre de la Personne choisie.

    Lorsque l'utilisateur clique sur une personne je voudrais montrer une autre fênetre qui serait un formulaire d'édition avec le registre complet de la personne obtenu de la bd.

    J'ai regardé cet example (https://blogs.oracle.com/acaicedo/en...ens_in_javafx1) qui montre comment changer entre fenêtres, mais je voudrais au moment de passer de ma fenetre1 à ma fenetre2, dire a ma fenetre2 quel personne a ete choisie dans fenetre1.

    Le controlleur de fenetre2 aura la tache de prendre cette identificateur, lire la bd et me montrer tous les données de la personne choisie dans la fenetre1

    J'ai lu des exemples surtout en anglais, mais je n'arrive a m'éclairer.

    Je vous remercie si vous pouvez m'indiquer des pistes de solution.

  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
    Tu peux exposer une propriété selectedId dans le contrôleur (si tu utilises FXML) / du contrôle (si tu utilises un contrôle custom) contenu dans la seconde fenêtre et, au moment du chargement, tu appelles le setter de cette propriété.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    final MyControl2 myControl2 = new MyControl2();
    myControl2.setSelectedId(selectedId);
    final StackPane root2 = new StackPane();
    root2.getChildren().add(myControl2);
    final Scene scene2 = new Scene(root2);
    final Stage stage2 = new Stage();
    stage2.initOwner(stage1);
    stage2.setScene(scene2);
    stage2.show();
    Après à toi de réagir correctement dans ton contrôleur / ton contrôle au changement de valeur de cet id pour aller interroger la base et en retirer les données à afficher.
    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 averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2013
    Messages : 49
    Par défaut
    Bonjour Bouye,

    Je te remercie pour ta réponse, mais je n'arrive pas m'éclairer.

    En parlant d'une proprieté selectedId tu parles de placer par example un textfield dans ma fenetre2 qui recevra la valeur choisie dans fenetre1?

    Je pense utiliser du FXML dans mon application.

    Le morceau de code que tu as posté je ne vois pas trop clair où je dois le placer, selon le modèle dont je parle, le controleur de la fenetre2 a le code suivant:
    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
    public class Screen2Controller implements Initializable , ControlledScreen {
     
        ScreensController myController;
        /**
         * Initializes the controller class.
         */
        @Override
        public void initialize(URL url, ResourceBundle rb) {
            // TODO
        }
     
        public void setScreenParent(ScreensController screenParent){
            myController = screenParent;
        }
     
        @FXML
        private void goToScreen1(ActionEvent event){
           myController.setScreen(ScreensFramework.screen1ID);
        }
     
        @FXML
        private void goToScreen3(ActionEvent event){
           myController.setScreen(ScreensFramework.screen3ID);
        }
    }
    Par contre, les "root" sont chargés depuis une classe appelée ScreensFramework:
    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
    public class ScreensFramework extends Application {
     
        public static String screen1ID = "main";
        public static String screen1File = "Screen1.fxml";
        public static String screen2ID = "screen2";
        public static String screen2File = "Screen2.fxml";
        public static String screen3ID = "screen3";
        public static String screen3File = "Screen3.fxml";
     
     
        @Override
        public void start(Stage primaryStage) {
     
            ScreensController mainContainer = new ScreensController();
            mainContainer.loadScreen(ScreensFramework.screen1ID, ScreensFramework.screen1File);
            mainContainer.loadScreen(ScreensFramework.screen2ID, ScreensFramework.screen2File);
            mainContainer.loadScreen(ScreensFramework.screen3ID, ScreensFramework.screen3File);
     
            mainContainer.setScreen(ScreensFramework.screen1ID);
     
            Group root = new Group();
            root.getChildren().addAll(mainContainer);
            Scene scene = new Scene(root);
            primaryStage.setScene(scene);
            primaryStage.show();
        }
     
        /**
         * The main() method is ignored in correctly deployed JavaFX application.
         * main() serves only as fallback in case the application can not be
         * launched through deployment artifacts, e.g., in IDEs with limited FX
         * support. NetBeans ignores main().
         *
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            launch(args);
        }
    }
    Je n'arrive comprendre où dois-je placer la proprieté selectedId.

  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
    Dans ton contrôleur tu peux exposer et placer ce que tu veux :
    • Des méthodes pour piloter ton contrôle custom (ex : faitCi(), faitCa()).
    • Des propriétés en lecture seule auxquelles tu peux accéder depuis le monde extérieur pour savoir ce que l'utilisateur a saisi dans le contrôle (ex : getValeurSaisieParUtilisateur()).
    • Des propriétés modifiables depuis le monde extérieur pour changer des trucs dans le contrôle (ex : setLeRepertoireDontLeControleVaAfficherLeContenu(valeur), setAfficherUnAppercuDeLaSelection(valeur)).


    C'est pas bien compliqué et c'est ce que font tous les contrôles par défaut dans AWT, Swing, JavaFX. Y a pas a dire, parfois vous faites tous preuve d'un sacré manque d'imagination.
    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. [Adobe AIR] fenêtres qui échangent des données
    Par sami_c dans le forum Autres langages pour le Web
    Réponses: 1
    Dernier message: 20/11/2009, 20h57
  2. Réponses: 3
    Dernier message: 07/01/2009, 08h40
  3. Réponses: 3
    Dernier message: 04/07/2007, 21h00
  4. changer le type d'un champs d'une table = effacement des données ?
    Par pierre2410 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/05/2007, 11h22
  5. Réponses: 3
    Dernier message: 20/01/2005, 19h19

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