gpt4 book ai didi

javafx - 画一个半圆环-JavaFX

转载 作者:行者123 更新时间:2023-12-04 09:41:34 30 4
gpt4 key购买 nike

我想知道如何在JavaFX中绘制半圆。我尝试使用Shape和QuadCurve,但无法制作出完美的半圆。

这是我要绘制的图片:

最佳答案

您链接的图片实际上是一个半圆环。您可以通过绘制嵌套的2条圆弧和一些直线在JavaFX中获得它。但是我的首选方式是使用Path

public class SemiDemo extends Application {

@Override
public void start(Stage primaryStage) {

Group root = new Group();
root.getChildren().add(drawSemiRing(120, 120, 100, 50, Color.LIGHTGREEN, Color.DARKGREEN));
root.getChildren().add(drawSemiRing(350, 350, 200, 30, Color.LIGHTSKYBLUE, Color.DARKBLUE));

Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}

private Path drawSemiRing(double centerX, double centerY, double radius, double innerRadius, Color bgColor, Color strkColor) {
Path path = new Path();
path.setFill(bgColor);
path.setStroke(strkColor);
path.setFillRule(FillRule.EVEN_ODD);

MoveTo moveTo = new MoveTo();
moveTo.setX(centerX + innerRadius);
moveTo.setY(centerY);

ArcTo arcToInner = new ArcTo();
arcToInner.setX(centerX - innerRadius);
arcToInner.setY(centerY);
arcToInner.setRadiusX(innerRadius);
arcToInner.setRadiusY(innerRadius);

MoveTo moveTo2 = new MoveTo();
moveTo2.setX(centerX + innerRadius);
moveTo2.setY(centerY);

HLineTo hLineToRightLeg = new HLineTo();
hLineToRightLeg.setX(centerX + radius);

ArcTo arcTo = new ArcTo();
arcTo.setX(centerX - radius);
arcTo.setY(centerY);
arcTo.setRadiusX(radius);
arcTo.setRadiusY(radius);

HLineTo hLineToLeftLeg = new HLineTo();
hLineToLeftLeg.setX(centerX - innerRadius);

path.getElements().add(moveTo);
path.getElements().add(arcToInner);
path.getElements().add(moveTo2);
path.getElements().add(hLineToRightLeg);
path.getElements().add(arcTo);
path.getElements().add(hLineToLeftLeg);

return path;
}

public static void main(String[] args) {
launch(args);
}
}

有关代码中使用的形状的更多信息,请引用JavaFX的 Shape API
截屏:

关于javafx - 画一个半圆环-JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719005/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com