2017-07-28 6 views
-1

JavaFXのGraphicsContext - 中央に穴が空いた円を使ってドーナツの形を描く必要があります。JavaFX - ドローイング

私は検索しており、オンラインでの例は見つかりません。

fillarc機能を使用すると思いますが、わかりません。私が見つけることができる例はなく、ドキュメントはあまり役に立たない。 (arcExtentとは何ですか?すべての文書は、円弧の範囲だと言っています...)

2つの重なっている円を塗り潰したくありません。 (私はすでに下に物を描きましたが、私はそれを妨げることはできません)

+0

なぜdownvotes?私はどの例もオンラインで見つけることができません – MCMastery

+0

あなたはコードの試行を見せなかったので、 – Eric

+0

@エリック私は質問 – MCMastery

答えて

1

ここでは、円の代わりにshape subtractionを使用し、もう1つは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'を使う必要があります...私は与えられた図形を塗りつぶすためのメソッドが表示されません、また、私は、あなたの2番目のメソッドのために弧を描くときに、 'GraphicsContext' – MCMastery

+0

実際、私はそれを見つけました:' ctx.setLineWidth'。ありがとう!私は第2の方法を使用した – MCMastery

関連する問題