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 :

Comment afficher des JPanels dans ma fenêtre principale JFrame en fonction du menu choisi?


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Février 2007
    Messages : 236
    Points : 127
    Points
    127
    Par défaut Comment afficher des JPanels dans ma fenêtre principale JFrame en fonction du menu choisi?
    Bonjour,
    Je réalise une application qui contient plusieurs fenêtres. Afin d'éviter de coder le menu dans chaque fenêtre de l'application, j'ai réalisé une fenêtre principale JFrame qui contient le menu, et le contenu de chaque fenêtre dans des JPanels. Je voudrais savoir comment afficher les JPanels dans la fenêtre principale a chaque fois que je fais un choix dans le menu? J'espère avoir clairement exposé mon problème.
    Merci

  2. #2
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    salut.
    à chaque appuis sur un menu, tu exécute ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    taFenetre.getContentPane().removeAll();
    taFenetre.getContentPane().add(ton_panneau);
    taFenetre.getContentPane().revalidate();

  3. #3
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Tu peux aussi utiliser un CardLayout. Tu associe tous tes panels au layout et tu n'a plus qu'à lui demander dynamiquement d'afficher tel ou tel container...
    C'est très simple d'utilisation et très efficace.

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Février 2007
    Messages : 236
    Points : 127
    Points
    127
    Par défaut
    Bonjour ,
    Merci pour vos réponses, ça marche comme je le souhaite. Cependant, j'ai eu un petit souci avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    taFenetre.getContentPane().removeAll();
    taFenetre.getContentPane().add(ton_panneau);
    taFenetre.getContentPane().revalidate();
    En effet, lorsque j'appelle un nouveau panel et que j'y met la souris, j'ai des traces du panel précédemment appeler. Et puis il me semble que c'est taFenetre.getContentPane().validate() en lieu et place de taFenetre.getContentPane().revalidate(). J'ai donc réadapté avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    taFenetre.getContentPane().removeAll();
    this.getContentPane().hide();
    taFenetre.getContentPane().add(ton_panneau);
    this.getContentPane().show();
    taFenetre.getContentPane().validate();
    Je ne sais pas si propre de faire ça, mais ça marche bien. Vous pouvez toujours me dire ce que vous en penser, je me ferais même un plaisir de vous lire

  5. #5
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    validate() c'est pour AWT, et revalidate() pour Swing.

    Les traces de la fenêtre appelée viennent probablement du fait que ton composant n'est pas redessiné correctement. Fait un repaint() pour t'assurer
    de sa cohérence graphique. Tes hide() et show() sont dépréciées (-> setVisible(boolean)). Ces méthodes engendre un ré-affichage graphique du composant, un repaint() est suffisant.

    Voici un exemple (Swing) :
    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
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Fenetre extends JFrame implements ActionListener {
     
    	private JButton btn1;
    	private JButton btn2;
    	private JPanel panel1;
    	private JPanel panel2;
     
    	public static void main(String[] args) {		
    		Fenetre fenetre = new Fenetre();
    		fenetre.pack();
    		fenetre.setLocationRelativeTo(null);
    		fenetre.setVisible(true);
    	}
     
    	public Fenetre() {
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
     
    		this.panel1 = new JPanel(new GridBagLayout());
    		this.panel1.setPreferredSize(new Dimension(300, 300));
    		this.panel1.setBackground(Color.GREEN);
    		this.btn1 = new JButton("swap to panel 2");
    		this.btn1.addActionListener(this);
    		this.panel1.add(this.btn1);
     
    		this.panel2 = new JPanel(new GridBagLayout());
    		this.panel2.setPreferredSize(new Dimension(300, 300));
    		this.panel2.setBackground(Color.RED);
    		this.btn2 = new JButton("swap to panel 1");
    		this.btn2.addActionListener(this);
    		this.panel2.add(this.btn2);
     
    		getContentPane().add(this.panel2);
    	}
     
    	public void swap(JPanel newContainer) {
    		// récupère le contentpane, par défaut c'est un JPanel
    		JPanel content = (JPanel) getContentPane();
    		// on lui enlève tous ses composants
    		content.removeAll();
    		// on lui ajoute le nouveau conteneur
    		content.add(newContainer);
    		// il n'est plus valide car on a supprimer/ajouté
    		// des composants, alors on lui demande d'en tenir compte
    		content.revalidate();
    		// on redessine le conteneur pour être certain
    		// d'être graphiquement cohérent
    		content.repaint();
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource() == this.btn1) {
    			swap(this.panel2);
    		} else if (e.getSource() == this.btn2) {
    			swap(this.panel1);
    		}		
    	}
     
    }

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Février 2007
    Messages : 236
    Points : 127
    Points
    127
    Par défaut
    Trop fort !!!
    Je pense ne plus avoir de point d'ombre concernant le sujet. Grand Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/02/2007, 12h15
  2. Réponses: 4
    Dernier message: 26/01/2007, 07h39
  3. Réponses: 17
    Dernier message: 22/09/2006, 17h34
  4. Réponses: 1
    Dernier message: 19/07/2006, 12h47
  5. Comment afficher des JPEG dans une application Delphi ?
    Par Bouguennec dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2005, 21h18

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