Вы не можете по-настоящему сделать холст круглым.Вы можете предотвратить рендеринг всего, что находится за пределами круглой области.
Это можно сделать, установив свойство clip
для Canvas
:
@Override
public void start(Stage primaryStage) throws Exception {
final double size = 400;
final double radius = size / 2;
Canvas canvas = new Canvas(size, size);
canvas.setClip(new Circle(radius, radius, radius));
GraphicsContext gc = canvas.getGraphicsContext2D();
// draw something
final double padding = 25;
gc.fillRect(padding, padding, size - padding * 2, size - padding * 2);
primaryStage.setScene(new Scene(new Group(canvas)));
primaryStage.show();
}
или обрезав нарисованноесодержимое с использованием пути и GraphicsContext.clip
:
@Override
public void start(Stage primaryStage) throws Exception {
final double size = 400;
final double radius = size / 2;
Canvas canvas = new Canvas(size, size);
GraphicsContext gc = canvas.getGraphicsContext2D();
// create path for circle
gc.beginPath();
gc.arc(radius, radius, radius, radius, 0, 360);
gc.closePath();
// apply path as clip
gc.clip();
// draw something
final double padding = 25;
gc.fillRect(padding, padding, size - padding * 2, size - padding * 2);
primaryStage.setScene(new Scene(new Group(canvas)));
primaryStage.show();
}