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 d'ecrans en cliquant sur un item d'un arbre (treeview)


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut changer d'ecrans en cliquant sur un item d'un arbre (treeview)
    Bonjour,

    Comment puis je faire pour changer de scene ou lancer un nouvel ecran
    Voici le contrôleur où est instanciée l'arbre:

    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
    public void initialize(URL location, ResourceBundle resources)
        {
            loadItems();
        }
     
          @SuppressWarnings("unchecked")
        public void loadItems()
        {
              TreeItem<String>root=new TreeItem<>("Root");
     
              TreeItem<String> clients=new TreeItem<>("Clients");
              TreeItem<String> addClient=new TreeItem<>("Add Client");
              TreeItem<String> seeClient=new TreeItem<>("See clients");
     
              TreeItem<String> articles=new TreeItem<>("Articles");
              TreeItem<String> devis=new TreeItem<>("Devis");
              root.getChildren().addAll(clients,articles,devis);
              clients.getChildren().addAll(addClient,seeClient);
              root.setExpanded(true);
              treeview.setRoot(root);
              treeview.setShowRoot(false);
        }
    Le controleur est appelé par le main MainApp.java où sont chargées les fichiers FXML

    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
    @Override
        public void start(Stage primaryStage) {
            this.primaryStage=primaryStage;
     
            mainMenuView();
     
            }   
     
        public void mainMenuView()
            {
                try
                {
                    FXMLLoader loader=new FXMLLoader();
                    loader.setLocation(MainApp.class.getResource("view/menuView.fxml"));
                    AnchorPane menuView=(AnchorPane)loader.load();
                    rootView.setCenter(menuView);
                    MenuViewController controller = loader.getController();
                    controller.setMainApp(this);
                    TreeLoadingEventHandler Tree=new TreeLoadingEventHandler(controller);
                    Tree.handle(null);
     
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
     
             private class TreeLoadingEventHandler implements EventHandler<ActionEvent> {
                    private MenuViewController controller;
     
                    TreeLoadingEventHandler(MenuViewController controller) {
                      this.controller = controller;
                    }    
                    @Override
                    public void handle(ActionEvent t) {
                      controller.loadItems();
                    }
                  }
    Comment faire pour changer de FXML en cliquant sur un noeud de l'arbre ? Par exemple si je clique sur "Add Client" de l'arbre , je souhaiterai qu'un nouveau fichier FXML "AddClient.fxml" soit chargé au niveau de MainApp.java

    Merci d'avance de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    Mode vacances OFF

    La classe Screen (celle de l'API JavaFX) te permet de récupérer la liste des écrans ainsi que leurs bornes (x, y, w, h) et bornes affichables (ex: la barre des taches de Windows ou la barre système mac ou Ubuntu ne sont pas dans la zone affichable) donc tu peux positionner une fenêtre où bon te semble avec les bonne coordonnées et dimensions appropriées.

    Pour réagir au clic sur un nœud de l'arbre tu vas devoir créer une fabrique à cellule customisée pour créer tes propres cellules et sur lesquelles tu placeras un callback onMouseClicked. Le contenu du nœud de l'arbre t'aidera (la cellule dispose de méthode pour retrouver le TreeItem et la valeur est accessible depuis cet item) à déterminer si tu ne fais aucune action ou si tu dois charger un nouveau FXML.

    Le chargement du FXML tu sais déjà faire, y a rien qui change de ce coté là, même code que précédement en l'adaptant au nouveau fichier et contrôleur.

    Mode vacances ON
    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
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut changer d'ecrans en cliquant sur un item d'un arbre (treeview)
    Salut,

    Merci pour ta réponse. J'ai cherché mais je bloque toujours.
    Voilà j'ai ajouté une fonction dans ma fonction main MainApp.java
    une fonction qui contient un fxml qui doit être chargée quand je clique sur le noeud "Voir mes clients"
    de l'arbre.

    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
    public void mainMenuView()
    	{
    		try
    		{
    			FXMLLoader loader=new FXMLLoader();
    			loader.setLocation(MainApp.class.getResource("view/menuView.fxml"));
    			menuView=(AnchorPane)loader.load();
    			rootView.setCenter(menuView);
    			MenuViewController controller = loader.getController();
    	        controller.setMainApp(this);
    	        //controller.loadItems();
    	        TreeLoadingEventHandler Tree=new TreeLoadingEventHandler(controller);
    	        Tree.handle(null);   
     
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    	}
    La référence du main est appellé par le contrôleur MenuViewController.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void setMainApp(MainApp mainApp) {
          this.mainApp = mainApp;
          }
    Je peux ainsi créer une fonction qui appelle selectViewClient créée dans le main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public void selectViewClient()
    	  {
    		  mainApp.showClient();
    	  }
    puis j'ai ajouté une cell factory dans ma classe MenuViewController.java
    qui contient l'implémentation du treeview entre autres.

    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
    private void  setfactoryCell()
    	{
    		treeview.setCellFactory(tree -> {
                TreeCell<String> cell = new TreeCell<String>() {
                 @Override
                    public void updateItem(String item, boolean empty) {
                        super.updateItem(item, empty) ;
                        if (empty) {
                            setText(null);
                        } else {
                            setText(item);
                        }
                    }
                };
                cell.setOnMouseClicked(event -> {
                    if (! cell.isEmpty()) {
                        TreeItem<String> treeItem = cell.getTreeItem();
                        // do whatever you need with the treeItem...
                        if (treeItem.getValue().equals("Voir mes clients"))
                        {
                        	selectViewClient();
                        }
                    }
                });
                return cell ;
            });
    	}
    Pour finir la fonction setfactoryCell() est appelée dans la fonction loadItems()
    qui implémente l'arbre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void loadItems()
    	{
    		  .
                      .
    		  .	
    		    setfactoryCell();
    	}
    Malheureusement celà ne fonctionne toujours pas.
    Et en plus l'arbre ne réagit plus aux clics
    Où peut bin se trouver mon erreur ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/12/2011, 13h13
  2. Réponses: 19
    Dernier message: 16/04/2009, 08h36
  3. Changer 2 frames en cliquant sur un seul lien
    Par melanoche dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 31/08/2007, 14h06
  4. Réponses: 4
    Dernier message: 07/01/2007, 22h18
  5. SDI - changer de vue en cliquant sur un bouton
    Par Psykotik dans le forum MFC
    Réponses: 3
    Dernier message: 29/11/2005, 16h09

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