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

 Java Discussion :

[Multi fenêtres] Revenir à une JFrame après création d'un JPanel


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Fullstack (Python)
    Inscrit en
    Janvier 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Fullstack (Python)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Par défaut [Multi fenêtres] Revenir à une JFrame après création d'un JPanel
    Bonjour tout le monde ,

    Je voudrais faire une application multi fenetres. Pour être plus explicite :

    Voici ma classe Menu.
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.border.Border;
    import javax.swing.border.LineBorder;
     
    public class Menu implements ActionListener {
     
    	String cal="";
    	int res=0;
    	JLabel lab_cal = new JLabel(cal);
    	JLabel lab_res = new JLabel("Résultat");
    	JFrame window = new JFrame("Compteur");
     
    	JButton btn_connect = new JButton("Connexion");
    	JButton btn_jouer = new JButton("Jouer");
    	JButton btn_quit = new JButton("Quitter");
    	private JTextField pseudo = new JTextField("Pseudo");
    	private JTextField mdp = new JTextField("Mot de passe");
    	private JLabel pseudo_af = new JLabel("Pseudo : ");
    	private JLabel mdp_af = new JLabel("Mot de passe : ");
    	Container container = window.getContentPane();
    	JPanel champs_connect = new JPanel(new GridLayout(3,2));
    	JPanel boutons_haut = new JPanel(new GridLayout(1,2));
     
    public Menu ()
    {
    	container.setLayout(new BorderLayout());
     
    	champs_connect.add(pseudo);
    	champs_connect.add(pseudo_af);
    	champs_connect.add(mdp);
    	champs_connect.add(mdp_af);
    	champs_connect.add(btn_connect);
    	container.add(champs_connect, BorderLayout.CENTER); 	
     
    	boutons_haut.add(btn_jouer);
    	boutons_haut.add(btn_quit);
    	container.add(boutons_haut, BorderLayout.NORTH);
     
    	btn_connect.addActionListener(this);
    	btn_jouer.addActionListener(new jouer());
    	btn_quit.addActionListener(this);
     
    	Border border = LineBorder.createGrayLineBorder();
    	window.setSize(800, 450);
    	window.setVisible(true);
    	window.setLocationRelativeTo(null);
    	window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
     
    private ActionListener quitter(ActionEvent e) {
    	// TODO Auto-generated method stub
     
    	return null;
    }
     
    public void actionPerformed(ActionEvent e)
    {
    Object source = e.getSource();
    if(e.getSource() == btn_quit)
    	System.exit(0);
     
    }
     
    class connect implements ActionListener {
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		container.validate();
    	}
    }
     
    class jouer implements ActionListener {
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		Jeu partie_jeu = new Jeu();
    		container.remove(boutons_haut);
    		container.remove(champs_connect);
    		container.add(partie_jeu);
    		int nb=0;
    		nb = partie_jeu.partie();
    if (nb==1)
    		{
    			container.remove(partie_jeu);
    		}
    		container.validate();
    	}
    }
     
    }
    Voici ma classe Jeu appellée lorsqu'on appuye sur le bouton jouer.

    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
     
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JPanel;
     
     
    public class Jeu extends JPanel implements ActionListener {
    	JButton btn_connect = new JButton("Revenir au Menu");
     
    private int tours_tot=2, tours=0;
    	public Jeu()
    	{
     
     
    	}
     
    	public int partie()
    	{
    		int i=0;
     
    		this.setLayout(new FlowLayout());
    		this.add(btn_connect);
    		btn_connect.addActionListener(this);
     
    		return tours;
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		// TODO Auto-generated method stub
     
    		Object source = e.getSource();
    		if(e.getSource() == btn_connect)
    			tours++;
     
    		System.out.println(tours);
    	}
     
     
     
    }

    En fait, ce que je souhaiterais c'est que je puisse interagir avec des boutons dans la classe Jeu et que je puisse revenir à l'écran d'accueil après.
    Auriez-vous des idées ?

    Merci à tous ceux qui pourront me conseiller parce que je n'ai rien trouvé sur ce sujet.^^

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Tu veux qu'en cliquant sur des boutons de la classe Menu,
    Il y ait un effet dans le JPanel Jeu ?

    si c'est le cas, il suffit de créer
    dans la classe Jeu les méthodes publiques qui seront appelées depuis Menu
    et mettre ta variable partie_jeu en variable de classe dans Menu

    après, pour appeler les méthodes :
    partie_jeu.laMéthode()
    à placer dans les boutons de Menu
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Par défaut
    Bonjour,

    Plein d'idées ^_^.

    1/ Ton écran accueil tu le rend setVisible(false) quand tu lances une fenêtre de jeu et quand tu cliques sur le bouton revenir à l'accueil tu inverses accueil visible et fenetre de jeu invisible et dans l'accueil un bouton revenir au jeu par exemple. Ainsi tu as toujours tes 2 fenêtres et en consommation mémoire sa ne doit pas se remarquer.

    2/ Si tu ne souhaites avoir qu'une fenêtre "vivante", une fois que tu lances le jeu tu stockes dans un endroit les infos que le premier menu possedait et quand tu reviens dans le menu tu passes les infos comme sa tu as un nouveau menu avec les infos du precedent.

    Cependant petite remarque: Pour une question de lisibilité tu devrais séparer les choses. Par exemple le jeu est un panel mais aussi un Listener c'est moche ^_^. Jeu est un panel et si tu as besoin d'un listener tu le créés à part

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Class ListenerBouton implement ActionListener {
    }
    Pareil pour ton menu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Menu extends JFrame{}
    class LanceMenu implements ActionListner{
    // dedans Menu menu = new Menu();
    }
    sa devrait être plus facile de s'y retrouver. Sans forcement l'appliquer à fond le principe du MVC séparer le modèle ( fonctions) de la vue (visuel) et des controleurs ( Listener) est un principe très sympathique pour la maintenance et la compréhension.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Fullstack (Python)
    Inscrit en
    Janvier 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Fullstack (Python)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Par défaut
    Merci pour les réponses.
    @Népomucène : En fait j'arrive bien à faire une action dans ce sens là puisque dans mon Main j'instancie une classe Menu. Donc pour créer ma classe Jeu héritée de JPanelje n'ai pas de difficulté. C'est pour passer des ma JPanel à ma JFrame.
    @XxArchangexX : Ta première solution me plait.
    En fait ce que tu me conseille de faire c'est d'instancier une classe controleur et à partir de celle-ci de créer deux fenêtres dont une seule sera visible à chaque fois.
    Mais si je crée deux fenêtres et que l'utilisateur redimensionne l'une d'entre elle, l'autre fenêtre ne sera pas redimensionnée ? Ou alors me conseilles-tu de créer deux JPanel et une seule JFrame et que je rende visible ou non les JPanel en fonction de ce que je veux faire ?

    Merci à vous deux en tous cas

  5. #5
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Par défaut
    Exactement un switcher de fenêtre Sur le second point je voyais plus la première idée, 2 Frames et le controleur alterne la visibilité des fenêtres. C'est comme sa que je prefère travailler.

    La deuxième idée 1 frame et 2 panel peux aussi le faire mais d'intuition sa promet d'être tordu sur le remove du panel puis remettre l'autre puis faire un refresh, quelqu'un te dira peut être que c'est mieux mais plus tordu que de gérer un booleen à false ou true ^_^°.

    Et sur le point de la taille, non si tu as une frame Accueil avec une taille 200-300 par exemple et une frame jeu 500-600 se sera 2 objets séparés donc si tu modifies la taille de l'un tu ne modifies pas l'autre.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Fullstack (Python)
    Inscrit en
    Janvier 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Fullstack (Python)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Par défaut
    Merci je vais essayer tout ça.^^

    Bonne soirée

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

Discussions similaires

  1. Condition d'affichage d'une div après création de la JSP
    Par tomy29 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 27/11/2012, 11h41
  2. trigger pour modifier une valeur après création du record
    Par awalter1 dans le forum Administration
    Réponses: 5
    Dernier message: 07/03/2011, 18h41
  3. Développement - Multi fenêtre dans une seule
    Par megamario dans le forum Débuter
    Réponses: 5
    Dernier message: 21/07/2010, 08h38
  4. Perte de focus d'une JFrame après un toFront()
    Par MonsieurSmith dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 16/01/2009, 10h38
  5. Réponses: 5
    Dernier message: 20/11/2005, 11h15

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