我需要跟踪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!");
}
});
我尝试了这些解决方案但不起作用!
请帮助我,谢谢。
答案 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);