我需要使用JavaFX的GraphicsContext
繪製甜甜圈形狀 - 中心有一個實心圓,以說明。JavaFX - 繪製甜甜圈
我一直在尋找,我在網上找不到任何例子。
我想你會使用fillarc
函數,但我不明白。沒有我能找到的例子,而且這些文檔沒有多大幫助。 (什麼是arcExtent
?所有文檔都說這是圓弧的程度......)
我不想填充兩個重疊的圓,因爲我想在繪圖時保持中心透明。 (我已經在下面畫了東西,我不能干涉它)
我需要使用JavaFX的GraphicsContext
繪製甜甜圈形狀 - 中心有一個實心圓,以說明。JavaFX - 繪製甜甜圈
我一直在尋找,我在網上找不到任何例子。
我想你會使用fillarc
函數,但我不明白。沒有我能找到的例子,而且這些文檔沒有多大幫助。 (什麼是arcExtent
?所有文檔都說這是圓弧的程度......)
我不想填充兩個重疊的圓,因爲我想在繪圖時保持中心透明。 (我已經在下面畫了東西,我不能干涉它)
這裏有幾個樣本解決方案,其中一個使用shape subtraction用於圈子,另一個使用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,但我不顯示在這裏。如果你想要一個3D甜甜圈,你可以創建一個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);
}
}
相關:
爲什麼downvotes?我在網上找不到任何示例 – MCMastery
因爲您沒有顯示任何代碼嘗試。 – Eric
@Eric我編輯了這個問題 – MCMastery