Contenu JScrollPane apparaît après resize

Résolu
Leucistic Messages postés 61 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 16 juin 2012 - 9 sept. 2010 à 13:36
Leucistic Messages postés 61 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 16 juin 2012 - 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

1 réponse

Leucistic Messages postés 61 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 16 juin 2012 1
9 sept. 2010 à 14:07
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
1
Rejoignez-nous