IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

CardLayout: un pb. tout bête


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut CardLayout: un pb. tout bête
    je me suis trouvé confronté à un problème très bête avec CardLayout.
    je lui confie un certain nombre de composants avec une clef
    puis j'ai quelque part un gestionnaire d'événement qui passe cette clef au CarLayout pour avoir le bon composant sur le dessus...
    et là je réalise que je ne sais pas demander quel est ce composant!
    il faudrait que je duplique le fonctionnement interne du CardLayout associant une clef à un composant!
    bon ça peut se faire ... mais un doute m'habite ... j'ai loupé quelque chose?
    (c'est trop stupide de dupliquer un mécanisme)

    hack possible: demander le liste des composant contenus au container et chosir celui dont la propriété visible est vraie .... bon qqch de mieux?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la méthode show(container, name) permet de rendre visible le composant "name" dans le conteneur "container". Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CardLayout layout = new Cardlayout();
    component.setLayout(layout);
    component.add(new JLabel("Hello"),"A");
    component.add(new JLabel("World"),"B");
    layout.show(component,"B"); // la composant affiche maintenat "World"

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    je crois que je n'ai pas été assez clair dans ma question:
    je sais bien que show présente le bon composant
    mais maintenant si je veux agir sur ce composant quel est-il?
    dans mon cas j'accumule des composants sur mon tas de cartes
    et je ne garde pas leur référence, un autre code déclenche le show et voudrait dire quelques mots doux au composant ....
    à part le hack donné en exemple je ne vois pas de méthode prévue et je m'étonne!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      String clef = // initialisations par réupération d'un événement
     cardlayout.show(container, clef) ;
     // cool et maintenant tu montres quoi mon camarade?
    // je voudrais récupérer le composant visible pour lui causer
     
    // hack bien pourri
     Component comp ;
     for(Component cp : container.getComponents() ) {
       if(cp.isVisilbe()) { comp = cp ; break ; }
    }
     TypeConnuDeComposant cibleDeMesActions = (TypeConnuDeComposant) comp;

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Je ne pense pas que le cardlayout stocke cette information. Son seul role lorsque l'on change de composant, c'est de parcourir les composant du conteneur, cacher tout ce qui ne correspond pas au nom et monter celui qui correspond. Si tu regarde le cardlayout, dans son constructeur, il ne garde aucune référence à son conteneur. En réalité, ce layout peut meme etre utilisé par plusieurs conteneurs. La méthode que tu propose n'a rien d'un hack, t'as N (>0) composants dans ton conteneur et le cardlayout te garantit qu'il y en aura exactement 1 de visible.

  5. #5
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Je ne pense pas que le cardlayout stocke cette information.
    si bien sûr! (voir les sources)
    et c'est là que c'est dommage qu'on soit obligé de réinventer l'eau chaude.
    C'est tellement curieux que je me demande si je ne vois pas un truc évident ... d'où ma demande initiale.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    La seule chose que je vois dans les sources, c'est currentCard. Et si vous regardez les source attentivement, vous constaterez qu'a chaque moment où il s'agit de trouver le composant courant, le cardlayout ne fait pas confiance à cette propriété et se contente de chercher le composant visible. Créer une méthode qui utiliserais cette propriété ne ferait que vous faire gagner 1 ligne de code. De plus, vu de l'extérieur (l'api de cardlayout), il n'est pas nécessaire à son fonctionnement qu'il stocke cette information (et le code le montre bien, il se casse la tete à maintenir une variable protégée currentCard qu'il ne lit jamais). Donc cette info pourrait très bien etre retirée à l'avenir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question toute bête sur les formulaires
    Par pekka77 dans le forum Langage
    Réponses: 5
    Dernier message: 01/12/2005, 23h45
  2. Question toute bête sur le passage de variable
    Par pekka77 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/11/2005, 12h39
  3. [Dates] Calcul tout bête sur une date...
    Par poah dans le forum Langage
    Réponses: 5
    Dernier message: 01/11/2005, 15h02
  4. un problème tout bête de scanf !
    Par eizo dans le forum C
    Réponses: 9
    Dernier message: 31/10/2005, 12h29
  5. [FLASH MX]Un problème tout bête !
    Par Kikoah dans le forum Flash
    Réponses: 11
    Dernier message: 02/06/2004, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo