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 :

Modification du ContentPane par un panel


Sujet :

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
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Par défaut Modification du ContentPane par un panel
    Bonjour, Je ne sait pas si ma question et très claire je vais donc la détailler.
    Pour, l'instant j'ai une class FennetreVar qui contient une JMenuBar :
    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
     
    public class FenetreVar extends JFrame implements ActionListener
    {  
        /** Constructeur */
        public FenetreVar()
        { 
     
            super();                                //Appel du constructeur de JFrame;  super("titre") pour mettre le titre
            this.setTitle("C&CAO");                             //titre de ma fenêtre
            this.setSize(1100,800);                             //taille de la fenêtre
            this.setResizable(false);                           // redimensionnement--> impossible de redimensionner
            this.setLocationRelativeTo(null);                   //Placement de la fenetre ---> au milieu de l'écran
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Si on clique sur la croix rouge --> ferme le programme
            this.setJMenuBar(this.creationBarreDeMenu());       //Ajout d'une barre de menu à ma fenêtre, donc EN HAUT
            this.setVisible(true);                              //Affiche la fenetre
        }
     
    public JMenuBar creationBarreDeMenu() 
        {
      // code menu
        }
    public void actionPerformed(ActionEvent e) 
        { 
            String action = e.getActionCommand();
            // Menu : Menu
            if (action.equals("Menu X"))
            {
               FenetreVar.add(PannelX()); 
            }
    }
    }
    Après je défini une Class Pannel par Panel que j'aurait a utiliser pour mes différente interface:
    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 PannelX extends Pannel
    {
        public PannelX()
        {
          /************************
           * Déclaration du pannel
           ************************/  
            JPanel panX = new JPanel();//Instanciation d'un objet JPanel
            panX.setBackground(Color.WHITE);//Définition de sa couleur de fond 
     
         /******************************
          * Définition du GridbagLayout 
          ******************************/
            panX.setLayout(new GridBagLayout());// On ajoute un gridbagLauout au panel      
            GridBagConstraints gc = new GridBagConstraints();  
            gc.weightx=3;                           // weightx définit le nombre de cases en abscisse   
            gc.weighty=8;                           // weighty définit le nombre de cases en ordonnée 
    }
    }
    Se que je veut faire c'est que lors de la sélection d'un menu dans la JMenuBar, le panel correspondant soit appeler.

    Comment je peut réaliser cela ??
    Merci

  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,

    Un panel ne s'appelle pas, il se place dans un conteneur, comme le content pane d'une JFrame par exemple, ou un autre panel. Tu peux le mettre dans le content pane de ta JFrame par frame.getContentPane().add(panel).

    Si tu veux qu'un panel s'affiche seulement à un moment donné, par exemple sur action d'un menu, tu peux :

    • soit l'ajouter au content pane à ce moment, mais il faudra veiller à retirer les autres composants qui auraient pu y être ajoutés avant ;
    • soit utiliser un CardLayout, ce qui te permet de superposer plusieurs panels, et d'en sélectionner un à afficher à un moment donné ;
    • soit l'ajouter dans un autre composant qui est lui même dans le content pane, à un emplacement prévu pour (par exemple en affectant un BorderLayout au panel mis dans le content pane, et en plaçant ton nouveau panel en BorderLayout.CENTER).
    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
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Par défaut
    Bonjour,
    Comment fonctionne le CardLayout ? (je ne trouve pas de tuto claire)
    Merci

  4. #4
    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
    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.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Par défaut
    J'avait regarder celui de michel DouDoux
    je vais m'intéresser au second .
    Merci

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Par défaut
    Bonjour,
    Merci pour Le CardLayout je ne comprendre pas encore très bien comment sa fonctionne, mais je croit que sa va résoudre mon problème lorsque je saurait l'utiliser.

  7. #7
    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
    Voici un exemple de principe si tu veux : j'y affiche 2 panels différents 1 & 2, plus un panel vide pour l'état "par défaut", quand aucun des 2 panels ne doit être affiché.

    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
    package demo;
     
    import java.awt.BorderLayout;
    import java.awt.CardLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
     
    public class DemoCardLayout {
     
    	private static final String PANEL_DEFAULT_ID = "default";
    	private static final String PANEL_1_ID = "1";
    	private static final String PANEL_2_ID = "2";
     
    	public static void main(String[] args) {
    		new DemoCardLayout().run();
    	}
     
    	public DemoCardLayout() { 
    	}
     
    	public void run() {
     
    		// on créé une fenêtre 
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.getContentPane().setLayout(new BorderLayout());
     
    		// on créé un panel principal dans lequel on aura trois panels dont 1 seul est affiché à la fois
    		// le panel principal = le panel avec CardLayout
    		JPanel mainPanel = new JPanel();
    		CardLayout cardLayout = new CardLayout();
    		mainPanel.setLayout(cardLayout);
     
    		// on créé les trois (sous-) panels
    		JPanel defaultPanel = new JPanel(); 
    		JPanel panel1 = createPanel("PANEL 1", Color.CYAN); 
    		JPanel panel2 = createPanel("PANEL 2", Color.ORANGE); 
     
    		// on ajoute les 3 panels, en associant à chacun d'eux un identifiant unique dans le panel principal
    		mainPanel.add(defaultPanel, PANEL_DEFAULT_ID); // le premier panel ajouté sera affiché par défaut
    		mainPanel.add(panel1, PANEL_1_ID);
    		mainPanel.add(panel2, PANEL_2_ID);
     
    		// on ajoute le panel principal au content pane de la fenêtre
    		frame.getContentPane().add(mainPanel); 
     
    		// on crée un unique menu qui aura un item pour afficher chaque panel
    		JMenuBar menuBar = new JMenuBar();
    		frame.setJMenuBar(menuBar);
    		JMenu menu = new JMenu("Affichage");
    		menuBar.add(menu);
     
    		// les menu item pour afficher chaque panel
    		createMenu(menu, new CardLayoutPanelSelector(mainPanel,cardLayout, PANEL_1_ID), "Afficher panel 1")	;	
    		createMenu(menu, new CardLayoutPanelSelector(mainPanel,cardLayout, PANEL_2_ID), "Afficher panel 2")	;	
    		createMenu(menu, new CardLayoutPanelSelector(mainPanel,cardLayout, PANEL_DEFAULT_ID), "Revenir à l'état initial")	;	
     
    		// on affiche la fenêtre
    		//frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
    		frame.setSize(200,200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private void createMenu(JMenu menu,  CardLayoutPanelSelector cardLayoutPanelSelector,
    			String menuLabel) {
     
    		JMenuItem menuItem = new JMenuItem(menuLabel);
    		menu.add(menuItem);
    		menuItem.addActionListener( cardLayoutPanelSelector );
     
    	}
     
    	private JPanel createPanel(String name, Color bg) {
    		JPanel panel = new JPanel();
    		panel.setLayout(new BorderLayout());
    		panel.add(new JLabel(name, JLabel.CENTER), BorderLayout.CENTER); // on affiche le nom du panel en son centre
    		panel.setBackground(bg);
    		return panel;
    	}
     
    	/**
             * Une classe pour gérer l'affichage d'un panel sur action
             */
    	private class CardLayoutPanelSelector implements ActionListener {
     
    		private Container parent;
    		private CardLayout cardLayout;
    		private String panelId;
     
    		/**
                     * 
                     * @param parent le container qui contient les panels à afficher
                     * @param cardLayout le composant de layout
                     * @param panelId l'identifiant du panel à afficher quand l'action est déclenchée
                     */
    		public CardLayoutPanelSelector(Container parent, CardLayout cardLayout, String panelId) { 
    			this.parent=parent;
    			this.cardLayout=cardLayout;
    			this.panelId=panelId;
    		}
     
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			cardLayout.show(parent, panelId);  // on demande l'affichage du panel d'identifiant panelId dans le CardLayout
    		}
     
    	}
     
    }
    Fichiers attachés Fichiers attachés
    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.

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 15/09/2010, 17h45
  2. Modification du shell par défaut sous Linux
    Par see++ dans le forum Général Python
    Réponses: 2
    Dernier message: 03/03/2007, 08h15
  3. Réponses: 2
    Dernier message: 05/02/2007, 17h09
  4. modifications de données par lot
    Par pracolas dans le forum Access
    Réponses: 16
    Dernier message: 03/02/2007, 13h13
  5. Modification de pages par un formulaire
    Par Bluespike62 dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2006, 17h21

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