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 :

JFrame et plusieurs JPanel


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 89
    Points
    89
    Par défaut JFrame et plusieurs JPanel
    Bonjour à tous,

    J'aimerais savoir quelles solutions adoptées pour que dans le cadre où une JFrame possède plusieurs JPanels chaque JPannel puisse se connaitre.
    Le but étant que lorsque je valide une option sur un JPanel je sois rediriger vers un autre JPanel.

    Dans mon exemple, lorsque je clique sur le bouton "update" j'aimerais être redirigé du View_ vers View__

    Si vous avez des solutions je suis preneur.

    Merci


    JFrame :
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    package com.moi.observ;
     
    import java.awt.BorderLayout;
    import java.awt.CardLayout;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.SwingConstants;
     
    public class MyFrame extends JFrame {
    //public class MyFrame {	
    	private JMenuBar menuBar;
    	public AbstractJPanel view_;
    	public AbstractJPanel view__;
     
    	private Controler controler;
     
    	public MyFrame(Controler controler) {
    		this.controler = controler;
    		initFrame();
    		initMenu();
    		initView(controler);
    	}
     
    	public void initFrame() {
    		this.setTitle("Un test");
    		this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
     
    		menuBar = new JMenuBar();
     
    		this.setJMenuBar( menuBar );
    		this.setPreferredSize( new Dimension(300, 300) );
    		this.setResizable( false );
    	}
     
    	public void initView(Controler controler) {
    	    view_ = new View_( controler );
    		view__ = new View__( controler );
     
            //On initialise la frame avec le panel View_.
            setContentPane(view_);
     
            /* La vue observera le modèle */
    		controler.getModel().addObserver(view_);
    		controler.getModel().addObserver(view__);
    	}
     
    	public void display() {
    		this.pack();
    		this.setVisible(true);
    	}
     
    	public AbstractJPanel getView_() {
    		return view_;
    	}
     
    	public AbstractJPanel getView__() {
    		return view__;
    	}
     
    	public void initMenu() {  
     
    		JMenuItem exit;  
    		String items[] = { "Update ...", "Open ...", "Save ..." };  
    		char itemMnemonics[] = { 'U', 'O', 'C', 'E' };  
    		String iconFile[] = { "new.gif", "open.gif", "save.gif" };  
    		Icon icons[];  
     
    		JMenu fileMenu = new JMenu("File");  
    		JMenuItem menuItems[] = new JMenuItem[3];  
    		final JLabel display = new JLabel("Waiting for Event...", SwingConstants.CENTER); //Display JLabel in the Center  
     
    		fileMenu.setMnemonic('F'); //Add mnemonic on the JMenu "File"  
    		menuBar.add(fileMenu); //Adding the JMenu to JMenuBar  
     
    		//Constructing 3 JMenuItem using "for loop"  
    		for(int count=0; count<menuItems.length; count++) {  
    			menuItems[count] = new JMenuItem(items[count],new ImageIcon(iconFile[count])); //Constructing JMenuItem with the Specified String menus and icons  
    			menuItems[count].setMnemonic(itemMnemonics[count]); //Adding mnemonics on JMenuItem  
    			fileMenu.add(menuItems[count]); //Add JMenuItem on JMenu  
    		}  
     
    		fileMenu.addSeparator(); //Creating a separator to separate exit from New, Open, and Close  
     
    		exit = new JMenuItem("Exit ..."); //Constructing JMenuItem "Exit"  
    		exit.setMnemonic('E'); //Set JMenuItem "Exit" Mnemonic  
    		fileMenu.add(exit); //Adding JMenuItem "Exit" to JMenu  
     
    		//Setting up the container ready for the components to be added.  
    	    Container pane = getContentPane();  
    	    setContentPane(pane);  
     
    	    //Implementing Event Listener on JMenuItem[0] which is "New"  
    	    menuItems[0].addActionListener(	new ActionListener() {  
    	    	public void actionPerformed(ActionEvent event) {  
    	    		display.setText("New Item Menu is Selected");
    	    		if ( view_ == null)  { 
    	    			view_ = new View_(controler);
    	    		}
    	    		setContentPane(view_);
    	    		revalidate();
    	    	}
    	    });  
     
    	    //Implementing Event Listener on JMenuItem[1] which is "Open"  
    	    menuItems[1].addActionListener( new ActionListener() {  
    	    	public void actionPerformed(ActionEvent event) {  
    	    		display.setText("Open Item Menu is Selected");
    	    		if ( view__ == null)  { 
    	    			view__ = new View__(controler);
    	    		}
    	    		setContentPane(view__);
    	    		revalidate();
    	    	}
    	    }); 
     
    	    //Implementing Event Listener on JMenuItem[2] which is "Save"  
    	    menuItems[2].addActionListener( new ActionListener() {  
    	    	public void actionPerformed(ActionEvent event) {  
    	    		display.setText("Save Item Menu is Selected");
    	    	}  
    	    });  
     
    	    //Implementing Event Listener on JMenuItem exit  
    	    exit.addActionListener( new ActionListener() {  
    	    	public void actionPerformed(ActionEvent event) {  
    	    		System.exit(0); //Exit the Application  
    	    	}  
    	    });  
     
    	    //Add JLabel display in the container  
    	    //pane.add(display, BorderLayout.CENTER);  
    	}
    }
    View_:
    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
     
    package com.moi.observ;
     
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Observable;
    import java.util.Observer;
     
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    /* On implémente l'interface Observer */
    public class View_ extends AbstractJPanel {
     
    	private JButton bouton;
    	private JTextField texte;
    	private JLabel etiquette;
     
    	public View_(Controler controler) {
    		super(controler);
    		initView();
    	}
     
    	public void initView() {
    		this.setName("update");
    		bouton = new JButton("Update");
    		bouton.setActionCommand("update");
    		bouton.addActionListener( new MyListener() );
    		texte = new JTextField(25);
    		etiquette = new JLabel("Zero");
     
    		this.setLayout( new BorderLayout() );
    		this.add( etiquette,BorderLayout.NORTH );
    		this.add( texte,BorderLayout.CENTER );
    		this.add( bouton,BorderLayout.SOUTH );
    	}
     
    	public void updateEtiquette() {
    		etiquette.setText(controler.getModel().getChaine());
    	}
     
    	public String getTexteTape() {
    		return texte.getText();
    	}
     
    	class MyListener implements ActionListener{
    		public void actionPerformed(ActionEvent e) {
    			//On affiche le chiffre en plus dans le label
    			controler.setText( getTexteTape() );
    			getRootPane().getParent();
    		}               
    	}
     
    	/* Méthode de l'interface Observer */
    	public void update(Observable o, Object arg) {
    		updateEtiquette();
    	}
    }
    View__:
    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
     
    package com.moi.observ;
     
    import java.awt.BorderLayout;
    import java.util.Observable;
    import java.util.Observer;
     
    import javax.swing.JLabel;
     
    /* On implémente l'interface Observer */
    public class View__ extends AbstractJPanel {
     
    	private JLabel etiquette;
    	private JLabel etiquette1;
    	private JLabel etiquette2;
     
    	public View__(Controler controler) {
    		super(controler);
    		initView();
    	}
     
    	public void initView() {
    		this.setName("open");
    		etiquette = new JLabel("Default");
    		etiquette1 = new JLabel("Default1");
    		etiquette2 = new JLabel(controler.getModel().getChaine());
     
    		this.setLayout(new BorderLayout());
    		this.add(etiquette,BorderLayout.NORTH);
    		this.add(etiquette1,BorderLayout.CENTER);
    		this.add(etiquette2,BorderLayout.SOUTH);
    	}
     
    	/* Méthode de l'interface Observer */
    	public void update(Observable o, Object arg) {
    		updateEtiquette();
    	}
     
    	public void updateEtiquette() {
    		etiquette.setText(controler.getModel().getChaine());
    	}
    }

  2. #2
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    Bonjour, il suffirait de créer events pour chaque JPanel, la JFrame étant en écoute sur ces JPanels.
    L'action voulue dans le panel déclenche l'event et suivant l’événement intercepté par la frame le CardLayout est géré comme il faut.
    Je sais pas si c'est vraiment clair

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 89
    Points
    89
    Par défaut
    Merci pour ta réponse.

    J'ai compris mais l'implémenetation me pose un problème.
    Pourrais tu me donner un exmple de code ou modifier mon code en conséquence.

    Merci

  4. #4
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    Citation Envoyé par yaya0057 Voir le message
    Merci pour ta réponse.

    J'ai compris mais l'implémenetation me pose un problème.
    Pourrais tu me donner un exmple de code ou modifier mon code en conséquence.

    Merci
    Je peux te donner un exemple, peux tu juste me préciser qu'est ce que Controler ?

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Points : 126
    Points
    126
    Par défaut
    Salut, (ce message est un copier-coller d'un de mes précédents messages. Je l'ai juste un peu modifié pour que ça corresponde plus ou moins avec ta question)

    Je te conseille d'utiliser un CardLayout. C'est très simple à utiliser et ça te permet de superposer autant de JPanel que tu veux et tu peux passer de l'un à l'autre sois en une ligne de code ou par avec des actionListener.

    Voila comment l'utiliser:

    Il faut commencer par déclarer le layout (contrairement aux autres) et de créer une petite liste qui regroupe tous tes panels puis créer un JPanel conteneur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public CardLayout cl = new CardLayout();
    String [] listContent = {"panel1", "panel2", "panel3"};
    public JPanel content = new JPanel();
    Ensuite tu assigne "cl" comme layout à "content":

    Et pour finir tu ajoutes tes composants en précisant à quelle "couche" il se trouve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    content.add(panel1, listContent[0]);
    content.add(panel2, listContent[1]);
    content.add(panel3, listContent[2]);
    "listContent[0]" signifie que le composant ajouté sera en haut de la pile et donc sera visible par défaut.

    Et pour finir, pour changer de panel tu as juste à entrer cette ligne avec le numéro de la couche de ton choix:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cl.show(content, listContent[0]);
    Bien-sur tu peux l'utiliser n'importe où (ou presque^^) mais le plus souvent elle est entrée dans un actionListener.
    Dans ton cas tu utilises un bouton, tu n'aura juste à ajouter ceci pour que ton bouton te redirige vers le panel de ton choix:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <NomDeTonBouton>.addActionListener(new ActionListener() {
    	public void actionPerformed(ActionEvent event){
    		cl.show(content, listContent[1]); //Tu met entre crochets le numéro du panel sur lequel tu veux être redirigé comme je l'ai expliqué plus haut.
    	}
     
    });
    J'ai donc remarqué que tu te compliques beaucoup la vie pour faire ce que tu souhaites. Avec un CardLayout bien géré ce sera bien plus simple! (Je me suis d'abord demandé pourquoi tu l'avais importé alors que tu ne t'en sert pas dans ta class qui s'occupe de la JFrame.)

    Voila j'espère que ça t'a aidé!

Discussions similaires

  1. Jongler entre plusieurs JPanels avec une seule JFrame
    Par joejoe230 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 14/02/2008, 13h16
  2. Pb organisation plusieurs Jpanels ds Jframe
    Par rantanplan08 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 10/12/2007, 21h15
  3. Positionner précisement plusieurs JPanel dans une JFrame.
    Par RadicalBob dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 13/06/2006, 22h42
  4. [JFrame] ajout de plusieurs JPanel
    Par illegalsene dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 06/04/2005, 00h11
  5. [JFrame] réafficher plusieurs fois un même panel à l'écran
    Par Monkeyget dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 01/04/2005, 14h29

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