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.
- 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?
- 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.
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
Vous devez vous connecter pour publier un commentaire.
Le code de base pour ajouter des composants à un panneau visible est:
L'ajout d'un composant ne fait rien parce que le composant a toujours une taille de zéro alors il n'y a rien à la peinture. Lorsque vous appelez le revalidate() la méthode de la mise en page du gestionnaire est appelé pour que les composants ont maintenant un emplacement/taille. Repaint() puis peignez les composants. Le revalidate() peut aussi causer les barres de défilement pour montrer en cas de besoin. Bien sûr, cela suppose que vous utilisez la disposition des gestionnaires.
Les composants sont ajoutés au panneau de sorte que vous appeler les méthodes sur le panneau, pas le composant scrollpane.
OriginalL'auteur camickr
Dans mon cas, seulement
aidé à obtenir les barres de défilement sur le JScrollPane, lorsque le joint Composite a été redimensionné dynamiquement.
OriginalL'auteur p6majo