Voici quelques exemples de solutions, l'une utilise shape subtraction pour les cercles, l'autre utilise un Arc. Les deux exemples utilisent le graphe de scène pour dessiner.
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);
}
}
Une solution alternative pourrait également utiliser un Path avec des segments d'arc et de ligne, mais je ne montre pas ici. Si vous vouliez un donut 3D, vous pouvez créer un Torus.
Voici un autre exemple qui utilise fillArc dans un GraphicsContext.
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);
}
}
connexes:
Pourquoi les downvotes? Je ne trouve aucun exemple en ligne – MCMastery
Parce que vous n'avez montré aucune tentative de code. – Eric
@Eric j'ai édité la question – MCMastery