[英]Binding to a shape fillProperty JavaFX
如何在JavaFX中将三个doubleProperty红色,绿色和蓝色绑定到“ circle.fillProperty()”?
我可以轻松地将一个圆的radiusProperty绑定到doubleProperty,如下所示:
Circle circle = new Circle();
circle.radiusProperty().bind(boid.getRadiusProperty());
您可以使用Bindings.createObjectBinding
。
Circle
的fillProperty
具有ObjectProperty<Paint>
的类型,因此您必须在绑定中创建一个Paint
对象:
private IntegerProperty r = new SimpleIntegerProperty(0);
private IntegerProperty g = new SimpleIntegerProperty(0);
private IntegerProperty b = new SimpleIntegerProperty(0);
circle.fillProperty().bind(Bindings.createObjectBinding(() -> Color.rgb(r.get(), g.get(), b.get()), r, g, b));
这是一个完整的示例:
本示例使用Spinner
作为输入控件,请注意,这些控件的valueProperty
可以直接用作绑定的依赖项。
public class Main extends Application {
private IntegerProperty r = new SimpleIntegerProperty(0);
private IntegerProperty g = new SimpleIntegerProperty(0);
private IntegerProperty b = new SimpleIntegerProperty(0);
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root, 400, 400);
Group group = new Group();
Circle circle = new Circle(60);
circle.setCenterX(70);
circle.setCenterY(70);
circle.fillProperty()
.bind(Bindings.createObjectBinding(() -> Color.rgb(r.get(), g.get(), b.get()), r, g, b));
group.getChildren().add(circle);
root.setCenter(group);
Spinner<Integer> spinnerR = new Spinner<>(0, 255, 100);
Spinner<Integer> spinnerG = new Spinner<>(0, 255, 100);
Spinner<Integer> spinnerB = new Spinner<>(0, 255, 100);
r.bind(spinnerR.valueProperty());
g.bind(spinnerG.valueProperty());
b.bind(spinnerB.valueProperty());
root.setBottom(new HBox(spinnerR, spinnerG, spinnerB));
primaryStage.setScene(scene);
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
注意: DoubleProperty
。
private DoubleProperty r = new SimpleDoubleProperty(0);
private DoubleProperty g = new SimpleDoubleProperty(0);
private DoubleProperty b = new SimpleDoubleProperty(0);
circle.fillProperty().bind(Bindings.createObjectBinding(() -> Color.rgb(r.getValue().intValue(), g.getValue().intValue(), b.getValue().intValue()), r, g, b));
你可以做
DoubleProperty red = new SimpleDoubleProperty();
red.bind(Bindings.createDoubleBinding( () ->
((Color)circle.getFill()).getRed(),
circle.fillProperty()));
同样适用于绿色和蓝色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.