JavaFX - вземете координатите на сцената на дете в ScrollPane

Опитвам се да изчисля координатите на сцената от дете в ScrollPane. Направихме това на няколко други възли в нашия проект с този метод

this.boundsInLocalProperty().addListener( ( observable, oldValue, newValue ) ->
{
     final Bounds boundsOnScene = this.localToScene( newValue );
     ..
} );

Наистина е лесно, но как мога да изчисля координатите на децата в ScrollPane, дори когато конкретният възел в момента е извън границите на изгледа? Нашата FXML структура изглежда така

<ScrollPane>
   <VBox>
      <Pane/>
      <Pane/>
      <Pane/>
   </VBox>
</ScrollPane>

Търсих известно време в интернет, но не мога да разбера откъде да започна. Може би някой може да ме насочи в правилната посока?


Редактиране: благодарение на коментар на James_D Разбрах какво липсва. В ScrollPane слушателят boundsInLocalProperty няма да бъде извикан по време на превъртане, така че трябваше да добавя

this.localToSceneTransformProperty().addListener( ( observable, oldValue, newValue ) ->
{
     final Bounds boundsOnScene = this.localToScene( this.getBoundsInLocal() );
     ...
} );

за да се вземе предвид поведението при превъртане.


person grill2010    schedule 08.11.2017    source източник
comment
Изчислението ви изглежда правилно, но boundsInLocal няма да се промени, когато потребителят превърта, така че слушателят няма да бъде извикан и вие няма да преизчислите границите на сцената. Опитайте да добавите слушател към localToSceneTransformProperty   -  person James_D    schedule 08.11.2017
comment
Омг, благодаря ти. Прекарах почти целия ден вчера в измисляне как мога да се свържа със събитието за превъртане, за да преизчисля границите. Мислех, че ще трябва сам да извадя отместването. Не очаквах, че е толкова просто. Понякога не можете да видите гората заради дърветата.   -  person grill2010    schedule 08.11.2017
comment
Попаднах на този стар въпрос, може би бихте могли да добавите коментара си като отговор, за да мога да го приема?   -  person grill2010    schedule 25.06.2018


Отговори (1)


Благодарение на James_D разбрах какво не е наред.

boundsInLocal няма да се промени, когато потребителят превърта. Също така трябваше да слушам localToSceneTransformProperty, за да преизчисля границите на сцената.

person grill2010    schedule 30.07.2018