DrawingShapes.java


DrawingShapes.java

//package com.jfxbe;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.DropShadow;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;

/**
 * Creating Shapes
 * @author cdea
 */
public class DrawingShapes extends Application {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Application.launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Drawing Shapes");
        Group root = new Group();
        Scene scene = new Scene(root, 306, 550, Color.WHITE);

        // Sine wave
        CubicCurve cubicCurve = new CubicCurve(
                50,  /* start x point */
                75,  /* start y point */
                80,  /* control x1 point */
                -25, /* control y1 point */
                110, /* control x2 point */
                175, /* control y2 point */
                140, /* end x point */
                75); /* end y point */
        cubicCurve.setStrokeType(StrokeType.CENTERED);
        cubicCurve.setStroke(Color.BLACK);
        cubicCurve.setStrokeWidth(3);
        cubicCurve.setFill(Color.WHITE);
                
        root.getChildren().add(cubicCurve);

        // Ice cream cone
        Path path = new Path();
        path.setStrokeWidth(3);
        
        // create top part beginning on the left
        MoveTo moveTo = new MoveTo();
        moveTo.setX(50);
        moveTo.setY(150);
        
        // curve ice cream (dome)
        QuadCurveTo quadCurveTo = new QuadCurveTo();
        quadCurveTo.setX(150);
        quadCurveTo.setY(150);
        quadCurveTo.setControlX(100);
        quadCurveTo.setControlY(50);

        // cone rim
        LineTo lineTo1 = new LineTo();
        lineTo1.setX(50);
        lineTo1.setY(150);

        // left side of cone
        LineTo lineTo2 = new LineTo();
        lineTo2.setX(100);
        lineTo2.setY(275);

        // right side of cone
        LineTo lineTo3 = new LineTo();
        lineTo3.setX(150);
        lineTo3.setY(150);
        
        path.getElements().addAll(moveTo, quadCurveTo, lineTo1, lineTo2 , lineTo3);
        
        path.setTranslateY(30);
        
        root.getChildren().add(path);
        
        // A smile
        QuadCurve quad = new QuadCurve(
                50, /* start x point */
                50, /* start y point */
                125,/* control x point */
                150,/* control y point */
                150,/* end x point */
                50);/* end y point */
        quad.setTranslateY(path.getBoundsInParent().getMaxY());
        quad.setStrokeWidth(3);
        quad.setStroke(Color.BLACK);
        quad.setFill(Color.WHITE);
                
        root.getChildren().add(quad);
        
        // outer donut
        Ellipse bigCircle = new Ellipse(
                100,   /* center x */
                100,   /* center y */
                50,    /* radius x */
                75/2); /* radius y */
        bigCircle.setStrokeWidth(3);
        bigCircle.setStroke(Color.BLACK);
        bigCircle.setFill(Color.WHITE);
                
        // donut hole
        Ellipse smallCircle = new Ellipse(
                100,   /* center x */
                100,   /* center y */
                35/2,  /* radius x */
                25/2); /* radius y */
                
        // make a donut
        Shape donut = Path.subtract(bigCircle, smallCircle);
        donut.setStrokeWidth(1.8);
        donut.setStroke(Color.BLACK);
        
        // orange glaze
        donut.setFill(Color.rgb(255, 200, 0));
        
        // add drop shadow
        DropShadow dropShadow = new DropShadow(
            5,    /* radius */
            2.0f, /* offset X */
            2.0f, /* offset Y */
            Color.rgb(50, 50, 50, .588));
        
        donut.setEffect(dropShadow);
        
        // move slightly down
        donut.setTranslateY(quad.getBoundsInParent().getMinY() + 30);
        
        root.getChildren().add(donut);

        primaryStage.setScene(scene);
        primaryStage.show();
    }
}


Maintained by John Loomis, updated Fri Feb 09 12:39:30 2018