Guest User

Untitled

a guest
Mar 18th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.36 KB | None | 0 0
  1. import java.util.HashMap;
  2. import java.util.Iterator;
  3. import java.util.Map;
  4. import javafx.application.Application;
  5. import javafx.geometry.Pos;
  6. import javafx.stage.Stage;
  7. import javafx.scene.Scene;
  8. import javafx.scene.control.Button;
  9. import javafx.scene.control.Label;
  10. import javafx.scene.shape.Rectangle;
  11. import javafx.scene.shape.Circle;
  12. import javafx.scene.control.TextField;
  13. import javafx.scene.input.KeyCode;
  14. import javafx.scene.layout.Background;
  15. import javafx.scene.layout.BackgroundFill;
  16. import javafx.scene.layout.Pane;
  17. import javafx.scene.paint.Color;
  18. import javafx.scene.text.Font;
  19. import javafx.scene.text.FontWeight;
  20. import javafx.stage.Modality;
  21. import javafx.stage.StageStyle;
  22.  
  23. public class ColorPicker extends Application{
  24. final Color CIRCLE_COLOR = Color.rgb(170, 170, 170);
  25. final Color CIRCLE_COLOR_PRESSED = Color.rgb(50, 50, 50);
  26. final Color CIRCLE_COLOR_MOUSE_ENTERED = Color.rgb(75, 75, 75);
  27.  
  28.  
  29. final double CIRCLE_MIN_X = 69;
  30. final double CIRCLE_MAX_X = 324;
  31.  
  32. static final HashMap<Integer, Integer> values = new HashMap<>();//x's, values
  33. static{
  34. int x = 69;
  35. int value = 0;
  36. while(value != 256)
  37. values.put(x++, value++);
  38. }
  39.  
  40. static <K, V> K getKey(HashMap<K, V> map, V value){
  41. Iterator<Map.Entry<K, V>> it = map.entrySet().iterator();
  42. while(it.hasNext()){
  43. Map.Entry<K, V> next = it.next();
  44. if(next.getValue().equals(value))
  45. return next.getKey();
  46. }
  47. return null;
  48. }
  49.  
  50. TextField redValueField = new TextField("0");
  51. TextField greenValueField = new TextField("0");
  52. TextField blueValueField = new TextField("0");
  53. TextField opValueField = new TextField("100");
  54.  
  55. TextField webStringField = new TextField(webString());
  56.  
  57. int red(){
  58. return Integer.parseInt(redValueField.getText().equals("") ? "0" : redValueField.getText());
  59. }
  60.  
  61. int green(){
  62. return Integer.parseInt(greenValueField.getText().equals("") ? "0" : greenValueField.getText());
  63. }
  64.  
  65. int blue(){
  66. return Integer.parseInt(blueValueField.getText().equals("") ? "0" : blueValueField.getText());
  67. }
  68.  
  69. double opacity(){
  70. String text = opValueField.getText();
  71. if(text.length() == 0)
  72. return 0;
  73. String value = text.substring(0, text.length());
  74. return Integer.parseInt(value) * 0.01;
  75. }
  76.  
  77. Color color(){
  78. return Color.rgb(red(), green(), blue(), opacity());
  79. }
  80.  
  81. String webString(){
  82. String red = Integer.toHexString(red()).toUpperCase();
  83. if(red.length() == 1)
  84. red = "0"+Integer.toHexString(red()).toUpperCase();
  85.  
  86. String green = Integer.toHexString(green()).toUpperCase();
  87. if(green.length() == 1)
  88. green = "0"+Integer.toHexString(green()).toUpperCase();
  89.  
  90. String blue = Integer.toHexString(blue()).toUpperCase();
  91. if(blue.length() == 1)
  92. blue = "0"+Integer.toHexString(blue()).toUpperCase();
  93. return "#"+red+green+blue;
  94. }
  95. //-------------------------------------------------------------------------------------
  96. private static final Rectangle redColoredBar = new Rectangle(0, 15);
  97. private static final Rectangle greenColoredBar = new Rectangle(0, 15);
  98. private static final Rectangle blueColoredBar = new Rectangle(0, 15);
  99.  
  100. static{
  101. redColoredBar.setArcHeight(15);
  102. redColoredBar.setArcWidth(15);
  103. redColoredBar.setFill(Color.RED);
  104.  
  105. greenColoredBar.setArcHeight(15);
  106. greenColoredBar.setArcWidth(15);
  107. greenColoredBar.setFill(Color.rgb(0, 255, 0));
  108.  
  109. blueColoredBar.setArcHeight(15);
  110. blueColoredBar.setArcWidth(15);
  111. blueColoredBar.setFill(Color.rgb(0, 0, 255));
  112. }
  113. //-------------------------------------------------------------------------------------
  114. @Override
  115. public void start(Stage stage) throws Exception {
  116. Pane root = new Pane();
  117. root.setBackground( new Background( new BackgroundFill(Color.rgb(40, 40, 40), null, null) ) );
  118.  
  119. Rectangle previewArea = new Rectangle(400, 100);
  120.  
  121. root.getChildren().add(previewArea);
  122.  
  123. root.setOnKeyPressed((event) -> {
  124. if(event.getCode() == KeyCode.ESCAPE){
  125. Stage exitRequestStage = new Stage();
  126. exitRequestStage.initModality(Modality.APPLICATION_MODAL);
  127. exitRequestStage.initStyle(StageStyle.UTILITY);
  128.  
  129. Pane exitRequestStageRootPane = new Pane();
  130. exitRequestStageRootPane.setBackground( new Background( new BackgroundFill(Color.WHITE, null, null) ) );
  131.  
  132. Label msg = new Label("Do you want to exit ColorPicker?");
  133. msg.setFont(Font.font(15));
  134. msg.setTextFill(Color.BLUE);
  135.  
  136. Button yes = new Button("Yes");
  137. yes.setFont(Font.font(15));
  138. yes.setOnAction((Event) -> System.exit(0));
  139. yes.setPrefSize(100, 30);
  140.  
  141. Button no = new Button("No");
  142. no.setFont(Font.font(15));
  143. no.setOnAction((Event) -> exitRequestStage.close());
  144. no.setPrefSize(100, 30);
  145.  
  146. Rectangle rect = new Rectangle(300, 50);
  147. rect.setFill(Color.rgb(220, 220, 220));
  148.  
  149. exitRequestStageRootPane.getChildren().addAll(msg, rect, yes, no);
  150. msg.relocate(10, 10);
  151. rect.relocate(0, 50);
  152. yes.relocate(30, 55);
  153. no.relocate(160, 55);
  154.  
  155. exitRequestStage.setScene(new Scene(exitRequestStageRootPane, 300, 100));
  156. exitRequestStage.show();
  157. }
  158. });
  159.  
  160. //--------------------------------------------------------------------------------
  161. Label redMsg = new Label("Red:");
  162. redMsg.setTextFill(Color.rgb(255, 0, 0));
  163. redMsg.setFont(Font.font(15));
  164.  
  165. Rectangle redBar = new Rectangle(273, 15, Color.WHITE);
  166. redBar.setArcHeight(15);
  167. redBar.setArcWidth(15);
  168. redBar.setOpacity(.3);
  169. Circle redCircle = new Circle(10, CIRCLE_COLOR);
  170.  
  171. redValueField.setShape(new Rectangle(50, 6));
  172. redValueField.setPrefSize(50, 6);
  173.  
  174. root.getChildren().addAll(redMsg, redColoredBar, redBar, redCircle, redValueField);
  175.  
  176. redMsg.relocate(5, 106);
  177. redBar.relocate(60, 110);
  178. redColoredBar.relocate(60, 110);
  179. redCircle.relocate(59, 108.1);
  180. redValueField.relocate(340, 105.5);
  181. redValueField.setOnKeyReleased((event) -> {
  182. String text = redValueField.getText();
  183. if(text.equals("")){
  184. redCircle.setLayoutX(CIRCLE_MIN_X);
  185. previewArea.setFill(Color.BLACK);
  186. }else{
  187. int value = Integer.parseInt(text);
  188. redCircle.setLayoutX(getKey(values, value));
  189. previewArea.setFill(color());
  190. }
  191. webStringField.setText(webString());
  192. double barWidth = (getKey(values, Integer.parseInt(text)) - CIRCLE_MIN_X)+10;
  193. redColoredBar.setWidth(barWidth);
  194. });
  195.  
  196. redCircle.setOnMouseDragged((event) -> {
  197. double x = event.getSceneX();
  198. if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
  199. redCircle.setLayoutX(x);
  200. redValueField.setText( String.valueOf( values.get((int)x) ) );
  201. previewArea.setFill(color());
  202. webStringField.setText(webString());
  203. double barWidth = (x - CIRCLE_MIN_X)+10;
  204. redColoredBar.setWidth(barWidth);
  205. }
  206. });
  207.  
  208. redCircle.setOnMousePressed((event) -> redCircle.setFill(CIRCLE_COLOR_PRESSED));
  209. redCircle.setOnMouseEntered((event) -> redCircle.setFill(CIRCLE_COLOR_MOUSE_ENTERED));
  210.  
  211. redCircle.setOnMouseReleased((event) -> redCircle.setFill(CIRCLE_COLOR));
  212. redCircle.setOnMouseExited((event) -> redCircle.setFill(CIRCLE_COLOR));
  213.  
  214. redBar.setOnMousePressed((event) -> {
  215. double x = event.getSceneX();
  216. if(x < CIRCLE_MIN_X || x > CIRCLE_MAX_X)
  217. return;
  218. redCircle.setLayoutX(x);
  219. int value = values.get( (int)x );
  220. redValueField.setText(String.valueOf( value ));
  221. previewArea.setFill(color());
  222. webStringField.setText(webString());
  223. double barWidth = (x - CIRCLE_MIN_X)+10;
  224. redColoredBar.setWidth(barWidth);
  225. });
  226.  
  227. redBar.setOnMouseDragged((event) -> {
  228. double x = event.getSceneX();
  229. if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
  230. redCircle.setLayoutX(x);
  231. redValueField.setText( String.valueOf( values.get((int)x) ) );
  232. previewArea.setFill(color());
  233. webStringField.setText(webString());
  234. double barWidth = (x - CIRCLE_MIN_X)+10;
  235. redColoredBar.setWidth(barWidth);
  236. }
  237. });
  238. //--------------------------------------------------------------------------------
  239.  
  240. //--------------------------------------------------------------------------------
  241. Label greenMsg = new Label("Green:");
  242. greenMsg.setTextFill(Color.rgb(0, 255, 0));
  243. greenMsg.setFont(Font.font(15));
  244.  
  245. Rectangle greenBar = new Rectangle(273, 15, Color.WHITE);
  246. greenBar.setArcHeight(15);
  247. greenBar.setArcWidth(15);
  248. greenBar.setOpacity(.3);
  249. Circle greenCircle = new Circle(10, CIRCLE_COLOR);
  250.  
  251. greenValueField.setShape(new Rectangle(50, 6));
  252. greenValueField.setPrefSize(50, 6);
  253.  
  254. root.getChildren().addAll(greenMsg, greenColoredBar, greenBar, greenCircle, greenValueField);
  255.  
  256. greenMsg.relocate(5, 140);
  257. greenBar.relocate(60, 144);//124
  258. greenColoredBar.relocate(60, 144);
  259. greenCircle.relocate(59, 142.1);//122.1
  260. greenValueField.relocate(340, 139.5);//120.5
  261. greenValueField.setOnKeyReleased((event) -> {
  262. String text = greenValueField.getText();
  263. if(text.equals("")){
  264. greenCircle.setLayoutX(CIRCLE_MIN_X);
  265. previewArea.setFill(color());
  266. }else{
  267. int value = Integer.parseInt(text);
  268. greenCircle.setLayoutX(getKey(values, value));
  269. previewArea.setFill(color());
  270. }
  271. webStringField.setText(webString());
  272. double barWidth = (getKey(values, Integer.parseInt(text)) - CIRCLE_MIN_X)+10;
  273. greenColoredBar.setWidth(barWidth);
  274. });
  275.  
  276. greenCircle.setOnMouseDragged((event) -> {
  277. double x = event.getSceneX();
  278. if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
  279. greenCircle.setLayoutX(x);
  280. greenValueField.setText( String.valueOf( values.get((int)x) ) );
  281. previewArea.setFill(color());
  282. webStringField.setText(webString());
  283. double barWidth = (x - CIRCLE_MIN_X)+10;
  284. greenColoredBar.setWidth(barWidth);
  285. }
  286. });
  287.  
  288. greenCircle.setOnMousePressed((event) -> greenCircle.setFill(CIRCLE_COLOR_PRESSED));
  289. greenCircle.setOnMouseEntered((event) -> greenCircle.setFill(CIRCLE_COLOR_MOUSE_ENTERED));
  290.  
  291. greenCircle.setOnMouseReleased((event) -> greenCircle.setFill(CIRCLE_COLOR));
  292. greenCircle.setOnMouseExited((event) -> greenCircle.setFill(CIRCLE_COLOR));
  293.  
  294. greenBar.setOnMousePressed((event) -> {
  295. double x = event.getSceneX();
  296. if(x < CIRCLE_MIN_X || x > CIRCLE_MAX_X)
  297. return;
  298. greenCircle.setLayoutX(x);
  299. int value = values.get( (int)x );
  300. greenValueField.setText(String.valueOf( value ));
  301. previewArea.setFill(color());
  302. webStringField.setText(webString());
  303. double barWidth = (x - CIRCLE_MIN_X)+10;
  304. greenColoredBar.setWidth(barWidth);
  305. });
  306.  
  307. greenBar.setOnMouseDragged((event) -> {
  308. double x = event.getSceneX();
  309. if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
  310. greenCircle.setLayoutX(x);
  311. greenValueField.setText( String.valueOf( values.get((int)x) ) );
  312. previewArea.setFill(color());
  313. webStringField.setText(webString());
  314. double barWidth = (x - CIRCLE_MIN_X)+10;
  315. greenColoredBar.setWidth(barWidth);
  316. }
  317. });
  318. //--------------------------------------------------------------------------------
  319.  
  320. //--------------------------------------------------------------------------------
  321. Label blueMsg = new Label("Blue:");
  322. blueMsg.setTextFill(Color.rgb(0, 0, 255));
  323. blueMsg.setFont(Font.font(15));
  324.  
  325. Rectangle blueBar = new Rectangle(273, 15, Color.WHITE);
  326. blueBar.setArcHeight(15);
  327. blueBar.setArcWidth(15);
  328. blueBar.setOpacity(.3);
  329. Circle blueCircle = new Circle(10, CIRCLE_COLOR);
  330.  
  331. blueValueField.setShape(new Rectangle(50, 6));
  332. blueValueField.setPrefSize(50, 6);
  333.  
  334. root.getChildren().addAll(blueMsg, blueColoredBar, blueBar, blueCircle, blueValueField);
  335.  
  336. blueMsg.relocate(5, 174);
  337. blueBar.relocate(60, 177);//124
  338. blueColoredBar.relocate(60, 177);
  339. blueCircle.relocate(59, 175.1);//122.1
  340. blueValueField.relocate(340, 173.5);//120.5
  341. blueValueField.setOnKeyReleased((event) -> {
  342. String text = blueValueField.getText();
  343. if(text.equals("")){
  344. blueCircle.setLayoutX(CIRCLE_MIN_X);
  345. previewArea.setFill(color());
  346. }else{
  347. int value = Integer.parseInt(text);
  348. blueCircle.setLayoutX(getKey(values, value));
  349. previewArea.setFill(color());
  350. }
  351. webStringField.setText(webString());
  352. double barWidth = (getKey(values, Integer.parseInt(text)) - CIRCLE_MIN_X)+10;
  353. blueColoredBar.setWidth(barWidth);
  354. });
  355.  
  356. blueCircle.setOnMouseDragged((event) -> {
  357. double x = event.getSceneX();
  358. if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
  359. blueCircle.setLayoutX(x);
  360. blueValueField.setText( String.valueOf( values.get((int)x) ) );
  361. previewArea.setFill(color());
  362. webStringField.setText(webString());
  363. double barWidth = (x - CIRCLE_MIN_X)+10;
  364. blueColoredBar.setWidth(barWidth);
  365. }
  366. });
  367.  
  368. blueCircle.setOnMousePressed((event) -> blueCircle.setFill(CIRCLE_COLOR_PRESSED));
  369. blueCircle.setOnMouseEntered((event) -> blueCircle.setFill(CIRCLE_COLOR_MOUSE_ENTERED));
  370.  
  371. blueCircle.setOnMouseReleased((event) -> blueCircle.setFill(CIRCLE_COLOR));
  372. blueCircle.setOnMouseExited((event) -> blueCircle.setFill(CIRCLE_COLOR));
  373.  
  374. blueBar.setOnMousePressed((event) -> {
  375. double x = event.getSceneX();
  376. if(x < CIRCLE_MIN_X || x > CIRCLE_MAX_X)
  377. return;
  378. blueCircle.setLayoutX(x);
  379. int value = values.get( (int)x );
  380. blueValueField.setText(String.valueOf( value ));
  381. previewArea.setFill(color());
  382. webStringField.setText(webString());
  383. double barWidth = (x - CIRCLE_MIN_X)+10;
  384. blueColoredBar.setWidth(barWidth);
  385. });
  386.  
  387. blueBar.setOnMouseDragged((event) -> {
  388. double x = event.getSceneX();
  389. if(x >= CIRCLE_MIN_X && x <= CIRCLE_MAX_X){
  390. blueCircle.setLayoutX(x);
  391. blueValueField.setText( String.valueOf( values.get((int)x) ) );
  392. previewArea.setFill(color());
  393. webStringField.setText(webString());
  394. double barWidth = (x - CIRCLE_MIN_X)+10;
  395. blueColoredBar.setWidth(barWidth);
  396. }
  397. });
  398. //--------------------------------------------------------------------------------
  399.  
  400. //--------------------------------------------------------------------------------
  401. Label opMsg = new Label("Opacity(%):");
  402. opMsg.setTextFill(Color.WHITE);
  403. opMsg.setFont(Font.font(15));
  404.  
  405. {
  406. Rectangle rect = new Rectangle(60, 20);
  407. rect.setArcHeight(10);
  408. rect.setArcWidth(10);
  409. opValueField.setShape(rect);
  410. opValueField.setBackground( new Background( new BackgroundFill(Color.rgb(140, 140, 140), null, null) ) );
  411. opValueField.setStyle("-fx-font: normal 15px 'system';"
  412. + "-fx-text-fill: white");
  413. opValueField.setOpacity(0.7);
  414. }
  415. opValueField.setPrefSize(60, 20);
  416. opValueField.setAlignment(Pos.CENTER);
  417.  
  418.  
  419. root.getChildren().addAll(opMsg, opValueField);
  420.  
  421. opMsg.relocate(5, 212);
  422. opValueField.relocate(85, 208);
  423. opValueField.setFont(Font.font(14));
  424. opValueField.setOnKeyReleased((event) -> {
  425. if(opValueField.getText().length() == 0){
  426. previewArea.setFill(Color.rgb(red(), green(), blue(), 0));
  427. }
  428. previewArea.setFill(color());
  429. });
  430. //--------------------------------------------------------------------------------
  431.  
  432. //--------------------------------------------------------------------------------
  433. Label webMsg1 = new Label("Web");
  434.  
  435. webMsg1.setFont(Font.font("System", FontWeight.BOLD, 15));
  436. webMsg1.setTextFill(Color.rgb(255, 0, 0));
  437.  
  438. Label webMsg2 = new Label("Str");
  439.  
  440. webMsg2.setFont(Font.font("System", FontWeight.BOLD, 15));
  441. webMsg2.setTextFill(Color.rgb(0, 255, 0));
  442.  
  443. Label webMsg3 = new Label("ing");
  444.  
  445. webMsg3.setFont(Font.font("System", FontWeight.BOLD, 15));
  446. webMsg3.setTextFill(Color.rgb(0, 0, 255));
  447.  
  448. Label columnMsg = new Label(":");
  449. columnMsg.setFont(Font.font("System", FontWeight.BOLD, 15));
  450. columnMsg.setTextFill(Color.WHITE);
  451.  
  452. {
  453. Rectangle rect = new Rectangle(100, 20);
  454. rect.setArcHeight(10);
  455. rect.setArcWidth(10);
  456. webStringField.setShape(rect);
  457. webStringField.setPrefSize(100, 20);
  458. webStringField.setBackground( new Background( new BackgroundFill(Color.rgb(140, 140, 140), null, null) ) );
  459. webStringField.setStyle("-fx-font: normal 15px 'system';"
  460. + "-fx-text-fill: white");
  461. webStringField.setOpacity(0.7);
  462. }
  463.  
  464. root.getChildren().addAll(webMsg1, webMsg2, webMsg3, columnMsg, webStringField);
  465. webMsg1.relocate(205, 212);
  466. webMsg2.relocate(244, 212);
  467. webMsg3.relocate(263, 212);
  468. columnMsg.relocate(284, 212);
  469. webStringField.relocate(290, 208);
  470. webStringField.setFont(Font.font(15));
  471. webStringField.setEditable(false);
  472. //--------------------------------------------------------------------------------
  473. stage.setResizable(false);
  474. stage.setScene(new Scene(root, 390, 240));
  475. stage.setTitle("ColorPicker");
  476. stage.show();
  477. }
  478.  
  479. public static void main(String[] args){
  480. Application.launch(args);
  481. }
  482. }
Add Comment
Please, Sign In to add comment