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

Agents de placement/Fenêtres Java Discussion :

Actualisé une JFrame par une autre.


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Actualisé une JFrame par une autre.
    Bonjour à tous!

    Je suis débutant en interface graphique et j'ai un petit problème...

    J'ai plusieurs vue differentes et j'aimerais que lorsque je clique sur un bouton de la premiere vue la fenetre change et que la deuxieme vue apparaisse a la place de la premiere.

    Pour l'instant je n'ai pas trouve mieux que ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    frame1.setVisible(false);
    Majframe fen = new Majframe();
    fen.setVisible(true);
    Le problème est que c'est une nouvelle fenetre qui s'ouvre meme si l'autre disparait cela me pose pas mal de probleme (retour a la taille et la position initiale et surtout lag un peu ce qui rand pas super...)

    J'ai donc essayé de créer une méthode que j'ai mis dans la classe Majframe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public void changeFenetre (JFrame f)
    	{
    		this.removeAll();
    		Container c1 = getContentPane();
    		Container c2 = f.getContentPane();
    		c1 = c2;
    	}
    Mais cela ne rend pas du tout le resultat escompté (cela bug completement...)
    Quelqu'un voit-il une solution?
    Je lui en serait très reconnaissant en tout cas...

    Merci a tous ceux qui auront pris la peine de lire ce message et un encore plus grand à ceux qui m'aideront!!

  2. #2
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Tu peux plus simplement créer une seule JFrame et créer plusieurs JPanel, chacun correspondant à une de tes vues. Ensuite, quand tu veux changer de vue, tu fais simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SwingUtilitis.invokeLater(new Runnable() {
    public void run() {
    maJFrame.setContentPane(monPanel);
    });
    Je ne suis pas sur que l'injection dans l'edt soit nécessaire, mais je pense que c'est préférable en tout cas. Bonne chance.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Merci!
    Merci beaucoup!

    Effectivement ca m'a fait beaucoup avancé (au niveau de l'affichage c'est bon maintenant il n'y a plus photo avec avant!!).

    J'ai fait comme tu m'a dit puis je me suis appercu qu'il y avait en fait encore plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	public void changeFenetre (JFrame f)
    	{
    		this.setContentPane(f.getContentPane());
    	}


    Cependant j'ai tout de meme un petit probleme car contrairement au bidouillage que je faisais pour rendre la premiere fenetre invisible et faire apparaitre la seconde, ici il n'y a que l'affichage qui change... Ma fenetre 1 reste ma fenetre meme si elle s'affiche en la fenetre 2 du coup lorsque je clique sur le bouton de la fenetre1 ca marche parfait mais ensuite si je reclique sur un bouton de la fenetre avec le nouvel affichage la plus rien ne marche...

    En fait je voudrais que la premiere fenetre deviennent vraiment la seconde...
    J'ai essayé this = f mais comme je m'en doutais ca ne marche pas...Pourtant c'est vraiment cela que je veux...
    Je sens que j'y suis presque...

    Si quelqu'un voit...

    Encore merci en tout cas!

  4. #4
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Mais justement, le code que je t'ai donné devrait t'éviter de changer de JFrame, alors pourquoi veux tu absolument en changer ? Que veux tu clairement faire ? Merci.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Points : 308
    Points
    308
    Par défaut
    Salut,

    je pense que la seul chose que tu est a faire c'est d'avoir un paramètre qui stock le panel qui est affiché et lorsque tu click sur ton bouton en fonction de la valeur de se paramettre tu réajit de la bonne manière (suivant si c'est panel 1 ou panel 2 qui est affiché)

    ++

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    C'est normal que tu ne comprennes pas je me suis mal exprimé...Désolé.

    En fait je pensais ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    frame1.setVisible(false);
    Majframe fen = new Majframe();
    fen.setVisible(true);
    Serait pour mon programme strictement equivalent a celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public void changeFenetre (JFrame f)
    	{
    		this.setContentPane(f.getContentPane());
    	}
     
    frame1.changeFenetre(new MaJframe());
    Or ce n'est pas le cas car en fait mon constructeur MaJframe prend des argument en parametres du coup ca fait buggé mon programme qui compte deja pret de 40 classes...(assez longues) du coup j'ai guere envie de tout remodifier...

    Pour etre précis je cherche un code qui soit stictement equivalent au premier code que j'ai mis plus haut ou l'on recrée une nouvelle fenêtre à la difference que je voudrais que l'utilisateur ne s'appercoit pas du "bidouillage" c'est a dire que s'il a déplacé la fenetre par exemple elle ne se remette pas a la place d'origine lorsqu'il va cliquer sur un bouton...(et surtout que ca ne laggue pas comme c'est le cas lorsqu'on utilise cette méthode...).

    J'espere avoir été assez clair...
    Ne maitrisant pas les interfaces graphiques, c'est assez difficile à expliquer...

    Merci pour votre aide en tout cas c'est vraiment sympa

  7. #7
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    La création d'une fenêtre est longue et gourmande en ressource, alors à moins de faire patienter l'utiliser avec une petite animation en GlassPane je ne vois pas. Je te conseil vivement d'utiliser des JPanels et une seule JFrame, car la ton programme va bouffer pas mal de RAM. Après , c'est toi qui voit . Bonne chance en tout cas.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    Avec un exemple, c'est peut-être plus parlant

    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 class window{
    protected JPanel panel1;
    protected JPanel panel2;
     
    /**Constructor*/
    public window{
       panel1 = new JPanel();
       panel2 = new JPanel();
    getContentPane().add(panel1)
    }
     
    /**Method to change panel 1 to 2*/
    public void switchPanel(){
       getContentPane().removeAll();
       getContentPane().add(panel2);
       validate()
    }
     
    }
    Bon courage

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci a vous c'est vraiment sympa...

    Cependant j'ai toujours un bug, je m'explique :
    Que ce soit avec les JPanel ou la modification des conteuneur principaux ca rend le meme resultat : lorsque je clique sur le bouton de la premiere fenetre la premiere fenetre se "transforme" bien en la seconde mais lorsque je clique sur le bouton de la deuxieme fenetre la ca ne va plus vers la troisieme fenetre (il y en a 40 comme ca) et ca bug...
    Pourtant lorsque je faisais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    frame1.setVisible(false);
    MaJFrame fen = new MaJFrame(arg1);
    fen.setVisible(true);
    ca marchait...

    Desormais je met ça à la place:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaJframe f = new MaJFrame (arg1);
    frame1.updateFenetre(f);
    frame1.setContentPane(f.getContentPane());
    Et je ne comprend vraiment pas pourquoi ces deux codes ne sont pas equivalents (a la difference biensur que le premier ouvre dans une nouvelle fenetre en rendant la premiere invisible alors que le second serait censé donné le meme résultat que la premiere mais en restant dans la meme fenetre.

    A noté que la méthode updateFenetre remplace tous les parametre de la MaJframe dans laquelle on est pas tous les parametre de la Majframe f définit ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public void updateFenetre (MajFrame f)
    	{
    		param1 = f.getParam1();
    		param2 = f.getParam2();
    		param3= f.getParam3();
                 }
    Ma question est donc : pourquoi le premier code donné agit pour toutes les fenetres alors que le second ne le fait pas?
    (je trouve ca icompréhensible...)

    C'est le dernier petit bug dans mon programme j'espere arriver a le resoudre...
    Merci pour l'aide en tout cas...

    (Ps : mon message est-il compréhensible? )

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Quelqu'un voit il juste pourquoi les deux premiers code ne sont pas equivalents?

    Si oui y a t il un moyen de rendre le second equivalent au premier? Ca fait maintenant 4H que je suis dessus et je vois vraiment pas...

    J'ai essayé en passant par des JPanels comme vous m'avez conseillé mais j'ai exactement le même problème!

  11. #11
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Mais tu crées toujours une nouvelle fenêtre là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaJframe f = new MaJFrame (arg1);
    frame1.updateFenetre(f);
    frame1.setContentPane(f.getContentPane());
    Tu t'emmerdes avec du code inutile, tu crées une fenetre pour lui mettre en contentpane le content pane d'une autre , je comprend vraiment pas. De plus, à quoi sert la méthode updateFenetre(f) ? Que sont ces "param" ?
    Pour que ça marche, il faut que tu gères les boutons qui te permettent de changer de vue, montre nous le code de la méthode actionListener s'il te plait.
    Merci.

Discussions similaires

  1. [JFrame] Basculer une JFrame sur un autre écran
    Par rno38 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 15/09/2009, 11h49
  2. Réponses: 2
    Dernier message: 18/06/2009, 15h09
  3. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47

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