Meilleur façon d'enchaîner les fenetre dans une application JAVA
ajp55
Messages postés
482
Statut
Membre
-
ajp55 Messages postés 482 Statut Membre -
ajp55 Messages postés 482 Statut Membre -
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:
Dans ma classe qui étends JFrame, je me vois contraint d'instancier toutes ces classes
et quelque part dans le code, en fonction du menu cliqué, je fais un
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.
--
"L'ordinateur est une grande invention : il y a autant d'erreur qu'avant mais plus personne n'est responsable..."
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.
--
"L'ordinateur est une grande invention : il y a autant d'erreur qu'avant mais plus personne n'est responsable..."
1 réponse
-
'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 unCardLayout
(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'unnew CardLayout()
l'unique paramètre lors de la construction de ton (unqiue)JPanel
principal (variable nomméecards
par ex). Après, tu y ajoutes des sous-JPanel aveccards.add(<sous-JPanel>, <string d'identifiant>)
.
Et pour changer de "carte" affichée,CardLayout cl = (CardLayout)(cards.getLayout()); cl.show(cards, <string d'ID>);
-
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.
- 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.
-
-