Skip to content

Instantly share code, notes, and snippets.

@hatimmohammed369
Created March 9, 2018 12:25
Show Gist options
  • Save hatimmohammed369/3323ec674f02da77abdea7cb695b4c61 to your computer and use it in GitHub Desktop.
Save hatimmohammed369/3323ec674f02da77abdea7cb695b4c61 to your computer and use it in GitHub Desktop.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Circle;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Modality;
import javafx.stage.StageStyle;
public class ColorPicker extends Application{
final Color CIRCLE_COLOR = Color.rgb(170, 170, 170);
final Color CIRCLE_COLOR_PRESSED = Color.rgb(50, 50, 50);
final Color CIRCLE_COLOR_MOUSE_ENTERED = Color.rgb(75, 75, 75);
final double CIRCLE_MIN_X = 69;
final double CIRCLE_MAX_X = 324;
static final HashMap<Integer, Integer> values = new HashMap<>();//x's, values
static{
int x = 69;
int value = 0;
while(value != 256)
values.put(x++, value++);
}
static <K, V> K getKey(HashMap<K, V> map, V value){
Iterator<Map.Entry<K, V>> it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry<K, V> next = it.next();
if(next.getValue().equals(value))
return next.getKey();
}
return null;
}
TextField redValueField = new TextField("0");
TextField greenValueField = new TextField("0");
TextField blueValueField = new TextField("0");
TextField opValueField = new TextField("100");
TextField webStringField = new TextField(webString());
int red(){
return Integer.parseInt(redValueField.getText().equals("") ? "0" : redValueField.getText());
}
int green(){
return Integer.parseInt(greenValueField.getText().equals("") ? "0" : greenValueField.getText());
}
int blue(){
return Integer.parseInt(blueValueField.getText().equals("") ? "0" : blueValueField.getText());
}
double opacity(){
String text = opValueField.getText();
if(text.length() == 0)
return 0;
String value = text.substring(0, text.length());
return Integer.parseInt(value) * 0.01;
}
Color color(){
return Color.rgb(red(), green(), blue(), opacity());
}
String webString(){
String red = Integer.toHexString(red()).toUpperCase();
if(red.length() == 1)
red = "0"+Integer.toHexString(red()).toUpperCase();
String green = Integer.toHexString(green()).toUpperCase();
if(green.length() == 1)
green = "0"+Integer.toHexString(green()).toUpperCase();
String blue = Integer.toHexString(blue()).toUpperCase();
if(blue.length() == 1)
blue = "0"+Integer.toHexString(blue()).toUpperCase();
return "#"+red+green+blue;
}
//-------------------------------------------------------------------------------------
private static final Rectangle redColoredBar = new Rectangle(0, 15);
private static final Rectangle greenColoredBar = new Rectangle(0, 15);
private static final Rectangle blueColoredBar = new Rectangle(0, 15);
static{
redColoredBar.setArcHeight(15);
redColoredBar.setArcWidth(15);
redColoredBar.setFill(Color.RED);
greenColoredBar.setArcHeight(15);
greenColoredBar.setArcWidth(15);
greenColoredBar.setFill(Color.rgb(0, 255, 0));
blueColoredBar.setArcHeight(15);
blueColoredBar.setArcWidth(15);
blueColoredBar.setFill(Color.rgb(0, 0, 255));
}
//-------------------------------------------------------------------------------------
@Override
public void start(Stage stage) throws Exception {
Pane root = new Pane();
root.setBackground( new Background( new BackgroundFill(Color.rgb(40, 40, 40), null, null) ) );
Rectangle previewArea = new Rectangle(400, 100);
root.getChildren().add(previewArea);
root.setOnKeyPressed((event) -> {
if(event.getCode() == KeyCode.ESCAPE){
Stage exitRequestStage = new Stage();
exitRequestStage.initModality(Modality.APPLICATION_MODAL);
exitRequestStage.initStyle(StageStyle.UTILITY);
Pane exitRequestStageRootPane = new Pane();
exitRequestStageRootPane.setBackground( new Background( new BackgroundFill(Color.WHITE, null, null) ) );
Label msg = new Label("Do you want to exit ColorPicker?");
msg.setFont(Font.font(15));
msg.setTextFill(Color.BLUE);
Button yes = new Button("Yes");
yes.setFont(Font.font(15));
yes.setOnAction((Event) -> System.exit(0));
yes.setPrefSize(100, 30);
Button no = new Button("No");
no.setFont(Font.font(15));
no.setOnAction((Event) -> exitRequestStage.close());
no.setPrefSize(100, 30);
Rectangle rect = new Rectangle(300, 50);
rect.setFill(Color.rgb(220, 220, 220));
exitRequestStageRootPane.getChildren().addAll(msg, rect, yes, no);
msg.relocate(10, 10);
rect.relocate(0, 50);
yes.relocate(30, 55);
no.relocate(160, 55);
exitRequestStage.setScene(new Scene(exitRequestStageRootPane, 300, 100));
exitRequestStage.show();
}
});
//--------------------------------------------------------------------------------
Label redMsg = new Label("Red:");
redMsg.setTextFill(Color.rgb(255, 0, 0));
redMsg.setFont(Font.font(15));
Rectangle redBar = new Rectangle(273, 15, Color.WHITE);
redBar.setArcHeight(15);
redBar.setArcWidth(15);
redBar.setOpacity(.3);
Circle redCircle = new Circle(10, CIRCLE_COLOR);
redValueField.setShape(new Rectangle(50, 6));
redValueField.setPrefSize(50, 6);
root.getChildren().addAll(redMsg, redColoredBar, redBar, redCircle, redValueField);
redMsg.relocate(5, 106);
redBar.relocate(60, 110);
redColoredBar.relocate(60, 110);
redCircle.relocate(59, 108.1);
redValueField.relocate(340, 105.5);
redValueField.setOnKeyReleased((event) -> {
String text = redValueField.getText();
if(text.equals("")){
redCircle.setLayoutX(CIRCLE_MIN_X);
previewArea.setFill(Color.BLACK);
}else{
int value = Integer.parseInt(text);
redCircle.setLayoutX(getKey(values, value));
previewArea.setFill(color());
}
webStringField.setText(webString());
double barWidth = (getKey(values, Integer.parseInt(text)) - CIRCLE_MIN_X)+10;
redColoredBar.setWidth(barWidth);
});
redCircle.setOnMouseDragged((event) -> {
double x = event.getSceneX();
if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
redCircle.setLayoutX(x);
redValueField.setText( String.valueOf( values.get((int)x) ) );
previewArea.setFill(color());
webStringField.setText(webString());
double barWidth = (x - CIRCLE_MIN_X)+10;
redColoredBar.setWidth(barWidth);
}
});
redCircle.setOnMousePressed((event) -> redCircle.setFill(CIRCLE_COLOR_PRESSED));
redCircle.setOnMouseEntered((event) -> redCircle.setFill(CIRCLE_COLOR_MOUSE_ENTERED));
redCircle.setOnMouseReleased((event) -> redCircle.setFill(CIRCLE_COLOR));
redCircle.setOnMouseExited((event) -> redCircle.setFill(CIRCLE_COLOR));
redBar.setOnMousePressed((event) -> {
double x = event.getSceneX();
if(x < CIRCLE_MIN_X || x > CIRCLE_MAX_X)
return;
redCircle.setLayoutX(x);
int value = values.get( (int)x );
redValueField.setText(String.valueOf( value ));
previewArea.setFill(color());
webStringField.setText(webString());
double barWidth = (x - CIRCLE_MIN_X)+10;
redColoredBar.setWidth(barWidth);
});
redBar.setOnMouseDragged((event) -> {
double x = event.getSceneX();
if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
redCircle.setLayoutX(x);
redValueField.setText( String.valueOf( values.get((int)x) ) );
previewArea.setFill(color());
webStringField.setText(webString());
double barWidth = (x - CIRCLE_MIN_X)+10;
redColoredBar.setWidth(barWidth);
}
});
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
Label greenMsg = new Label("Green:");
greenMsg.setTextFill(Color.rgb(0, 255, 0));
greenMsg.setFont(Font.font(15));
Rectangle greenBar = new Rectangle(273, 15, Color.WHITE);
greenBar.setArcHeight(15);
greenBar.setArcWidth(15);
greenBar.setOpacity(.3);
Circle greenCircle = new Circle(10, CIRCLE_COLOR);
greenValueField.setShape(new Rectangle(50, 6));
greenValueField.setPrefSize(50, 6);
root.getChildren().addAll(greenMsg, greenColoredBar, greenBar, greenCircle, greenValueField);
greenMsg.relocate(5, 140);
greenBar.relocate(60, 144);//124
greenColoredBar.relocate(60, 144);
greenCircle.relocate(59, 142.1);//122.1
greenValueField.relocate(340, 139.5);//120.5
greenValueField.setOnKeyReleased((event) -> {
String text = greenValueField.getText();
if(text.equals("")){
greenCircle.setLayoutX(CIRCLE_MIN_X);
previewArea.setFill(color());
}else{
int value = Integer.parseInt(text);
greenCircle.setLayoutX(getKey(values, value));
previewArea.setFill(color());
}
webStringField.setText(webString());
double barWidth = (getKey(values, Integer.parseInt(text)) - CIRCLE_MIN_X)+10;
greenColoredBar.setWidth(barWidth);
});
greenCircle.setOnMouseDragged((event) -> {
double x = event.getSceneX();
if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
greenCircle.setLayoutX(x);
greenValueField.setText( String.valueOf( values.get((int)x) ) );
previewArea.setFill(color());
webStringField.setText(webString());
double barWidth = (x - CIRCLE_MIN_X)+10;
greenColoredBar.setWidth(barWidth);
}
});
greenCircle.setOnMousePressed((event) -> greenCircle.setFill(CIRCLE_COLOR_PRESSED));
greenCircle.setOnMouseEntered((event) -> greenCircle.setFill(CIRCLE_COLOR_MOUSE_ENTERED));
greenCircle.setOnMouseReleased((event) -> greenCircle.setFill(CIRCLE_COLOR));
greenCircle.setOnMouseExited((event) -> greenCircle.setFill(CIRCLE_COLOR));
greenBar.setOnMousePressed((event) -> {
double x = event.getSceneX();
if(x < CIRCLE_MIN_X || x > CIRCLE_MAX_X)
return;
greenCircle.setLayoutX(x);
int value = values.get( (int)x );
greenValueField.setText(String.valueOf( value ));
previewArea.setFill(color());
webStringField.setText(webString());
double barWidth = (x - CIRCLE_MIN_X)+10;
greenColoredBar.setWidth(barWidth);
});
greenBar.setOnMouseDragged((event) -> {
double x = event.getSceneX();
if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
greenCircle.setLayoutX(x);
greenValueField.setText( String.valueOf( values.get((int)x) ) );
previewArea.setFill(color());
webStringField.setText(webString());
double barWidth = (x - CIRCLE_MIN_X)+10;
greenColoredBar.setWidth(barWidth);
}
});
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
Label blueMsg = new Label("Blue:");
blueMsg.setTextFill(Color.rgb(0, 0, 255));
blueMsg.setFont(Font.font(15));
Rectangle blueBar = new Rectangle(273, 15, Color.WHITE);
blueBar.setArcHeight(15);
blueBar.setArcWidth(15);
blueBar.setOpacity(.3);
Circle blueCircle = new Circle(10, CIRCLE_COLOR);
blueValueField.setShape(new Rectangle(50, 6));
blueValueField.setPrefSize(50, 6);
root.getChildren().addAll(blueMsg, blueColoredBar, blueBar, blueCircle, blueValueField);
blueMsg.relocate(5, 174);
blueBar.relocate(60, 177);//124
blueColoredBar.relocate(60, 177);
blueCircle.relocate(59, 175.1);//122.1
blueValueField.relocate(340, 173.5);//120.5
blueValueField.setOnKeyReleased((event) -> {
String text = blueValueField.getText();
if(text.equals("")){
blueCircle.setLayoutX(CIRCLE_MIN_X);
previewArea.setFill(color());
}else{
int value = Integer.parseInt(text);
blueCircle.setLayoutX(getKey(values, value));
previewArea.setFill(color());
}
webStringField.setText(webString());
double barWidth = (getKey(values, Integer.parseInt(text)) - CIRCLE_MIN_X)+10;
blueColoredBar.setWidth(barWidth);
});
blueCircle.setOnMouseDragged((event) -> {
double x = event.getSceneX();
if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
blueCircle.setLayoutX(x);
blueValueField.setText( String.valueOf( values.get((int)x) ) );
previewArea.setFill(color());
webStringField.setText(webString());
double barWidth = (x - CIRCLE_MIN_X)+10;
blueColoredBar.setWidth(barWidth);
}
});
blueCircle.setOnMousePressed((event) -> blueCircle.setFill(CIRCLE_COLOR_PRESSED));
blueCircle.setOnMouseEntered((event) -> blueCircle.setFill(CIRCLE_COLOR_MOUSE_ENTERED));
blueCircle.setOnMouseReleased((event) -> blueCircle.setFill(CIRCLE_COLOR));
blueCircle.setOnMouseExited((event) -> blueCircle.setFill(CIRCLE_COLOR));
blueBar.setOnMousePressed((event) -> {
double x = event.getSceneX();
if(x < CIRCLE_MIN_X || x > CIRCLE_MAX_X)
return;
blueCircle.setLayoutX(x);
int value = values.get( (int)x );
blueValueField.setText(String.valueOf( value ));
previewArea.setFill(color());
webStringField.setText(webString());
double barWidth = (x - CIRCLE_MIN_X)+10;
blueColoredBar.setWidth(barWidth);
});
blueBar.setOnMouseDragged((event) -> {
double x = event.getSceneX();
if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
blueCircle.setLayoutX(x);
blueValueField.setText( String.valueOf( values.get((int)x) ) );
previewArea.setFill(color());
webStringField.setText(webString());
double barWidth = (x - CIRCLE_MIN_X)+10;
blueColoredBar.setWidth(barWidth);
}
});
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
Label opMsg = new Label("Opacity(%):");
opMsg.setTextFill(Color.WHITE);
opMsg.setFont(Font.font(15));
{
Rectangle rect = new Rectangle(60, 20);
rect.setArcHeight(10);
rect.setArcWidth(10);
opValueField.setShape(rect);
opValueField.setBackground( new Background( new BackgroundFill(Color.rgb(140, 140, 140), null, null) ) );
opValueField.setStyle("-fx-font: normal 15px 'system';"
+ "-fx-text-fill: white");
opValueField.setOpacity(0.7);
}
opValueField.setPrefSize(60, 20);
opValueField.setAlignment(Pos.CENTER);
root.getChildren().addAll(opMsg, opValueField);
opMsg.relocate(5, 212);
opValueField.relocate(85, 208);
opValueField.setFont(Font.font(14));
opValueField.setOnKeyReleased((event) -> {
if(opValueField.getText().length() == 0){
previewArea.setFill(Color.rgb(red(), green(), blue(), 0));
}
previewArea.setFill(color());
});
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
Label webMsg1 = new Label("Web");
webMsg1.setFont(Font.font("System", FontWeight.BOLD, 15));
webMsg1.setTextFill(Color.rgb(255, 0, 0));
Label webMsg2 = new Label("Str");
webMsg2.setFont(Font.font("System", FontWeight.BOLD, 15));
webMsg2.setTextFill(Color.rgb(0, 255, 0));
Label webMsg3 = new Label("ing");
webMsg3.setFont(Font.font("System", FontWeight.BOLD, 15));
webMsg3.setTextFill(Color.rgb(0, 0, 255));
Label columnMsg = new Label(":");
columnMsg.setFont(Font.font("System", FontWeight.BOLD, 15));
columnMsg.setTextFill(Color.WHITE);
{
Rectangle rect = new Rectangle(100, 20);
rect.setArcHeight(10);
rect.setArcWidth(10);
webStringField.setShape(rect);
webStringField.setPrefSize(100, 20);
webStringField.setBackground( new Background( new BackgroundFill(Color.rgb(140, 140, 140), null, null) ) );
webStringField.setStyle("-fx-font: normal 15px 'system';"
+ "-fx-text-fill: white");
webStringField.setOpacity(0.7);
}
root.getChildren().addAll(webMsg1, webMsg2, webMsg3, columnMsg, webStringField);
webMsg1.relocate(205, 212);
webMsg2.relocate(244, 212);
webMsg3.relocate(263, 212);
columnMsg.relocate(284, 212);
webStringField.relocate(290, 208);
webStringField.setFont(Font.font(15));
webStringField.setEditable(false);
//--------------------------------------------------------------------------------
stage.setResizable(false);
stage.setScene(new Scene(root, 390, 240));
stage.setTitle("ColorPicker");
stage.show();
}
public static void main(String[] args){
Application.launch(args);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment