Meilleur façon d'enchaîner les fenetre dans une application JAVA

Fermé
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 - 17 févr. 2015 à 10:54
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 - 17 févr. 2015 à 11:47
Bonjour,
Je suis débutant en java et j'ai de la peine à comprendre l'enchaînement des fenetre (ou du moins le setContentPane d'une fenetre).
En effet, j'ai plusieurs JPanel et qui affichent différents contenu en fonction du menu cliqué. Le problème, c'est que, je me vois souvent obligé d'instancier toute les autres classe JPanel dans la meme classe Fenetre.
Pour etre plus précis, voici un exemple:

public JPanel1 extends JPanel {} // dans un fichier JPanel1.java
public JPanel2 extends JPanel {} // dans un fichier JPanel2.java
public JPanel3 extends JPanel {} // dans un fichier JPanel3.java

Dans ma classe qui étends JFrame, je me vois contraint d'instancier toutes ces classes

public MaFenetre extends JFrame{
private JPanel1 pane1;
private JPanel2 pane2;
private JPanel3 pane3;

et quelque part dans le code, en fonction du menu cliqué, je fais un

setContentPane(pane1) ou setContentPane(pane2) our setContentPane(3)

Jusque là, ça l'air de bien marché, mais je me pose toujours la question si c'est la meilleur façon d'enchaîner le contenu d'une fenetre qui varie au clic d'un menu.
Merci d'avance pour vos réponses.



A voir également:

1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
17 févr. 2015 à 11:02
'lut, ici
setContentPane
va remplacer le JPanel parent de tout le contenu de ta Frame, autrement dit changer entièrement de hiérarchie de contrôles. Si c'est ce que tu souhaites vraiment faire, alors ils n'y a pas de problème avec le fait de s'en servir.

Ceci dit, il est préférable d'utiliser un
CardLayout
(tuto Oracle en anglais), qui au lieu de remplacer vraiment son contenu va changer celui affiché, donc tous les contrôles seront initialisés complètement avant leur affichage.
Pour s'en servir, c'est simple: faire d'un
new CardLayout()
l'unique paramètre lors de la construction de ton (unqiue)
JPanel
principal (variable nommée
cards
par ex). Après, tu y ajoutes des sous-JPanel avec
cards.add(<sous-JPanel>, <string d'identifiant>)
.
Et pour changer de "carte" affichée,
CardLayout cl = (CardLayout)(cards.getLayout());
cl.show(cards, <string d'ID>);
0
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 23
17 févr. 2015 à 11:31
Je vais essayé cette méthode,
Mais l'idée, c'est d'utiliser moins de ressource que possible, le fait de chargé tous les contrôle dès le debut ne causera t-il pas de problème d'ergonomie??
Puisqu'avec le CardLayout,
tous les contrôle sont initialisés avant leur affichage.
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228 > ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015
17 févr. 2015 à 11:38
J'ai dit initialisés, pas affichés ;) Donc pas de problème avec l'ergonomie. Quant aux ressources utilisées, la différence est quasi-nulle: dans les 2 cas tes contrôles sont en mémoire -- dans un cas pas visibles et donc peut-être pas mis en cache graphique, mais ça dépend de l'implémentation Swing utilisée.
0
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 23
17 févr. 2015 à 11:47
okay, merci.
Je vais laisser le sujet ouvert, pour tout autre suggestion.
Le titre dit bien, la meilleure facon, donc, si quelq'un à une autre proposition, je vais aussi l'explorer.
0