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 :

Ajout/Suppression de JPanel et rafraichissement


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut Ajout/Suppression de JPanel et rafraichissement
    Bonjour à tous. Je farfouille regulièrement dans ce forum, et jusqu'à présent j'ai toujours trouvé mon bonheur dans les diverses discussions ... mais voila qu'aujourd'hui, je sèche ! (il y a bien une première fois à tout)

    Je vais tenter de vous résumer la situation :
    • J'ai tout d'abord un MapBean (OpenMap) et un JPanel en guise de panneau de controle, contenus respectivement dans les parties CENTER et EAST d'un JPanel avec donc un BorderLayout.
    • Ensuite, le but du jeu est de pouvoir cacher ou afficher ce panneau de controle, via un bouton (barre de menu, ou menu contextuel, peu importe). Pour cela, j'utilise betement la methode remove(Component comp) de JPanel

    Au debut de l'appli, tout ceci est contenu dans un JTabbedPane. Et tout fonctionne à merveille, avec juste un petit repaint() sur le gestionnaire d'onglets.

    Mais voila que les choses se compliquent. Mes onglets peuvent être détachés, chacun dans une JInternalFrame. Et c'est là que ça coince.
    Une fois dans sa JInternalFrame, mon système de panneau retractable a quelques soucis de "rafraichissement". J'ai beau faire des repaint() sur tous les container possibles et imaginables, l'affichage souhaité n'apparait correctement que lorsque je redimensionne manuellement ma fenetre (à la souris, pas dans le code). La déplacer, ou bien reduire puis restaurer n'affecte rien. Uniquement le redimensionnement permet de retablir la situation.
    Et chose que je ne comprend pas très bien, si je place un revalidate(), c'est dans la JTabbedPane que cela ne fonctionne plus, alors que sans, ça passe.

    (mmmhh j'espère que vous me suivez. Dans l'immediat je n'ai pas de quoi faire de copie d'écran, mais je vais essayer d'en présenter, cela sera plus parlant)

    N'etant pas très au point sur la partie graphic de java, j'en suis tout de meme venu à la conclusion que des methodes différentes sont appelées lors du redimensionnement et du deplacement de fenetres, et j'aimerais bien tenter d'intervenir la dessu... mais je n'arrive pas à trouver le moindre indice.

    Une idée sur la question ?
    Ha aussi, msi c'est pas très important : si quelqu'un voit pourquoi revalidate() vient tout casser dans mon onglet, je suis preneur ^^

  2. #2
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Salut,

    juste une petite question au passage : si tu dois juste afficher ou cacher ce panneau de contrôle, pourquoi ne pas utiliser la méthode setVisible() plutôt ?

    Je ne sais pas si cela pourrait régler le problème mais cela éviterait de supprimer, d'ajouter le composant et de lancer la méthode repaint() à chaque fois.

  3. #3
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    +1 sironimo

    un setVisible(false) suivi d'un setVisible(true) sur un ContentPane, ça reste discret et généralement, ça marche !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut
    Ha oui tiens... c'est carrement plus pratique même. J'etais partie dans l'idée qu'il fallait que je supprime le composant pour que l'autre prenne tout l'espace occupé par les deux ensemble, mais c'est un jolie mythe ^^
    Merci, cela allège le tout en plus.

    Le soucis est que, quand le panneau est caché, et que je souhaite l'afficher, il revient bien, mais la carte laisse des traces de dessin sur le panneau fraichement revenu. Chose qui disparait quand je redimensionne ma fenetre à la souris, ou quand je change d'onglet et que je reviens...
    Je cherche à forcer la main au rafraichissement, mais repaint() ne fonctionne pas (et je n'ai pas vraiment compris le principe de revalidate() ...)

  5. #5
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    sur quel élément tu fais les setVisible()?

    si tu le fais sur la Frame directement, est-ce que ça le fait toujours?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut
    J'applique le setVisible() sur le JPanel qui contient mon panneau de controle.

    J'ai essayé de truander en enchainant un setVisible(false) et setVisible(true) sur le JPanel qui contient la carte et le panneau (appelons le JPanel general), mais il ne se fait pas avoir ...
    Pareil en essayant la meme magouille sur la fenetre (je ne peux d'ailleurs y accéder que depuis le JPanel general avec un getRootPane().getParent() ... pas très beau tout ça mais bon)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut
    Voici une idée visuelle du problème, une fois le panneau caché, puis reaffiché.

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

Discussions similaires

  1. Ajout/Suppression dynamique de JPanel (dans un autre JPanel)
    Par Carvallegro dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 16/05/2012, 09h52
  2. Ajout/Suppression dynamique des lignes dans une table
    Par codexomega dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/08/2005, 18h50
  3. [Débutant] ajouter un bouton à JPanel
    Par rabobsky dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 10/06/2005, 18h08
  4. [JFrame] ajout de plusieurs JPanel
    Par illegalsene dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 06/04/2005, 00h11

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