OVH Cloud OVH Cloud

Récupérer le nom d'une carte dans un CardLayout

5 réponses
Avatar
Thibaut Desmarest
bonjour à tous,

Voilà mon problème : J'ai un panneau à onglets (JTabbedPane) pour lequel
je met dans chaque nouvel onglet un JPanel organisé selon un CardLayout.
Or, j'aimerais que le titre de l'onglet se mette à jour en prenant le
"nom" de la carte qui est affichée dans cet onglet. Par exemple, si la
carte qui est affichée dans l'onglet 1 est la carte "Accueil", j'aimerai
que mon onglet prenne "Accueil" pour titre.

Celà permet de naviguer plus facilement car on sait ce que contient
chaque onglet. Pour l'instant j'ai écrit ceci :

panneauAOnglets.setTitleAt(panneauAOnglets.getSelectedIndex(),***);

Là où il y'à les *** il me manque un String. Je n'arrive pas à récupérer
le nom de la carte qui est affichée car la classe CardLayout ne possède
pas de méthode permettant de récupérer les noms des cartes.

Pouvez vous m'aider ?

Merci d'avance à tous !!

Thibaut

5 réponses

Avatar
Xavier
Salut,

Peux-tu faire passer un bout de code, avec le minimum, pour ton problème ?

A+

Xavier

"Thibaut Desmarest" a écrit dans le message de
news:chn57k$vr6$
bonjour à tous,

Voilà mon problème : J'ai un panneau à onglets (JTabbedPane) pour lequel
je met dans chaque nouvel onglet un JPanel organisé selon un CardLayout.
Or, j'aimerais que le titre de l'onglet se mette à jour en prenant le
"nom" de la carte qui est affichée dans cet onglet. Par exemple, si la
carte qui est affichée dans l'onglet 1 est la carte "Accueil", j'aimerai
que mon onglet prenne "Accueil" pour titre.

Celà permet de naviguer plus facilement car on sait ce que contient
chaque onglet. Pour l'instant j'ai écrit ceci :

panneauAOnglets.setTitleAt(panneauAOnglets.getSelectedIndex(),***);

Là où il y'à les *** il me manque un String. Je n'arrive pas à récupérer
le nom de la carte qui est affichée car la classe CardLayout ne possède
pas de méthode permettant de récupérer les noms des cartes.

Pouvez vous m'aider ?

Merci d'avance à tous !!

Thibaut


Avatar
Thibaut Desmarest
Xavier wrote:
Salut,

Peux-tu faire passer un bout de code, avec le minimum, pour ton problème ?

A+

Xavier


Salut,

Ben je pensais justement avoir mis le minimum, car le reste du code n'a
rien à voir, c'est juste une petite fonction ça ! Je rappelle que le but
est de faire en sorte que quand je change de carte dans un onglet le
titre de l'onglet prenne le nom de la carte.

Voici un bout de code un peu plus gros, c'est le morceau de
actionPerformed() qui correspond au clic sur le bouton "Suivant" qui
fait avancer le cardLayout d'une carte en avant. La dernière ligne est
toujours celle ou il me manque le nom de la carte qui vient d'être affichée.


if(e.getActionCommand() == "Suivant"){

JPanel temp =
(JPanel)panneauAOnglets.getComponentAt(panneauAOnglets.getSelectedIndex());
((CardLayout) temp.getLayout()).next(temp);
panneauAOnglets.setTitleAt(panneauAOnglets.getSelectedIndex(),***);
}

Merci pour votre aide

Thibaut

Avatar
Xavier
JPanel temp >
(JPanel)panneauAOnglets.getComponentAt(panneauAOnglets.getSelectedIndex());

((CardLayout) temp.getLayout()).next(temp);
panneauAOnglets.setTitleAt(panneauAOnglets.getSelectedIndex(),***);
}


Ouais, moi je n'utilise jamais "next" sur un CardLayout, justement parce
qu'on en sait pas où on en est.

Une idée serait, après le "show" de tester parmis test Panel lequel est
visible ("isVisible()").

Xavier

Avatar
Thibaut Desmarest
Xavier wrote:

JPanel temp >>


(JPanel)panneauAOnglets.getComponentAt(panneauAOnglets.getSelectedIndex());

((CardLayout) temp.getLayout()).next(temp);
panneauAOnglets.setTitleAt(panneauAOnglets.getSelectedIndex(),***);
}



Ouais, moi je n'utilise jamais "next" sur un CardLayout, justement parce
qu'on en sait pas où on en est.

Une idée serait, après le "show" de tester parmis test Panel lequel est
visible ("isVisible()").

Xavier





Je ne vois pas comment celà va pouvoir m'aider car les Panels n'ont pas
de nom (Si ??) !! Quand on asocie un nom à une carte, c'est géré par le
CardLayout, et justement ce que j'expliquais c'est que l'on n'a pas
accès à ces noms une fois la carte créée. Donc si je fais un isVisible()
je récupère un Panel (mais de toutes façons je sais le Panel c'est celui
du dessus), mais je ne peux toujours pas récupérer le nom qui lui est
associé dans le CardLayout...

Si tu as une autre idée ?? ;)

Merci,


Thibaut


Avatar
Xavier
Salut Thibaut,

Je ne vois pas comment celà va pouvoir m'aider car les Panels n'ont pas
de nom (Si ??) !!


"setName" ..... ;-)

Ca permet de nommer un Panel, très pratique par exemple lorsque tu fais
SHIT+F1 et que dans ta console, ça te sort toute l'arborescence de tes
composants graphiques, tu peux repérer tes composants avec leurs noms. Ca
c'est une parenthèse pour le débug.
Mon idée n'était pas du tout dans l'exploitation de cette possibilité.

Lorsque j'utilise un CardLayout, j'y ajoute des Panel "nommé" avec comme
label pour le CardLyout le label du panel :

CardLayout cardLayout = new CardLayout();
panelParams = new JPanel(cardLayout);
panelParamsNone = new JPanel();
panelParamsNone.setName("panelParamsNone");
panelParams.add(panelParamsNone, panelParamsNone.getName());

Comme ça, pour montrer ce panel, je n'ai qu'à faire :

cardLayout.show(panelParams, panelParamsNone.getName());

Maintenant, pour ton problème, après le next, tu passes en revue tes panels,
que tu as gardé en membre de ta classe (s'il ne sont pas trop nombreux) ou
dans une liste (ArrayList par exemple). Tu parcours chaque panel jusqu'à en
trouver un qui soit avec isVisible()=true. Là tu as trouvé le panel
couramment affiché et tu peux en déduire le texte à mettre dans ton onglet.
Non ?

Xavier