2017-07-28 150 views
-1

我需要使用JavaFX的GraphicsContext繪製甜甜圈形狀 - 中心有一個實心圓,以說明。JavaFX - 繪製甜甜圈

我一直在尋找,我在網上找不到任何例子。

我想你會使用fillarc函數,但我不明白。沒有我能找到的例子,而且這些文檔沒有多大幫助。 (什麼是arcExtent?所有文檔都說這是圓弧的程度......)

我不想填充兩個重疊的圓,因爲我想在繪圖時保持中心透明。 (我已經在下面畫了東西,我不能干涉它)

+0

爲什麼downvotes?我在網上找不到任何示例 – MCMastery

+0

因爲您沒有顯示任何代碼嘗試。 – Eric

+0

@Eric我編輯了這個問題 – MCMastery

回答

1

這裏有幾個樣本解決方案,其中一個使用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