CanvasShapesController.java


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