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

Composants Java Discussion :

JScrollPane redimensionnement par rapport à son composant JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut JScrollPane redimensionnement par rapport à son composant JTable
    Bonjour,

    Ca fait une semaine que je planche dessus et impossible de trouver une solution. Je vous expose mon problème.

    J'ai une JTable dans un JScrollPane. Lors du "paint" (dans l'UI) de la JTable, je redimensionne les colonnes de la JTable pour qu'il soit de la taille de chaque header des colonnes.
    Mon problème est que ce faisant, la JTable est redimensionné mais le JScrollPane est toujours à sa taille originel (prendre tout l'espace) et donc la scrollbar n'est plus "collé" à la JTable.
    Moi ce que je veux, c'est que le JScrollPane ait la même largeur que la JTable après redimensionnement (enfin plus la taille du JScrollBar)

    J'ai tenté de redimensionner le JScrollPane lors du redimensionnement de la JTable (via un PropertyChangeListener) mais ça ne fonctionne pas. Les valeurs ont beau être les même, il n'y a aucun impact au visuel (même en faisant repaint() ou updateUI()).
    J'ai beau changer les valeurs via le &setSize, le setPreferredSize ou même encore le viewport Size et preferredSize, aucune de ces solutions ne marchent.
    Je vois plus du tout comment faire pour que ma JScrollPane prenne la taille de la JTable.

    Est-ce que quelqu'un aurait une idée? Merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 31
    Par défaut
    N'y a t'il pas moyen de redimensionner les colonnes de ta JTable avant le paint() ?
    A mon avis, ton problème viens de là : lors de l'appel à cette fonction, c'est trop tard ...

  3. #3
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut
    Le problème de le faire avant le paint() est que mon header est composé de JComponent (et non simplement de String) et qu'avant le paint, on ne connait pas la taille de ces JComponent. Donc, je ne peux pas redimensionner ma JTable avant le paint.

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En fait que cherches tu à afficher dans ton header?

  5. #5
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut
    alors dans mes headers, il peut y avoir des JComponent de type : JCheckBox, JLabel, JButton
    L'affichage de ces composants ne posent pas de problème (j'utilise un renderer et le setHeaderValue).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 31
    Par défaut
    Citation Envoyé par Tiitiix Voir le message
    avant le paint, on ne connait pas la taille de ces JComponent.
    La méthode paint() fait donc le calcul de la taille de ces composants. Ne peux tu pas le reproduire ?

  7. #7
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut
    La méthode paint() de mon UI fait appel au paintComponent du renderer de Swing de base et c'est lui qui fait tout le travail de calcul/affichage (si je ne me trompe pas).

    Puis, je trouve que calquer le code déjà fait serait un peu crade non?

    Je pense qu'il doit y avoir un moyen plus propre pour que lorsqu'à l'affichage de ma table, le JScrollPane prenne la taille de son composant, non?

    J'ai pas trouvé de propriété dans le JScrollPane pour faire ça.

    En fait, j'ai réussi à faire ce que je voulais, mais à chaque fois qu'avec ma souris j'entre et sors de la zone du ScrollPane il se dessine/redessine de "taille max" à "taille de la table" ce qui est assez embêtant j'avouerais. Mais pour cela, il faut qu'à chaque paint, il recalcule la taille de la table et adapte la taille du ScrollPane (malgré la définition du setPreferredSize et des autres Size possible).
    Dans ma solution qu'il me faudrait à la fin (c'est-à-dire, un seul appel au calcul de la taille de la table et que le ScrollPanel prenne cette taille une fois pour toute), le ScrollPanel ne se redimensionne absolument pas.

    J'avoue je suis perdue là. Je vois pas pourquoi dans mon premier essai, il se redessine comme je veux/comme je veux pas. Et je vois pas pourquoi si le calcul ne se fait qu'une fois, il se dessine pas comme il faut.

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Essayes de regarder du coté du getPreferredScrollableViewportSize(). C'est peut-être une piste


    a++

Discussions similaires

  1. [XL-2003] Imprimer une feuille par rapport à son nom
    Par pingoui dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/03/2010, 23h00
  2. Réponses: 1
    Dernier message: 04/12/2008, 12h43
  3. Positionnement d'un DIV par rapport à son conteneur
    Par vodnok dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 16/01/2008, 13h30
  4. JDialog "Autosize" par rapport à son contenu
    Par Neilos dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 24/10/2007, 08h15
  5. Réponses: 2
    Dernier message: 04/10/2006, 09h22

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