Gestion de Panels dans une fenetre

Vincent B -  
silfaxu Messages postés 102 Statut Contributeur -
Bonjour à tous,

Joyeux Noel et bon réveillon. Apres avoir créer un menu dans une fenetre, j'attaque la programmation des actions de mon menu.

En utilisant le multifenetrage, je n'ai pas de probleme, mais si je veux utiliser différents panels dans la même fenetre, j'ai une exception qui se déclenche : NullPointerException. En d'autres termes il ne récupère aucun objet.

J'ai une Frame
Ensuite un Container
et au final deux GridLayout
le premier c'est pour le menu
le deuxième c'est pour recevoir les informations en fonction des actions du menu.

Au niveau du code, on obtient ceci :

JFrame choice=new Frame();
Container mode=choice.getContentPane();

// Première zone
GridLayout result=new GridLayout(1,1);
this.getContentPane().setLayout(result);

// Mise en place du menu
setMenuBar(new Sommaire());

// Deuxième zone
GridLayout vide=new GridLayout(3,1);
// ici devrait apparaitre les éléments correspondant au menu choisi
// si je ne me trompe pas
this.getContentPane().setLayout(vide);
setSize(800,600);

Mon problème et donc de savoir comment afficher au bon endroit les éléments correspondant au menu choisi ? Dois-je revoir toute ma disposition ?

Merci d'avance pour vos réponses,

Vincent B
A voir également:

1 réponse

silfaxu Messages postés 102 Statut Contributeur 11
 
Salut,

Un petit peu de théorie (!?!) avant de passer à la pratique et tu verras que ton problème se résoud très bien.
Une JFrame est composée d'un RootPane. Ce RootPane est lui-même composé de 4 éléments :
* GlassPane (caché par défaut : sert à faire des effets de transparence)
* Layered Pane (sert à gérer les deux éléments suivants)
* Content Pane
* (optional) Menu Bar (classe JMenuBar)

Tu vois donc que ta barre de menu est déjà gérée par ta JFrame. Ce n'est donc pas la peine de la rajouter dans un layout (ici ton GridLayout). Ensuite l'ajout de composants dans ton ContentPane est lié à la notion de hierarchie (et donc de composition) de composants. Par exemple :
* ContentPane
|--- JPanel (supposons avec un BoxLayout)
|--- JTextField
|--- JButton
ce petit schéma signifie que ton ContentPane est composé d'un JPanel qui contient lui-même un JTextField et un JButton ce qui donnerait comme code :

JPanel myPanel ;
JTextField myTextField ;
JButton myJButton ;

// création des composants
myPanel = new JPanel() ;
myTextField = new JTextField(20) ;
myButton = new JButton("OK") ;
// création du layout du panneau
myPanel.setLayout(new BoxLayout(myPanel,BoxLayout.X_AXIS)) ;
// ajout des composants dans le panneau
myPannel.add(myTextField) ;
myPannel.add(myButton) ;
// ajout du panneau dans le ContentPane
myFrame.getContentPane().add(myPanel) ;
// affiche la frame avec les composants
this.setVisible(true) ;

Pour revenir à ton problème, il est maintenant clair que les deux lignes :
// première zone
this.getContentPane().setLayout(result);
et
//Deuxième zone
this.getContentPane().setLayout(vide);

sont incompatibles ... en faisant ça, tu remplaces result par vide dans ton ContentPane ...
le mieux, c'est de faire un dessin à la main avec tes différents composants graphiques et de voir coment ils s'imbriquent les uns par rapport aux autres pour choisir le bon layout et ensuite il suffit de les ajouter dans les bons panneaux ...

J'espere que ça t'aidera ..

sfx

--------------------------------------------------
Bonnes Fêtes de Fin d'Année à Tous
0