跟踪JavaFX中绑定的节点的变化



我需要跟踪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!");

 }
 });

我尝试了这些解决方案,但不工作!

请帮帮我,谢谢。

这对性能影响很大,所以我不建议在场景图中有大量节点时这样做,但是:

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);

最新更新