跟踪JavaFX中绑定的节点的更改

时间:2015-07-13 17:33:25

标签: java javafx javafx-2 javafx-8

我需要跟踪javafx中节点的绝对位置和大小的变化。由于调整窗口或用户操作的大小而导致的更改,...

 node.boundsInLocalProperty().addListener(new ChangeListener<Bounds>() {

 @Override
 public void changed(ObservableValue<? extends Bounds> observable,Bounds oldValue, Bounds newValue) {

 System.err.println("Changed!");


 }

 });


 node.boundsInParentProperty().addListener(new ChangeListener<Bounds>() {

 @Override
 public void changed(ObservableValue<? extends Bounds> observable,Bounds oldValue, Bounds newValue) {

 System.err.println("Changed!");


 }

 });

我尝试了这些解决方案但不起作用!

请帮助我,谢谢。

1 个答案:

答案 0 :(得分:0)

这在性能上相当沉重,所以我不建议在场景图中使用大量节点来执行此操作,但是:

ObjectBinding<Bounds> boundsInScene = Bindings.createObjectBinding(
    () -> node.localToScene(node.getBoundsInLocal()),
    node.localToSceneTransformProperty(),
    node.boundsInLocalProperty());

boundsInScene.addListener((obs, oldBounds, newBounds) -> 
    System.err.println("Changed!"));

您还可以执行以下操作,这可能不太容易过早收集垃圾:

ChangeListener<Object> listener = (obs, oldValue, newValue) -> 
    System.err.println("New bounds in scene: "+node.localToScene(node.getBoundsInLocal()));
node.localToSceneTransformProperty().addListener(listener);
node.boundsInLocalProperty().addListener(listener);