29 October 2020

This worked to make a ColorPicker popup.


       MenuItem customColor = new MenuItem("custom...");
        colorMenu.getItems().add(customColor);
        customColor.setOnAction( choose ->
        {
            Stage popup = new Stage();
            Pane p = new Pane();
            popup.setScene(new Scene(p));
            ColorPicker cp = new ColorPicker();
            p.getChildren().add(cp);
            popup.show();
            cp.setOnAction( e ->
            {
                currentColor = cp.getValue();
                popup.close();
            });
        });

/**************************************************
*   Author: Morrison
*   Date:  29 Oct 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.layout.BorderPane;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.MenuBar;
import javafx.scene.control.ColorPicker;
import javafx.scene.paint.Color;
import java.util.ArrayList;


public class Coordinated extends Application
{
    private Stage primary;
    private Canvas canvas;
    private GraphicsContext pen;
    private Color currentColor;
    private Color bgColor;
    private ArrayList<Square> squares;
    private ArrayList<Square> redoBoneyard;
    public Coordinated()
    {
        canvas = new Canvas(800,600);
        pen = canvas.getGraphicsContext2D();
        currentColor = Color.BLACK;
        squares = new ArrayList<>();
        redoBoneyard = new ArrayList<>();
        bgColor = Color.WHITE;
    }
    
    @Override
    public void init()
    {
    }

    @Override
    public void start(Stage primary)
    {
        this.primary = primary;
        BorderPane bp = new BorderPane();
        bp.setCenter(canvas);
        bp.setTop(buildMenus());
        canvas.setOnMouseClicked( e ->
        {
                Square s = new Square(currentColor, e.getX(), e.getY(), 100);
                squares.add(s);
                s.draw(pen);
        });
        primary.setScene(new Scene(bp));
        primary.show();
    }
    private MenuBar buildMenus()
    {
        MenuBar mbar =  new MenuBar();
        Menu colorMenu = new Menu("Color");
        Menu backgroundMenu = new Menu("Background");
        Menu undoRedoMenu = new Menu("Undo/Redo");
        MenuItem undoItem = new MenuItem("Undo");
        MenuItem redoItem = new MenuItem("Redo");
        undoRedoMenu.getItems().addAll(undoItem, redoItem);
        undoItem.setOnAction( e ->
        {
            if(!squares.isEmpty())
            {
                redoBoneyard.add(squares.remove(squares.size() - 1));
                refresh();
            }
        });
        redoItem.setOnAction( e ->
        {
            if(!redoBoneyard.isEmpty())
            {
                squares.add(redoBoneyard.remove(redoBoneyard.size() - 1));
                refresh();
            }
        });
        mbar.getMenus().addAll(undoRedoMenu, backgroundMenu, colorMenu);
        colorMenu.getItems().addAll(
            new ColorMenuItem(Color.RED, "red"),
            new ColorMenuItem(Color.BLUE, "blue"),
            new ColorMenuItem(Color.GREEN, "green"),
            new ColorMenuItem(Color.ORANGE, "orange")
            );
        MenuItem customColor = new MenuItem("custom...");
        colorMenu.getItems().add(customColor);
        customColor.setOnAction( e -> 
        {
            ColorPicker cp = new ColorPicker();
            cp.show();
            currentColor = cp.getValue();
        });

        backgroundMenu.getItems().addAll(
            new BgMenuItem(Color.PINK, "pink"),
            new BgMenuItem(Color.LIGHTBLUE, "light blue"),
            new BgMenuItem(Color.WHITE, "white"),
            new BgMenuItem(Color.BLACK, "black")
            );
        return mbar;
    }
    public void refresh()
    {
        pen.setFill(bgColor);
        pen.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
        for(Square s: squares)
        {
            s.draw(pen);
        }
    }

    @Override
    public void stop()
    {
    }
    /********************** Aliens *************************/
    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();
            });
        }

    }
}