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

AWT/Swing Java Discussion :

Problème navigation entre mes fenêtres


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 45
    Par défaut Problème navigation entre mes fenêtres
    Bonjour,

    Etant nouveau dans la programmation orienté objet, je demande votre aide pour m’éclairer sur une notion. Il m’est demandé de créé une interface graphique, j’ai choisi d’utiliser les objets de la librairie SWING.
    J’ai réussi à créer ma première fenêtre avec les éléments demandés : une barre menue avec deux menus. Dans mon deuxième menu « Charts » dans le sous-menu « y = F(x) » quand je clic dessus j’aimerai faire apparaitre ma deuxième fenêtre et rendre invisible la première. Je veux faire ceci avec la méthode action via ma la classe NaviguerAction.java mais le problème c’est que je ne peux pas accéder à mes objets fenêtre1 et fenêtre2 définit dans mon main.
    J’ai encore du mal avec la manipulation et le formalisme JAVA, je vais essayer d’illustrer mes propos avec mon code source :

    Dans ma classe MaClasseMain (mon main) je crée mes deux objets fenetre1 et fenetre2 qui instancie la même classe Fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    package monpackage.firsttry;
    public class MaClasseMain {
    	public static void main(String[] args) {
    		Fenetre fenetre1 = new Fenetre("See File",800, 550);
    		Fenetre fenetre2 = new Fenetre("Fonction", 600, 350);
    		fenetre1.setVisible(true);
    		fenetre2.setVisible(false);
    		//Ajout de la barre menue
    		fenetre1.ajoutMenu();
    	}
    }
    Voici le code de ma classe Fenêtre
    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
    package monpackage.firsttry;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    
    public class Fenetre extends JFrame {
    	public Fenetre(String nom, int largeur, int hauteur){
    		//On lui définit un titre
    		this.setTitle(nom);
    		//On définit sa taille : 400 pixels de large et 100 pixels de haut
    		this.setSize(largeur, hauteur);
    		//On positionne notre objet au centre
    		this.setLocationRelativeTo(null);
    		//Termine le processus lorsqu'on clique sur la croix rouge
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
    		//Empeche le redimensionnement
    		this.setResizable(false);
    		this.setResizable(false);
    		//Fenetre toujours au premier plan
    		this.setAlwaysOnTop(true);
    		this.setAlwaysOnTop(true);
    	}
    	public void ajoutMenu() {
    		//Instanciation d'un objet JMenuBar
    				JMenuBar barmenu = new JMenuBar();
    				//On prévient notre JFrame que notre MenuBar sera son MenuBar
    				this.setJMenuBar(barmenu);
    				
    				//Instanciation d'un objet JMenu - menu 1
    				JMenu menu1  = new JMenu();
    				barmenu.add(menu1);
    				menu1.setText("File");
    				
    				//Instanciation d'un objet JMenu - menu 2
    				JMenu menu2 = new JMenu();
    				barmenu.add(menu2);
    				menu2.setText("Charts");
    				
    				//Instanciation d'un objet JMenuItem - sousmenu 1
    					//1ier
    					JMenuItem sousmenu11 = new JMenuItem();
    					menu1.add(sousmenu11);
    					sousmenu11.setText("open");
    					//2ième
    					JMenuItem sousmenu12 = new JMenuItem();
    					menu1.add(sousmenu12);
    					sousmenu12.setText("save");
    					//3ième
    					JMenuItem sousmenu13 = new JMenuItem();
    					menu1.add(sousmenu13);
    					sousmenu13.setText("saveas");
    					//4ieme
    					JMenuItem sousmenu14 = new JMenuItem(new QuitterAction("Quitter"));
    					menu1.add(sousmenu14);
    					sousmenu14.setText("exit");	
    				//Instanciation d'un objet JMenuItem - sousmenu 2
    					//1ier
    			JMenuItem sousmenu21 = new JMenuItem(new NaviguerAction("Naviguer"));
    					menu2.add(sousmenu21);
    					sousmenu21.setText("y = F(x)");					
    }
    }
    Je mets en gras la partie où j’appelle ma classe NaviguerAction pour pouvoir capturer le clic.
    Et je finis pour le code de ma classe NaviguerAction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    package monpackage.firsttry;
    import java.awt.event.ActionEvent;
    import javax.swing.AbstractAction;
    public class NaviguerAction extends AbstractAction {
    	public NaviguerAction(String texte){
    		super(texte);
    	}
    	public void actionPerformed(ActionEvent e){
    		//fenetre1.setVisible(false);
    		//fenetre2.setVisible(true);
    //Je ne peux pas accéder à mes objets fenetre 1 et fenetre 2 pour faire basculer l'affichage des fenêtres
    	}
    }
    C’est ça que j’ai du mal à comprendre, en JAVA, c’est comme faire pour accéder à mes objets depuis une autre classe ?
    J’espère être asses claire dans mes explications n’hésitez pas à me poser des questions pour mieux comprendre.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le principe est toujours le même :

    1. Dans NavigerAction, tu as besoin de faire quelque chose sur
      • la seconde fenêtre à afficher
      • la première fenêtre à cacher

      Pour faire quelque chose sur un objet, il faut appeler une méthode de cet objet (ici setVisible()), donc tu as besoin d'une référence sur cet objet. Comment avoir cette référence ? En la passant en paramètre. En paramètre de quoi : soit de la méthode qui va faire ces "quelques choses", si cette méthode est invoquée par ton code, ce qui n'est pas le cas d'une action de menu (c'est SWING qui va le faire en réaction d'un clic, ou autre sur le menu). Donc il te faut la référence d'une autre manière : sous forme d'attribut de ta classe d'action par exemple. Comment faire pour l'avoir ? La passer au constructeur par 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
      public class NaviguerAction extends AbstractAction {
              
              private final Fenetre fenetre1;
              private final Fenetre fenetre2;
      
      	public NaviguerAction(String texte , Fenetre  fenetre1, Fenetre fenetre2){
      		super(texte);
                      this.fenetre1=fenetre1;
                      this.fenetre2=fenetre2;
      	}
      	public void actionPerformed(ActionEvent e){
      		//fenetre1.setVisible(false);
      		//fenetre2.setVisible(true);
      //Je ne peux pas accéder à mes objets fenetre 1 et fenetre 2 pour faire basculer l'affichage des fenêtres
      	}
      }
      maintenant tu peux avoir accès aux références des 2 fenêtres dans la méthode actionPerformed.
    2. Conséquence de cette modification :
      JMenuItem sousmenu21 = new JMenuItem(new NaviguerAction("Naviguer")); ne compile plus, parce qu'il y a 2 paramètres supplémentaires à passer... comment faire pour résoudre ce problème ? En passant les références de fenêtres, donc en les ayant dans des variables à cet endroit du code... comment les avoir ? On est justement dans le cas dont je parlais ci-avant : la méthode ajouterMenu() est invoquée par toi : tu peux donc ajouter des paramètres à cette méthode, et dans l'appel (dans la méthode main(), justement la méthode où tu crées les instances de fenêtres, donc à un endroit où tu as bien ces références) les passer... je te laisse continuer : normalement, tu dois pouvoir modifier le reste de ton programme maintenant...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 45
    Par défaut
    Merci beaucoup Joel pour ta réponse détaillé et rapide! Je suis arrivé à modifier mon code pour pouvoir basculer sur ma seconde fenêtre.

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

Discussions similaires

  1. Navigation entre 2 fenêtres
    Par heni86_2003 dans le forum C#
    Réponses: 2
    Dernier message: 12/04/2011, 16h00
  2. Navigation entre les fenêtres Qt
    Par dhay06 dans le forum Débuter
    Réponses: 4
    Dernier message: 31/01/2011, 22h51
  3. problème Navigation entre les pages de JSF
    Par zerocoolyoussef dans le forum JSF
    Réponses: 2
    Dernier message: 12/03/2009, 17h50
  4. Navigation entre deux fenêtres
    Par yannard dans le forum Flex
    Réponses: 5
    Dernier message: 26/05/2008, 18h19
  5. [Ergonomie] Optimiser la navigation entre mes pages web
    Par DBardel dans le forum Webdesign & Ergonomie
    Réponses: 8
    Dernier message: 17/01/2007, 11h53

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