Contenu JScrollPane apparaît après resize [Résolu]

Leucistic 61 Messages postés mercredi 24 septembre 2008Date d'inscription 16 juin 2012 Dernière intervention - 9 sept. 2010 à 13:36 - Dernière réponse : Leucistic 61 Messages postés mercredi 24 septembre 2008Date d'inscription 16 juin 2012 Dernière intervention
- 9 sept. 2010 à 14:07
Bonjour,

Après pas mal de recherches sur le net, je n'ai pas réussi à résoudre mon problème.
J'ai une JFrame avec plusieurs JPanel dedans (qui possèdent eux même plusieurs JPanel).
A l'interieur de deux de ces panels, il y à des JScrollPane. L'un possède un JTextArea, l'autre un JTree.
Le problème est que lorsque ma fenêtre s'affiche, le JTextArea et le JTree ne s'affiche qu'après avoir redimensionné la fenêtre ou avoir laissé le curseur de ma souris sur le bouton pour maximiser ou réduire la fenêtre.

J'ai donc pensé que j'avais dû oublier un repaint() (ou un validate() ou un revalidate() ...) quelque part, mais même après en avoir mis un peu partout, c'est toujours le même problème.

Voici le constructeur du JScrollPane contenant le JTree
public ScrollTree () {
        super();

        this.root = new DefaultMutableTreeNode("Racine");
        this.tree = new JTree(root);
        this.tree.addTreeSelectionListener(this);
        
        this.setViewportView(tree);
        
        this.tree.expandPath(new TreePath(this.root.getPath()));
    }


Savez-vous comment je pourrais régler ce problème ?


--------
L'ouverture de l'esprit n'est pas une fracture du crâne
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Leucistic 61 Messages postés mercredi 24 septembre 2008Date d'inscription 16 juin 2012 Dernière intervention - 9 sept. 2010 à 14:07
3
Merci
Et bien voilà,

Il suffisait de poster pour trouver le problème tout seul comme un grand après 2 jours de galère.

En fait, j'avais mis des repaint() etc un peut partout, mais pas les bons et pas aux bons endroits.

La solution est donc la suivante :
- Surcharger la méthode paintComponent(Graphics g) de la classe héritant de JScrollPane
- Faire un revalidate() sur le viewport du JScrollPane.

public ScrollTree () {
        super();

        this.root = new DefaultMutableTreeNode("Racine");
        this.tree = new JTree(root);
        this.tree.addTreeSelectionListener(this);
        
        this.setViewportView(tree);
        
        this.tree.expandPath(new TreePath(this.root.getPath()));
    }

protected void paintComponent (Graphics g) {
        super.paintComponent(g);

        this.tree.revalidate();
    }


L'ouverture de l'esprit n'est pas une fracture du crâne

Merci Leucistic 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Leucistic

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.