JavaFX - 绘制甜甜圈

问题描述:

我需要使用JavaFX的GraphicsContext绘制甜甜圈形状 - 中心有一个实心圆,以说明。JavaFX - 绘制甜甜圈

我一直在寻找,我在网上找不到任何例子。

我想你会使用fillarc函数,但我不明白。没有我能找到的例子,而且这些文档没有多大帮助。 (什么是arcExtent?所有文档都说这是圆弧的程度......)

我不想填充两个重叠的圆,因为我想在绘图时保持中心透明。 (我已经在下面画了东西,我不能干涉它)

+0

为什么downvotes?我在网上找不到任何示例 – MCMastery

+0

因为您没有显示任何代码尝试。 – Eric

+0

@Eric我编辑了这个问题 – MCMastery

这里有几个样本解决方案,其中一个使用shape subtraction用于圈子,另一个使用Arc。这两个示例都使用场景图进行绘制。

sample

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,但我不显示在这里。如果你想要一个3D甜甜圈,你可以创建一个Torus


这是另一个在GraphicsContext中使用fillArc的例子。

fill

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); 
    } 
} 

相关:

+0

谢谢!然而,我确实需要使用'GraphicsContext' ...我没有看到填充给定形状的任何方法,我也没有看到如何,当抚摸弧(用于第二种方法)时,我可以使用设置厚度'GraphicsContext' – MCMastery

+0

其实,我发现它:'ctx.setLineWidth'。谢谢!我使用第二种方法 – MCMastery