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