我有一个Pane
可缩放的。我想Pane
分别扩大所有孩子的人数。可以动态添加子项,因此我想在添加新子项后将子项的scale属性绑定到其父项的scale属性,但是我不知道该怎么做。
窗格缩放后,我目前会缩放所有子级:
public class ZoomableCanvas extends Pane {
DoubleProperty scale = new SimpleDoubleProperty(1.0);
public ZoomableCanvas() {
scaleXProperty().bind(scale);
scaleYProperty().bind(scale);
}
public double getScale() {
return scale.get();
}
public void setScale(double scale) {
this.scale.set(scale);
for (javafx.scene.Node child : getChildren()) {
child.setScaleX(scale);
child.setScaleY(scale);
}
}
public void setPivot(double x, double y) {
setTranslateX(getTranslateX() - x);
setTranslateY(getTranslateY() - y);
}
}
但是必须有一种更优雅的方法。如何侦听子项的添加,然后绑定该属性?
只要观察孩子的名单:
public class ZoomableCanvas extends Pane {
DoubleProperty scale = new SimpleDoubleProperty(1.0);
public ZoomableCanvas() {
scaleXProperty().bind(scale);
scaleYProperty().bind(scale);
getChildren().addListener((Change<? extends Node> c) -> {
while (c.next()) {
if (c.wasAdded()) {
for (Node child : c.getAddedSubList()) {
child.scaleXProperty().bind(scale);
child.scaleYProperty().bind(scale);
}
}
if (c.wasRemoved()) {
for (Node child : c.getRemoved()) {
child.scaleXProperty().unbind();
child.scaleYProperty().unbind();
}
}
}
});
}
public double getScale() {
return scale.get();
}
public void setScale(double scale) {
this.scale.set(scale);
}
public void setPivot(double x, double y) {
setTranslateX(getTranslateX() - x);
setTranslateY(getTranslateY() - y);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句