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

AWT/Swing Java Discussion :

Changer un composant à la volée.


Sujet :

AWT/Swing Java

  1. #1
    Invité
    Invité(e)
    Par défaut Changer un composant à la volée.
    Bonjour,

    En fonction d'un test je dois changer un composant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    JtextField tailleTf = new JtextField();
    JCombobox tailleCb = new JComboBox(new TaillesModel());
    ...
    
    if ( monTestEstCorrect ) {
        // remplace tailleTf par tailleCb
    } else {
        // remplace tailleCb par tailleTf
    }
    je pourrais :

    - Mettre en attribut les règles du layout
    - récupèrer le container et y supprimer mon composant
    - récupèrer le conatiner et y ajouter le nouveau avec les régles du layout
    - faire un repaint() sur mon container()
    --> Mais ça ne me semble pas trés efficace


    - Créer les deux composants
    - Placer les deux composants l'un sur l'autre
    - Modifier l'attribut visible de ces composants
    --> Je n'aime pas vraiment l'idée de créer dexu composants pour n'en montrer qu'un. Ca risque de poser quelques problèmes vis à vis du Layout aussi.


    Quelqu'un à un autre idée ?


    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon, si personne n'a d'autres idées, il y à bien l'un ou l'autre pour me conseiller une des deux approches..

    S'il vous plait ..

  3. #3
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    En ce cas à mon avis La Bonne Habitude À Suivre est de placer les deux composants dans un JPanel dont le layout est un CardLayout. Comme ça plus de besoin de finasser avec les repaint et les setVisible c'est la machinerie java qui s'occupe de tout.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par spekal
    c'est la machinerie java qui s'occupe de tout.
    Qui s'occupe de remplacer mon composant m se trouvant en 10,20 par un composant n ?

    Faudrais que l'on m'explique ça.

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    C'est comme du JTabbedPane, sauf que c'est juste un layout.
    Voici le tuto Sun.

  6. #6
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Mais tu as lu le javadoc de CardLayout ? (ou alors c'est moi qui ait pas compris ta question ) Un autre lien, si tu veux : How to Use CardLayout. Et puis une recherche sur CardLayout dans le forum renvoie pas mal de résultats, il doit bien y en avoir un qui te guide ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Par défaut
    Normalement avec le couple de méthodes removeAll() - revalidate() sur ton container ça marche nickel.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 201
    Par défaut
    Salut,

    Je me permets de poser une nouvelle question en rapport direct avec le topic. Je me suis retrouvé face à la même situation, il fallait que je puisse supprimer / ajouter des composants à la volée. Seulement ceux-ci n'ont pas forcément la même hauteur. Par exemple si dans le premier JPanel à afficher j'ai un JLabel et que dans un second j'ai plusieurs composants qui s'étendent sur la hauteur, alors lorsque le JPanel qui contient le JLabel est affiché, il s'étend sur la hauteur du JPanel qui contient plusieurs composants.

    Comment peut-on remédier à ça ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Oui j'ai lu la JavaDic, c'est vrai que c'est intéressant la CardLayout MAIS
    de toutes façons je ne peux pas utiliser de CardLayout car mes composants sont disposés un peu plus spécialement.

    Ou alors je dois créer une JPanel qui à comme Layout CarLayout..

    Oui c'est à voir.

    benohit Je n'ai pas vraiment envie de tout virer et de tout remettre juste pour changer un composant.. Ca me semble un peu lourd

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 44
    Par défaut
    Bien sur, je l'avais mis a titre indiquatif, tu as aussi ça petite soeur remove(int) qui prends en paramètre l'index du composant "dans le container". Je voulais juste attiré ton attention sur la méthode validate ou revalidate qui elle est préférable à un repaint. Voilà l'extrait de la javadoc tu vas vite comprendre pourquoi:

    public void validate()

    Validates this container and all of its subcomponents.

    The validate method is used to cause a container to lay out its subcomponents again. It should be invoked when this container's subcomponents are modified (added to or removed from the container, or layout-related information changed) after the container has been displayed.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Ok, merci.

    J'utiliserais validate().
    Je vais tester remove(int i) pour voir ça. Parceque si remove(int i) fais un validate() ma fenêtre vas être désorganisée puis réorganisée, ça risque de ne pas donner un très bel effet.
    A tester donc.

    Merci beaucoup.

Discussions similaires

  1. zend + changer de view à la volée
    Par Reckonings dans le forum Zend Framework
    Réponses: 6
    Dernier message: 13/06/2012, 10h10
  2. [B.NET][ADO.NET] Créer des composants à la volée
    Par DotNET74 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/12/2007, 15h31
  3. Réponses: 4
    Dernier message: 15/10/2007, 16h33
  4. [C#] impossible de changer de rapport à la volée
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 23/05/2006, 16h13
  5. [BorderLayout] Changer le composant
    Par calypso dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 12/04/2005, 11h58

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