CanvasShapesController.java
// Fig. 22.14: CanvasShapesController.java // Drawing on a Canvas. import javafx.fxml.FXML; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.image.Image; import javafx.scene.paint.Color; import javafx.scene.paint.CycleMethod; import javafx.scene.paint.ImagePattern; import javafx.scene.paint.LinearGradient; import javafx.scene.paint.RadialGradient; import javafx.scene.paint.Stop; import javafx.scene.shape.ArcType; import javafx.scene.shape.StrokeLineCap; public class CanvasShapesController { // instance variables that refer to GUI components @FXML private Canvas drawingCanvas; // draw on the Canvas public void initialize() { GraphicsContext gc = drawingCanvas.getGraphicsContext2D(); gc.setLineWidth(10); // set all stroke widths // draw red line gc.setStroke(Color.RED); gc.strokeLine(10, 10, 100, 100); // draw green line gc.setGlobalAlpha(0.5); // half transparent gc.setLineCap(StrokeLineCap.ROUND); gc.setStroke(Color.GREEN); gc.strokeLine(100, 10, 10, 100); gc.setGlobalAlpha(1.0); // reset alpha transparency // draw rounded rect with red border and yellow fill gc.setStroke(Color.RED); gc.setFill(Color.YELLOW); gc.fillRoundRect(120, 10, 90, 90, 50, 50); gc.strokeRoundRect(120, 10, 90, 90, 50, 50); // draw circle with blue border and red/white radial gradient fill gc.setStroke(Color.BLUE); Stop[] stopsRadial = {new Stop(0, Color.RED), new Stop(1, Color.WHITE)}; RadialGradient radialGradient = new RadialGradient(0, 0, 0.5, 0.5, 0.6, true, CycleMethod.NO_CYCLE, stopsRadial); gc.setFill(radialGradient); gc.fillOval(230, 10, 90, 90); gc.strokeOval(230, 10, 90, 90); // draw ellipse with green border and image fill gc.setStroke(Color.GREEN); gc.setFill(new ImagePattern(new Image("yellowflowers.png"))); gc.fillOval(340, 10, 200, 90); gc.strokeOval(340, 10, 200, 90); // draw arc with purple border and cyan/white linear gradient fill gc.setStroke(Color.PURPLE); Stop[] stopsLinear = {new Stop(0, Color.CYAN), new Stop(1, Color.WHITE)}; LinearGradient linearGradient = new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stopsLinear); gc.setFill(linearGradient); gc.fillArc(560, 10, 90, 90, 45, 270, ArcType.ROUND); gc.strokeArc(560, 10, 90, 90, 45, 270, ArcType.ROUND); } }
Maintained by John Loomis, updated Sat Feb 10 10:38:12 2018