Comment faire pour forcer le rafraîchissement/repeindre un JScrollPane?

Je suis l'ajout de beaucoup de composants (JPanels, JLabels etc.) dans un JScrollPane programagically au début de mon programme basé sur des choses à partir d'une base de données.

Il semble que cette procédure est trop rapide pour l'interface graphique(?), ainsi, le JScrollPane n'est pas toujours correctement la mise à jour, j'.e les barres de défilement ne sont pas visibles, même si l'intérieure Composite est plus grande que la zone visible.

Le redimensionnement de la Fenêtre (JFrame) résout le problème, comme je suppose que Java est ré-impression des composants lorsqu'ils sont redimensionnées.

Comme un test, j'ai ajouté un debug-bouton que je peux cliquer après le démarrage du programme est terminée. Je suis en train d'essayer de forcer le JScrollPane pour "rafraîchir" lui-même.

J'ai essayé de faire:

scrollpane.repaint();
scrollpane.validate();
scrollpane.revalidate();

Aucun d'eux ne semble fonctionner. Cependant, si je change la frontière (ou de toute autre disposition relative à la JScrollPane), il rafraîchit correctement.

scrollpane.setBorder(new LineBorder(Color.RED));

Donc en fait j'ai 2 questions.

  1. Quelle est la commande pour forcer le composant scrollpane à "actualiser"? Évidemment, c'est de faire une sorte de "repeindre" chose quand je suis à l'ajout de la frontière. Comment puis-je exécuter seulement?
  2. Est-il un moyen de "pause" l'impression de composants tels qu'ils sont ajoutés et le reprendre à nouveau après avoir ajouté tous les composants? Comme il est maintenant, en fait j' "voir" les composants ajoutés sur l'écran (même si c'est très rapide). Il serait mieux si je peux ajouter tous les composants que je veux et PUIS de dire au programme de l'imprimer à l'écran de la JFrame.
Vous aidera à Swing : JScrollPane n'a pas d'actualisation après les changements dans la structure d'un JTable
Comment va l'aider? Il n'y a pas de JTable en cause ici, et l'OP, déjà mentionné en essayant d'invoquer revalidate (et d'autres moyens, mais peut-être pas dans une séquence valide).
Aussi loin que repeindre/[re]valider, voir stackoverflow.com/questions/1097366/.... Pour avoir tous les composants de "montrer à la fois", il suffit d'attendre jusqu'à ce qu'ils sont tous ajoutés avant d'ajouter (ou de les rendre visibles) de l'élément parent.
Suzon: Ouais, j'ai essayé de mettre innerPanel.invalidate (), puis exécutez le composant scrollpane.repaint() mais pas de chance. Quelqu'un sait exactement ce qui se passe à un JScrollPane quand je le change à la frontière? Quel intérieure commandes sont exécutées? Je suppose qu'il exécute des choses telles que ".repaint()" et les autres?
Comme il est de travail lorsque je change la frontière de la JScrollPane, je suppose que il y a quelque chose que je peux courir sur le parchemin lui-même (uniquement), pour faire ce travail?

OriginalL'auteur Daniele Testa | 2014-03-19