JavaFX ScrollPane par programme le déplacement de la fenêtre d'affichage - centrage du contenu
Je peux utiliser le setVvalue(double) et setHvalue(double) méthodes pour déplacer une fenêtre dans un JavaFX composant ScrollPane. Ce que j'ai du mal à faire est le centre d'un nœud particulier dans le contenu du volet de défilement en fonction de sa position. J'ai essayé toutes sortes de combos de localToScene() et boundsInParent(). J'ai lu un peu (beaucoup) et vu de cet exemple
Comment faire un Nœud dans le contenu d'un composant ScrollPane visible?
Qui est proche, mais ne pas centrer les objets met juste visibles. Ayant intégré dans la souris, le défilement est génial, mais je suis en train de faire les gros temps de la programmation panoramique.
En fin de compte j'ai besoin d'être en mesure de faire un zoom trop donc j'ai mis le réel formes dans un Groupe et a ajouté le groupe pour faire défiler le volet de contenu. Je pense que je suis censé faire le zoom sur le groupe, et de nouveau j'ai besoin d'être en mesure de zoom autour du centre du groupe, de sorte que nous sommes de retour à la manipulation et à l'identification de l'actuel centre de la position. Tous les pointeurs ou des exemples qui peuvent être fournis serait vraiment apprécié. L'exemple de code dans le lien ci-dessus est un bon SSCCE.
Merci d'avance,
Andy
Comment avez-Vous résolu ce problème?
OriginalL'auteur andyw | 2013-04-05
Vous devez vous connecter pour publier un commentaire.
Je vais essayer d'expliquer cela sans code, parce que je ne pense pas que ce soit nécessaire ici.
Disons que le contenu de votre composant scrollpane a la hauteur
h
, et la hauteur de la fenêtre d'affichage estv
. Sih = v
, alors le contenu serait parfaitement dans la fenêtre d'affichage, et vous auriez besoin, pas de barre de défilement. Dans cette situation (avec un non-meubles de barre de défilement), pour qu'un élément soit centré, il devra être positionné au centre du composant scrollpane du contenu. Vous ne pouvez pas le déplacer à la fenêtre d'affichage du centre par le biais de défilement.Considérons maintenant
h
être le double de la taille dev
(c'est à direh = 2v
). Dans cette situation, le 1/4 supérieur et inférieur 1/4 du composant scrollpane du contenu pourrait ne pas être centré par défilement.(Si vous avez absolument besoin de centre de tout composant par défilement, vous devriez envisager un rembourrage de votre volet de contenu, mais nous allons continuer avec le unpadded solution ici)
Quand vous pensez à ce sujet, vous vous rendrez compte de la possible de défilement de la distance de la barre de défilement est
h - v
, et vous permettra de faire défiler ce montant par la mise envvalue
à 1,0.Pour centre un point
y
(ici, le point y est les coordonnées du composant scrollpane du volet de contenu), vous pouvez utiliser les éléments suivants vvalue:Le numérateur de cette expression est l'abscisse de ce qui est indiqué en haut de la fenêtre d'affichage lorsque le point y est centré à l'intérieur de la fenêtre d'affichage. Le dénominateur est le total de défilement de la distance.
Edit: Ajout d'un peu de code de toute façon!
(Veuillez noter que ceci suppose que le nœud est un enfant direct de l'scrollpane du contentpane)
Espérons que cette aide! 🙂
OriginalL'auteur Håvard Geithus
Je sais, c'est peu de retard, mais peut-être que quelqu'un va trouver utile.:)
En ce qui concerne le centrage, ce n'est pas difficile tâche, il ne prend que peu de peu de maths. Vous avez besoin de deux choses. La taille de l'ensemble du contenu du composant ScrollPane (largeur et la hauteur de la zone déroulante, non seulement de l'image avec les barres de défilement, mais complète que si pas de barres de défilement sont présents) et la position de l'centrée sur l'objet à l'intérieur du composant ScrollPane contenu.
Vous d'obtenir la taille du contenu comme ceci:
scrollPane.getContent().getBoundsInLocal().getHeight() or .getWidth()
Et la position de votre objet:
node.getBoundsInParent().getMinY() or .getMinX()
- position minimale de l'objet. Vous pouvez obtenir la hauteur et la largeur.Puis de calculer la position de votre centre et déplacer les barres de défilement selon cette formule.
double vScrollBarPosition = scrollPane.getVMax() * (yPositionOfCenter /heightOfScrollPaneContent)
OriginalL'auteur none_
Voici un exemple sur la façon de centre d'un pic qui a été tourné.
Le code de la Scala et sont donc applicables à ScalaFX, mais JavaFX et de Java, les développeurs seront en mesure de lire/utiliser :
OriginalL'auteur wlgrinfeld