/************************************************** * Author: Morrison * Date: 03 Nov 202020 **************************************************/ import javafx.application.Application; import javafx.application.Platform; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; import javafx.scene.layout.BorderPane; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import java.util.ArrayList; public class Draw extends Application { private final Canvas canvas; private final GraphicsContext pen; private Color bgColor; private Color currentColor; private ArrayList drawing; private Curve curve; public Draw() { canvas = new Canvas(800, 600); pen = canvas.getGraphicsContext2D(); bgColor = Color.WHITE; currentColor = Color.BLACK; drawing = new ArrayList(); curve = null; } @Override public void init() { } @Override public void start(Stage primary) { primary.setTitle("Draw Application"); BorderPane bp = new BorderPane(); bp.setCenter(canvas); bp.setTop(buildMenus()); canvas.setOnMousePressed( e -> { curve = new Curve(currentColor, 30);//TODO: WIDTH drawing.add(curve); curve.add(new Point(e.getX(), e.getY())); }); canvas.setOnMouseDragged( e -> { curve.add(new Point(e.getX(), e.getY())); curve.draw(pen); }); canvas.setOnMouseReleased( e -> { curve.add(new Point(e.getX(), e.getY())); curve.draw(pen); }); primary.setScene(new Scene(bp)); primary.show(); } private MenuBar buildMenus() { MenuBar mbar = new MenuBar(); Menu fileMenu = new Menu("File"); MenuItem quitItem = new MenuItem("Quit"); fileMenu.setOnAction(e -> Platform.exit()); fileMenu.getItems().addAll(quitItem); Menu colorMenu = new Menu("Color"); //populate this color menu. Menu bgMenu = new Menu("Background"); Menu widthMenu = new Menu("Width"); mbar.getMenus().addAll(fileMenu, colorMenu, bgMenu, widthMenu); return mbar; } @Override public void stop() { } class ColorMenuItem extends MenuItem { private final Color color; public ColorMenuItem(Color color, String name) { super(name); this.color = color; setOnAction( e -> { currentColor = color; }); } } class BgMenuItem extends MenuItem { private final Color color; public BgMenuItem(Color color, String name) { super(name); this.color = color; setOnAction( e -> { bgColor = color; refresh(); }); } } }