J'ai un menu contextuel qui affiche dynamiquement les objets JPanel créés dans un JPanel dans un JScrollPane. Le menu contextuel affiche des recommandations à l'utilisateur et l'élément le plus élevé est la recommandation la plus pertinente. J'utilise JPopupMenu pour afficher la fenêtre:JScrollPane dans une fenêtre contextuelle ne défile pas par programmation
JPanelTemplatePopup jptep = new JPanelTemplatePopup();
JPopupMenu popup = new JPopupMenu();
popup.add(jptep);
popup.show(this, 500, 100);
Le problème est, je ne peux pas faire défiler JScrollPane à l'élément le plus élevé pour l'afficher en premier. Je l'ai essayé.
- .getViewPort() setViewPosition (nouveau Point (0,0));
- .scrollRectToVisible (firstelement.getBounds());
avant et après validate() s. Peu importe ce que je fais, quand la fenêtre apparaît, le volet de défilement reste toujours au même endroit.
J'ai même suspecté que les opérations qui ont eu lieu avant d'afficher la fenêtre ont été ignorées, donc j'ai créé et appelé une méthode publique de la classe pour faire défiler la fenêtre après qu'elle soit affichée. Rien n'a changé.
S'il vous plaît aider,
Emre
Je pense qu'il est similaire à une condition de course. La barre de défilement doit être mise à jour * après l'affichage de la fenêtre contextuelle. Je pense que j'ai besoin de trouver une sorte d'écouteur qui déclenche une action quand la popup est * complètement * affichée. – Emre