import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; import javafx.scene.shape.FillRule; import javafx.stage.Stage; public class CanvasStrokeEvenOdd extends Application { public static void main(String argv[]) { launch(argv); } @Override public void start(Stage stage) { Canvas c = new Canvas(400, 200); GraphicsContext gc = c.getGraphicsContext2D(); gc.setLineWidth(30.0); gc.setStroke(Color.BLUE); // Note that fill rule should not affect stroked output... gc.setFillRule(FillRule.NON_ZERO); gc.beginPath(); gc.rect(50, 50, 100, 100); gc.stroke(); gc.setFillRule(FillRule.EVEN_ODD); gc.beginPath(); gc.rect(250, 50, 100, 100); gc.stroke(); Scene scene = new Scene(new Group(c)); scene.setFill(Color.WHITE); stage.setScene(scene); stage.show(); } }