2010-11-14 1 views
3

Je n'arrive pas à trouver celui-ci.Affichage de l'onglet précédent de CardLayout

La situation n'est pas difficile à imaginer, j'espère que je pourrais poster ceci sans un exemple de code. J'ai JPanel avec CardLayout. Le panneau contient plusieurs autres panneaux en tant qu'onglets individuels. Ce que j'essaie de faire, c'est de créer un JButton qui affichera le dernier onglet du panneau principal (celui avant que le courant ne soit affiché). Pas grand-chose que je pensais au début. J'ai donc commencé par penser comment obtenir l'onglet visible (panel) et découvert qu'il n'y a pas de méthode native dans Panel ou plutôt CardLayout qui ne contient que des méthodes first(), last(), next() et précédent() qui ne me sert à rien.

Ensuite, je pensais que peut-être pour atteindre mon objectif, je pourrais passer par tous les composants du panneau principal et tester lequel est visible qui serait le courant. Je trouve ça un peu compliqué, bien, mais comment faire pour que ce panneau apparaisse sur CardLayout si je n'ai pas son nom de carte pour appeler la méthode CardLayout show (parent, nom)?

À ce stade, je n'en ai aucune idée. J'ai cherché sur Internet mais je n'ai pas trouvé de solution, seulement que peu de gens ont essayé de trouver quelque chose de similaire. Donc, j'espère que quelqu'un qui déjà delt avec ce genre de problème vient à travers ce sujet :-)

Merci pour vos suggestions.

Meilleures salutations

Martin S.

Répondre

2

Cela soulève la question de savoir comment vous êtes arrivé à la carte actuelle, en premier lieu. Si vous avez utilisé next() pour accéder à la carte actuelle, alors previous() vous amènera à la carte précédente et vice versa. Si vous utilisez first() ou last(), alors vous n'avez pas de chance. Bien sûr, vous pouvez toujours dupliquer certaines des informations stockées par le CardLayout pour atteindre votre objectif: si vous gérez un tableau de noms de composants (et le mettez à jour chaque fois que vous appelez addLayoutComponent) ainsi qu'un index précédent (et mise à jour ceci avec next, previous et d'autres appels), alors vous pouvez juste rechercher le nom du composant précédent et utiliser show pour montrer la carte précédente.


Mise à jour: Puisque vous connaissez les noms d'onglet, voici comment vous pouvez conserver l'ancien nom de l'onglet:

String prevTab, curTab; 

public void showTab(String newTab) { 
    prevTab = curTab; 
    curTab = newTab; 
    layout.show(parent, curTab); 
} 

public void goBack() { 
    layout.show(parent, prevTab); 
} 
+0

Je bascule entre les onglets en utilisant la méthode show (parent, tabName) de CardLayout, il semble que cela va avoir besoin d'improvisation car CardLayout API n'offre aucune autre option :-) yay :-p – Martin

+0

@Martin S .: Dans Dans ce cas, vous connaissez le 'tabName' précédent, n'est-ce pas? Rangez juste cela et utilisez-le pour revenir en arrière. – casablanca

+0

oui mais quand je stocke tabName et utilise show alors c'est le courant pas le précédent, n'est ce pas? – Martin

0

Vous pouvez créer une carte d'objet carte. Et ajouter les panneaux & noms à la disposition de la carte et à la carte. Ensuite, si vous avez le JPanel précédemment affiché, vous obtenez son nom de la carte via map.get (JPanel p). Et pour trouver ce que JPanel était visible avant le moment, vous devrez ajouter ComponentListener à chaque JPanel. Et faites-le pour modifier une variable statique sur l'événement componentHidden (par exemple, static JPanel prev_shown).

Questions connexes