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();
});
}
}
}