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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    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 éclairé
    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
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    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 éclairé
    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
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    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()?

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