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 :

Revenir à la fenêtre précédente


Sujet :

JavaFX

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Revenir à la fenêtre précédente
    Bonjour,

    Je bloque en ce moment sur un projet où je dois créer une interface graphique.
    Je n'arrive pas à créer un bouton qui me permet lors d'un appui dessus de revenir à la page précédente. Avez vous des suggestions?
    En gros: j'ouvre une fenêtre, sur cette dernière j'ai une image. Je clique dessus, ce qui m'ouvre une nouvelle fenêtre et je souhaite avec un bouton "Retour"; revenir à la fenêtre précédente.
    J’espère avoir été assez compréhensible!
    N'hésitez pas à me demander plus d'information si nécessaire.
    Merci!

  2. #2
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut
    Il faut toujours indiquer si vous utiliser FXML ou Non. la solution suivante suppose que vous utilisiez FXML.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @FXML
        private void retourButton(ActionEvent event) {
     
          //utilser n'importe quel composant annoté par @FXML pour obtenir la scene puis le stage:
           Stage stage = (Stage)retour.getScene().getWindow();// ici je suppose que retour est un composant (button, textField, etc) annoté avec @FXML 
            secondStage.close();  
     
     //ou bien vous pouvez utiliser ceci:
     //Stage secondStage= (Stage)( (Node) (event.getSource())).getScene().getWindow();
      //secondStage.close();      
     
        }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup win_ubuntu! Et excuse moi j'ai oublié de préciser si j'utilisais fxml ou non.
    Je vais tester ce que tu m'as dit lundi! Et oui j'utilise bien fxml. Encore merci

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    J'ai essayé ce que tu m'as dit sauf que ca me met une erreur à la compilation.
    Jusqu'à présent, j'utilise seulement un Stage nommé primaryStage et j'affiche mes fenêtre sur différentes scenes.
    Voici un petit 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
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    public class Main extends Application {
    	public Stage primaryStage;
    	private static BorderPane mainLayout;
     
    	@Override
    	public void start(Stage primaryStage) throws IOException {
    			this.primaryStage = primaryStage;
    			this.primaryStage.setTitle("Menu");
    			showMenu();
    			showItems();	
    	        }
     
    		private void showMenu() throws IOException{
    			FXMLLoader loader = new FXMLLoader();
    			loader.setLocation(Main.class.getResource("/Menu/Menu.fxml"));
    			mainLayout = loader.load();
    			Scene scene = new Scene(mainLayout);
    			primaryStage.setScene(scene);
    			primaryStage.show();
    		}
     
    		public static void showItems() throws IOException{
    			FXMLLoader loader = new FXMLLoader();
    			loader.setLocation(Main.class.getResource("/Menu/MenuItems.fxml"));
    			BorderPane Items = loader.load();
    			mainLayout.setCenter(Items);								
    		}
                    public static void showProduit1() throws IOException{
    			FXMLLoader loader = new FXMLLoader();
    			loader.setLocation(Main.class.getResource("/Produit/produit1.fxml"));
    			BorderPane produit1 = loader.load();
    			mainLayout.setCenter(produit1);	
    		}
     
           Dans le MainController: 
    package Menu;
     
    import java.io.IOException;
     
    import application.Main;
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Node;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.Label;
    import javafx.scene.control.PasswordField;
    import javafx.scene.input.InputEvent;
    import javafx.stage.Stage;
     
    public class MainController {
    	private Button btnRetour;
    	private Main main;
     
    	@FXML
    	private PasswordField txtPassword;
    	@FXML
    	private Label lblStatus;
     
    	@FXML // Retourne au MenuProduit grâce au bouton retour
    	private void BacktoMenu() throws IOException{
    		main.showItems();
    	}
     
    	@FXML //ouvre la fenetre avec le Produit 1  (en haut à gauche)
    	private void goProduit1() throws IOException{
    		main.showProduit1();
    	}
     
           @FXML
            private void retourButton(ActionEvent event) {
     
          //utilser n'importe quel composant annoté par @FXML pour obtenir la scene puis le stage:
            Stage stage = (Stage)btnRetour.getScene().getWindow();// je crée un nouveau stage
            main.primaryStage.close(); //je ferme mon premier stage 
    	}
    A la compilation j'ai une erreur au niveau de la ligne " Stage stage = (Stage)btnRetour.getScene().getWindow();"
    voici l'erreur: Caused by: java.lang.NullPointerException
    at Menu.MainController.retourButton(MainController.java:98) //98 signifie la ligne avec (Stage)btnRetour...
    ... 62 more

    J'ai une question par rapport à cette fonction retourButton: Sur mon fichier FXML j'ai mis sur OnAction: retourButtun et en fxid: btnRetour
    Pourquoi dans la fonction on a besoin une action sur événement alors qu'on utilise l'ID du bouton dans la fonction?
    Aurais tu une idée de l'origine de l'erreur?

  5. #5
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut
    changer btnRetour par txtPassword:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stage stage = (Stage)txtPassword.getScene().getWindow();
    une autre chose:
    si j'ai bien compris, vous avez utilisé un seul stage. donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     main.primaryStage.close();
    ferme completement l'application.
    expliquez moi en français, que voulez vous faire exactement dans votre méthode retourButton(...).
    Concernant l'origine d'erreur: btnRetour n'est pas annoté avec @FXML. donc il n'est pas créer par le loader.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse. Je vais essayer dessuite ce que vous m'avez indiqué.

    Dans la fonction retourButton() je veux pourvoir retourner à la page précédente. J'ai créé le bouton retour sur plusieurs fichier fxml et chaque bouton "retour" est associé à la fonction retourButton() via onAction.
    Par exemple: Si j'ouvre la page MenuLog je souhaite, en appuyant sur le bouton retour, retourner à la page précédente (qui est MenuItems)
    Si j'ouvre ensuite la page Menureglage depuis la page MenuLog, je souhaite, en appuyant sur le bouton retour, retourner à la page précédente (qui est MenuLog).

    Je pense que pour faire cela j'ai besoin soit:
    - de connaître la page précédente pour que la fonction retourButton() sache quel menu affiché
    - d'associer à chaque bouton retour un id différent pour que la fonction retourbutton() connaisse le menu quelle doit affichée

    Avez vous compris ce que je souhaite faire avec la focntion retourButton()?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    J'ai résolu le problème en utilisant la 2em méthode qui est de donner un id différent pour chaque bouton retour. Il me manquait juste de rajouter @FXML avant les différents noms de boutons. Merci encore win_ubuntu!!
    Voici le code:
    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
     
            @FXML
    	private Button returnLog, returnReglage;
    	private Main main;
     
        @FXML
        private void retourButton(ActionEvent event) throws IOException {
    		if(event.getSource() == returnLog){  //event.getSource() 
    			System.out.println("ok log");
    			main.showItems();			
    		}
    		else if(event.getSource()== returnReglage){
    			System.out.println("ok regl");
    			main.showLogin();
    		}
    		else{
    			System.out.println("Nok");
     
    		}
    	}
    SI vous avez une idée pour faire la même chose mais en récupérant le nom ou une information permettant de savoir quelle page a été ouverte en amont, je pense que cette méthode serait plus judicieuse.

Discussions similaires

  1. Revenir a la fenêtre précédente
    Par totoen dans le forum Windows Forms
    Réponses: 0
    Dernier message: 03/06/2010, 15h10
  2. Revenir à la page précédente
    Par Llaur76 dans le forum Struts 1
    Réponses: 13
    Dernier message: 11/07/2006, 20h29
  3. revenir à la page précédente
    Par sam01 dans le forum Langage
    Réponses: 1
    Dernier message: 08/04/2006, 00h43
  4. [FORMS] Fenêtre précédente
    Par sdiack dans le forum Oracle
    Réponses: 1
    Dernier message: 30/11/2005, 07h32
  5. Réponses: 3
    Dernier message: 18/02/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