Created
March 9, 2018 12:25
-
-
Save hatimmohammed369/3323ec674f02da77abdea7cb695b4c61 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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