JavaFX - 绘制甜甜圈
JavaFX - draw donut
我需要使用 JavaFX 绘制一个甜甜圈形状 GraphicsContext
- 一个中间有孔的实心圆,以说明。
我一直在搜索,但在网上找不到任何示例。
我想你会使用 fillarc
功能,但我不明白。没有我能找到的例子,文档也帮不上什么忙。 (什么是 arcExtent
?所有文档都说它是圆弧的范围...)
我不想填充两个重叠的圆圈,因为我想在绘制时保持中心透明。 (下面已经画好了,不能乱动)
这里有几个示例解决方案,一个使用 shape subtraction for circles, another uses an Arc。两个示例都使用场景图进行绘制。
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;
public class DonutHole extends Application {
@Override
public void start(Stage stage) throws Exception {
// donut by shape subtraction.
Circle whole = new Circle(20, 20, 20);
Circle inside = new Circle(20, 20, 10);
Shape donutShape = Shape.subtract(whole, inside);
donutShape.setFill(Color.BLUE);
// donut by arc.
Arc donutArc = new Arc(60, 20, 10, 10, 0, 360);
donutArc.setStrokeWidth(10);
donutArc.setStrokeType(StrokeType.OUTSIDE);
donutArc.setStroke(Color.RED);
donutArc.setStrokeLineCap(StrokeLineCap.BUTT);
donutArc.setFill(null);
Scene scene = new Scene(new Group(donutShape, donutArc), Color.PALEGREEN);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
另一种解决方案也可以使用 Path with arc and line segments, but I don't show that here. If you wanted a 3D donut, you could create a Torus。
这是另一个在 GraphicsContext 中使用 fillArc 的示例。
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.canvas.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;
public class DonutHoleGraphics extends Application {
@Override
public void start(Stage stage) throws Exception {
Canvas canvas = new Canvas(40, 40);
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setLineWidth(10);
gc.setStroke(Color.YELLOW);
gc.setLineCap(StrokeLineCap.BUTT);
gc.strokeArc(5, 5, 30, 30, 0, 360, ArcType.OPEN);
Scene scene = new Scene(new Group(canvas), Color.PALEGREEN);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
相关:
- Draw a semi ring - JavaFX
我需要使用 JavaFX 绘制一个甜甜圈形状 GraphicsContext
- 一个中间有孔的实心圆,以说明。
我一直在搜索,但在网上找不到任何示例。
我想你会使用 fillarc
功能,但我不明白。没有我能找到的例子,文档也帮不上什么忙。 (什么是 arcExtent
?所有文档都说它是圆弧的范围...)
我不想填充两个重叠的圆圈,因为我想在绘制时保持中心透明。 (下面已经画好了,不能乱动)
这里有几个示例解决方案,一个使用 shape subtraction for circles, another uses an Arc。两个示例都使用场景图进行绘制。
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;
public class DonutHole extends Application {
@Override
public void start(Stage stage) throws Exception {
// donut by shape subtraction.
Circle whole = new Circle(20, 20, 20);
Circle inside = new Circle(20, 20, 10);
Shape donutShape = Shape.subtract(whole, inside);
donutShape.setFill(Color.BLUE);
// donut by arc.
Arc donutArc = new Arc(60, 20, 10, 10, 0, 360);
donutArc.setStrokeWidth(10);
donutArc.setStrokeType(StrokeType.OUTSIDE);
donutArc.setStroke(Color.RED);
donutArc.setStrokeLineCap(StrokeLineCap.BUTT);
donutArc.setFill(null);
Scene scene = new Scene(new Group(donutShape, donutArc), Color.PALEGREEN);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
另一种解决方案也可以使用 Path with arc and line segments, but I don't show that here. If you wanted a 3D donut, you could create a Torus。
这是另一个在 GraphicsContext 中使用 fillArc 的示例。
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.canvas.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;
public class DonutHoleGraphics extends Application {
@Override
public void start(Stage stage) throws Exception {
Canvas canvas = new Canvas(40, 40);
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setLineWidth(10);
gc.setStroke(Color.YELLOW);
gc.setLineCap(StrokeLineCap.BUTT);
gc.strokeArc(5, 5, 30, 30, 0, 360, ArcType.OPEN);
Scene scene = new Scene(new Group(canvas), Color.PALEGREEN);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
相关:
- Draw a semi ring - JavaFX