我有一个多边形,当窗口调整大小时,我想要增大它的大小。我有一个DoubleBinding,它是场景中所有形状大小的基线。我使用这个DoubleBinding创建一个计算多边形应该有多大的ListBinding。我尝试使用Bindings.bindContent(list1,list2)将ListBinding绑定到多边形的点,但它似乎不起作用。
Polygon triangle = new Polygon();
ListBinding<Double> trianglePoints = new ListBinding<Double>() {
{
super.bind(width, height);
}
@Override
protected ObservableList<Double> computeValue() {
ObservableList<Double> points = FXCollections.observableArrayList();
points.addAll(0.0, 0.0, width.get()/2, height.get()/4, 0.0, height.get()/2);
return points;
}
};
Bindings.bindContent(triangle.getPoints(), trianglePoints.get());我发现,如果在三角形点中添加一个InvalidationListener,并在多边形点启动时手动更改多边形点,它就能工作。
trianglePoints.addListener((InvalidationListener)(listener) -> triangle.getPoints().setAll(trianglePoints.get()));我做错了什么?
发布于 2017-03-31 23:11:28
您应该以下列方式更改绑定:
Bindings.bindContent(triangle.getPoints(), trianglePoints);您以前的绑定无法工作,因为trianglePoints.get()只是computeValue()调用的结果,即创建ObservableList时根据初始width和height计算的一些值。因此,没有考虑到对width和height属性的进一步更改。
发布于 2017-04-01 08:55:59
我建议不要使用ListBinding。您不需要一次又一次地重新创建列表,只需修改其中的一些要点:
@Override
public void start(Stage primaryStage) {
Polygon triangle = new Polygon(
0, 0,
0, 0,
0, 0);
StackPane root = new StackPane();
root.getChildren().add(triangle);
root.heightProperty().addListener((observable, oldH, newH) -> {
double h = newH.doubleValue();
triangle.getPoints().set(3, h / 4);
triangle.getPoints().set(5, h / 2);
});
root.widthProperty().addListener((observable, oldW, newW) -> {
double w = newW.doubleValue();
triangle.getPoints().set(2, w / 2);
});
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}此外,还可以使用比例尺属性(除非使用笔画或异国情调填充)来完成此操作:
@Override
public void start(Stage primaryStage) {
Polygon triangle = new Polygon(
0, 0,
0.5, 0.25,
0, 0.5);
StackPane root = new StackPane();
root.getChildren().add(triangle);
triangle.scaleXProperty().bind(root.widthProperty());
triangle.scaleYProperty().bind(root.heightProperty());
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}https://stackoverflow.com/questions/43150542
复制相似问题