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