﻿{"id":2521,"date":"2018-01-01T04:13:12","date_gmt":"2017-12-31T19:13:12","guid":{"rendered":"http:\/\/yucchi.jp\/blog\/?p=2521"},"modified":"2018-01-01T04:14:12","modified_gmt":"2017-12-31T19:14:12","slug":"happy-new-year-2018","status":"publish","type":"post","link":"http:\/\/yucchi.jp\/blog\/?p=2521","title":{"rendered":"Happy New Year 2018!"},"content":{"rendered":"<p><strong><font color=\"#ff0000\" size=\"6\">Happy New Year! May this be a happy and fruitful year.<\/font><\/strong><\/p>\n<p>\u65b0\u5e74\u6700\u521d\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u306f JavaFX \u3067 <a href=\"https:\/\/www.ibm.com\/cloud-computing\/jp\/ja\/bluemix\/\" target=\"_blank\">IBM Cloud (Bluemix)<\/a> \u306e <a href=\"https:\/\/www.ibm.com\/watson\/services\/personality-insights\/\" target=\"_blank\">Watson Personality Insights<\/a> \u3092\u5229\u7528\u3057\u305f\u4eba\u683c\u8a3a\u65ad\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3059\u3002<\/p>\n<p>\u6628\u5e74\u306e 11 \u6708 1 \u65e5\u304b\u3089 <a href=\"https:\/\/www.ibm.com\/cloud-computing\/jp\/ja\/bluemix\/lite-account\/\" target=\"_blank\">IBM Cloud (Bluemix)\u30e9\u30a4\u30c8\u30fb\u30a2\u30ab\u30a6\u30f3\u30c8<\/a>\u304c\u6c17\u697d\u306b\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u5c11\u3057\u904a\u3093\u3067\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>\u3082\u3046\u3001\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u3066\u304b\u3089\u968f\u5206\u7d4c\u3061\u307e\u3059\u306e\u3067\u53c2\u8003\u3068\u306a\u308b\u8cc7\u6599\u304c\u30cd\u30c3\u30c8\u4e0a\u306b\u3042\u308b\u306e\u3067\u30b0\u30b0\u308c\u3070\u306a\u3093\u3068\u304b\u305d\u308c\u306a\u308a\u306e\u3082\u306e\u306f\u52d5\u304b\u305b\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n<p>\u3068\u8a00\u3046\u3053\u3068\u3067\u5b9a\u756a\u306e Twitter \u306e\u3064\u3076\u3084\u304d\u3092\u89e3\u6790\u3057\u3066\u4eba\u683c\u8a3a\u65ad\u3092\u304a\u3053\u306a\u3046\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u7d44\u3093\u3067\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>\u672c\u5bb6\u30b5\u30a4\u30c8\u3067\u306f\u3053\u3093\u306a\u30c7\u30e2\u304c\u304a\u304b\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/1.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" title=\"1\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"1\" src=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/1_thumb.png\" width=\"804\" height=\"720\"><\/a><\/p>\n<p>\u81ea\u5206\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u8a66\u305d\u3046\u3068\u3057\u305f\u3051\u3069\u30a8\u30e9\u30fc\u3067\u99c4\u76ee\u3060\u3063\u305f\u306e\u3067\u30b5\u30f3\u30d7\u30eb\u306e\u65b9\u306e\u3067\u5206\u6790\u3057\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p><a href=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/2.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" title=\"2\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"2\" src=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/2_thumb.png\" width=\"804\" height=\"734\"><\/a><\/p>\n<p>\u7d50\u679c\u304c\u4e0a\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/www.ibm.com\/watson\/services\/personality-insights\/\" target=\"_blank\">Watson Personality Insights<\/a> \u3067\u5f97\u3089\u308c\u308b\u7d50\u679c\u306f\u4e0b\u6bb5\u306e \u300c\u30d3\u30c3\u30b0\u30d5\u30a1\u30a4\u30d6 &#8211; \u500b\u6027\u300d\u3001\u300c\u6b32\u6c42\u300d\u3001\u300c\u4fa1\u5024\u300d\u306e\u30c7\u30fc\u30bf\u3067\u3059\u3002<\/p>\n<p>\u5206\u6790\u30c7\u30fc\u30bf\u306e\u30b9\u30b3\u30a2\u306b\u95a2\u3059\u308b\u8aac\u660e\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong><font color=\"#ff0000\">\u30b9\u30b3\u30a2\u306f\u3059\u3079\u3066\u767e\u5206\u4f4d\u6570\u3067\u3042\u308a\u3001\u81a8\u5927\u306a\u96c6\u56e3\u306e\u4e2d\u3067\u306e\u4f4d\u7f6e\u3092\u8868\u3057\u3066\u3044\u307e\u3059\u3002<\/font><\/strong><\/p>\n<p><strong><font color=\"#ff0000\">\u305f\u3068\u3048\u3070\u3001\u5916\u5411\u6027\u304c90\uff05\u3068\u3044\u3046\u7d50\u679c\u306f\u3001\u305d\u306e\u4eba\u304c90\uff05\u5916\u5411\u7684\u3067\u3042\u308b\u3053\u3068\u3067\u306f\u306a\u304f\u3001100\u4eba\u4e2d\u305d\u306e\u4eba\u3088\u308a\u5916\u5411\u6027\u306e\u4f4e\u3044\u4eba\u304c90\u4eba\uff08\u9ad8\u3044\u4eba\u304c10\u4eba\uff09\u3068\u3044\u3046\u3053\u3068\u3092\u610f\u5473\u3057\u3066\u3044\u307e\u3059\u3002<\/font><\/strong><\/p>\n<p>\u30c7\u30fc\u30bf\u306f JSON \u5f62\u5f0f\u3067\u8fd4\u3055\u308c\u3066\u304d\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u3089\u306e\u5206\u6790\u30c7\u30fc\u30bf\u306e\u4fe1\u983c\u6027\u306f\u3069\u308c\u4f4d\u306e\u3082\u306e\u304b\u306f\u60f3\u50cf\u3082\u3064\u304b\u306a\u3044\u306e\u3067\u3059\u304c\u306a\u304b\u306a\u304b\u9762\u767d\u305d\u3046\u3067\u3059\u3002<\/p>\n<p>\u3053\u308c\u3089\u306e\u6280\u8853\u3092\u5229\u7528\u3057\u305f\u9762\u767d\u3044\u30c7\u30e2\u3082\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/www.ibm.com\/thought-leadership\/scienceandstarwars\/jp-ja\/ep1.html\" target=\"_blank\">Science and Star Wars<\/a> \u306e\u300c\u81ea\u5206\u306e\u30e9\u30a4\u30c8\u30bb\u30fc\u30d0\u30fc\u306e\u8272\u3092\u898b\u3064\u3051\u3088\u3046\u300d\u3067\u3059\u3002<\/p>\n<p><a href=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/3.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" title=\"3\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"3\" src=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/3_thumb.png\" width=\"804\" height=\"628\"><\/a><\/p>\n<p>\u30e8\u30fc\u30c0\u3068\u8a00\u3048\u3070 STAR WARS \u3067\u306f\u751f\u3051\u308b\u4f1d\u8aac\u3068\u79f0\u3055\u308c\u308b\u30b8\u30a7\u30c0\u30a4\u30fb\u30de\u30b9\u30bf\u30fc\u3067\u7d76\u5bfe\u7684\u5b58\u5728\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3046\u308c\u3057\u3044\u3067\u3059\u306d\uff01 (^_^)<\/p>\n<p>\u3053\u308c\u306f\u3082\u3063\u3068\u8a73\u3057\u304f\u4eba\u683c\u8a3a\u65ad\u3057\u3066\u307f\u305f\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>JavaFX \u3067 <a href=\"https:\/\/www.ibm.com\/watson\/services\/personality-insights\/\" target=\"_blank\">Watson Personality Insights<\/a> \u3092\u5229\u7528\u3057\u305f\u4eba\u683c\u8a3a\u65ad\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u308b\u306b\u5f53\u305f\u308a\u3001\u5206\u6790\u30c7\u30fc\u30bf\u3092\u30ec\u30fc\u30c0\u30fc\u30c1\u30e3\u30fc\u30c8\u3092\u4f7f\u3063\u3066\u8868\u793a\u3055\u305b\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u3068\u3053\u308d\u304c JavaFX \u6a19\u6e96\u3067\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u30c1\u30e3\u30fc\u30c8\u306b\u30ec\u30fc\u30c0\u30fc\u30c1\u30e3\u30fc\u30c8\u306f\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\u3002((((\uff1b\u309c\u0414\u309c)))))))<\/p>\n<p>\u3057\u304b\u305f\u306a\u3044\u306e\u3067 <a href=\"https:\/\/github.com\/jfree\/jfreechart-fx\" target=\"_blank\">JFreeChart-FX<\/a> \u306b\u671f\u5f85\u3057\u3066\u898b\u306b\u884c\u3063\u305f\u3089\u30ec\u30fc\u30c0\u30fc\u30c1\u30e3\u30fc\u30c8\u306f\u7121\u304b\u3063\u305f\u3002\uff08\u898b\u843d\u3068\u3057\u3066\u3044\u305f\u3089\u3054\u3081\u3093\u306a\u3055\u3044\uff09<\/p>\n<p>\u3053\u308c\u3067\u4e00\u6c17\u306b<strike>\u9762\u5012\u304f\u3055\u3055<\/strike>\u30cf\u30fc\u30c9\u30eb\u304c\u4e0a\u304c\u3063\u305f\u3002<\/p>\n<p>\u3068\u308a\u3042\u3048\u305a\u30ec\u30fc\u30c0\u30fc\u30c1\u30e3\u30fc\u30c8\u306f Canvas \u306b\u304a\u7d75\u304b\u304d\u5bfe\u5fdc\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u3067\u304d\u3042\u304c\u3063\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u52d5\u304b\u3057\u3066\u4eba\u683c\u8a3a\u65ad\u3092\u884c\u3063\u305f\u7d50\u679c\u304c\u3053\u3061\u3089\u3067\u3059\u3002<\/p>\n<p><a href=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/4.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" title=\"4\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"4\" src=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/4_thumb.png\" width=\"804\" height=\"407\"><\/a><\/p>\n<p>\u3042\u308c\u308c\uff1f\u3000\u306a\u3093\u304b\u30fb\u30fb\u30fb\u3000\u9177\u304f\u306a\u3044\u3067\u3059\u304b\uff1f<\/p>\n<p>\u30e8\u30fc\u30c0\u3068 71 \u30d1\u30fc\u30bb\u30f3\u30c8\u3082\u6027\u683c\u304c\u4e00\u81f4\u3057\u3066\u3044\u308b\u308f\u308a\u306b\u306f\u30fb\u30fb\u30fb<\/p>\n<p>\u307e\u3041\u3001\u4eba\u5de5\u77e5\u80fd\u304c\u4eba\u306e\u767a\u8a00\uff08\u30c4\u30a4\u30fc\u30c8\uff09\u3092\u5206\u6790\u3057\u3066\u4eba\u683c\u8a3a\u65ad\u3059\u308b\u3068\u3053\u3093\u306a\u3082\u3093\u3067\u3059\u306d\u3068\u6094\u3057\u3044\u304b\u3089\u8a00\u3063\u3066\u304a\u304d\u307e\u3059\u3002\uff08\u30f2\u30d2<\/p>\n<p>\u305b\u3063\u304b\u304f\u5e74\u672b\u306e\u5fd9\u3057\u3044\u6642\u671f\u306b\u30b4\u30cb\u30e7\u30b4\u30cb\u30e7\u3057\u3066\u30d7\u30ed\u30b0\u30e9\u30e0\u7d44\u3093\u3060\u306e\u306b\u3053\u308c\u3067\u306f\u3042\u3093\u307e\u308a\u3060\u304b\u3089\u73fe\u5728\u306e\u65e5\u672c\u306e\u5185\u95a3\u7dcf\u7406\u5927\u81e3\u3067\u3042\u308b\u5b89\u500d\u664b\u4e09\u6c0f\u306e\u4eba\u683c\u8a3a\u65ad\u3092\u3057\u3066\u307f\u305f\u3002<\/p>\n<p><a href=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/5.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" title=\"5\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"5\" src=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/5_thumb.png\" width=\"804\" height=\"407\"><\/a><\/p>\n<p>\u304a\u304a\u3063\uff01 \u30d3\u30c3\u30b0\u30d5\u30a1\u30a4\u30d6 &#8211; \u500b\u6027 \u306e\u30b9\u30b3\u30a2\u304c\u51c4\u3044\uff01<\/p>\n<p>\u3084\u306f\u308a\u8077\u696d\u67c4\u304b\u8aa0\u5b9f\u6027\u3001\u5916\u5411\u6027\u306e\u30dd\u30a4\u30f3\u30c8\u9ad8\u3044\u3067\u3059\u306d\u3002<\/p>\n<p>\u500b\u3005\u306e\u30b9\u30b3\u30a2\u3082\u305d\u3046\u304b\u3082\u77e5\u308c\u306a\u3044\u3068\u601d\u308f\u305b\u308b\u7d50\u679c\u3067\u3059\u3002\uff08\u500b\u4eba\u306e\u611f\u60f3\u3067\u3059\u3002\uff09<\/p>\n<p>\u65ad\u3063\u3066\u304a\u304d\u307e\u3059\u304c\u79c1\u306f\u653f\u6cbb\u306b\u3042\u307e\u308a\u8a73\u3057\u304f\u306a\u304f\u3053\u306e\u7d50\u679c\u3092\u5229\u7528\u3057\u3066\u653f\u6cbb\u6279\u5224\u3084\u8ab9\u8b17\u4e2d\u50b7\u3092\u884c\u3046\u3053\u3068\u3092\u76ee\u7684\u3068\u3057\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<p>\u30c6\u30ec\u30d3\u7b49\u3067\u898b\u805e\u304d\u3059\u308b\u60c5\u5831\u3092\u3082\u3068\u306b\u3057\u305f\u611f\u60f3\u3067\u3059\u3002<\/p>\n<p>\u305d\u308c\u3067\u306f\u3082\u3046\u4e00\u4eba\u8a3a\u65ad\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u79c1\u306e\u597d\u304d\u306a\u6b4c\u624b\u306e\u5b87\u591a\u7530\u30d2\u30ab\u30eb\u3055\u3093\u3067\u3059\u3002<\/p>\n<p><a href=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/6.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" title=\"6\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"6\" src=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2018\/01\/6_thumb.png\" width=\"804\" height=\"407\"><\/a><\/p>\n<p>\u30d3\u30c3\u30b0\u30d5\u30a1\u30a4\u30d6 &#8211; \u500b\u6027\u306e\u77e5\u7684\u597d\u5947\u5fc3\u3001\u5354\u8abf\u6027\u3001\u5916\u5411\u6027\u306e\u30dd\u30a4\u30f3\u30c8\u304c\u9ad8\u3044\u3067\u3059\u306d\u3002<\/p>\n<p>\u3084\u306f\u308a\u751f\u307e\u308c\u3064\u3044\u3066\u306e\u82b8\u8853\u5bb6\u306a\u306e\u3067\u3057\u3087\u3046\u3002<\/p>\n<p>\u3055\u3066\u3001\u3053\u306e\u7d50\u679c\u304b\u3089\u79c1\u306b\u306f\u500b\u6027\u304c\u8db3\u308a\u306a\u3044\u3053\u3068\u304c\u30d0\u30ec\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002<\/p>\n<p>2018 \u5e74\u306f\u500b\u6027\u3092\u3082\u3046\u5c11\u3057\u306a\u3093\u3068\u304b\u3059\u308b\u5e74\u306b\u3057\u306a\u3051\u308c\u3070\u3002\u3002\u3002(^_^;<\/p>\n<p>\u305d\u3046\u8a00\u3046\u3053\u3068\u3067\u3053\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30b3\u30fc\u30c9\u3092\u8f09\u305b\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<p>\u305f\u3060\u3057\u3001\u304b\u306a\u308a\u9177\u3044\u3053\u3068\u3092\u5e73\u6c17\u3067\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u30d1\u30b9\u30ef\u30fc\u30c9\u7b49\u306f\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3057\u3066\u3044\u307e\u3059\u306e\u3067\u305d\u3053\u306f\u9069\u5b9c\u66f8\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\u307e\u305b\u3002<\/p>\n<p>\u3042\u3068\u3001\u4f8b\u5916\u51e6\u7406\u3082\u307b\u3068\u3093\u3069\u5bfe\u51e6\u3057\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<p><a href=\"https:\/\/www.ibm.com\/cloud-computing\/jp\/ja\/bluemix\/lite-account\/\" target=\"_blank\">IBM Cloud (Bluemix)\u30e9\u30a4\u30c8\u30fb\u30a2\u30ab\u30a6\u30f3\u30c8<\/a>\u3067\u304a\u6c17\u697d\u306b <a href=\"https:\/\/www.ibm.com\/watson\/services\/personality-insights\/\" target=\"_blank\">Watson Personality Insights<\/a> \u3092\u8a66\u3057\u3066\u307f\u305f\u304b\u3063\u305f\u304b\u3089\u3067\u3059\u3002<\/p>\n<p>JavaFX \u306f\u305d\u308c\u306a\u308a\u306b\u624b\u629c\u304d\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u304f\u308c\u307e\u3059\u3002\uff08\u30f2\u30d2\u3000\u672c\u5f53\u306f\u99c4\u76ee\u3067\u3059\u3088(^_^;<\/p>\n<pre title=\"PersonalityDiagnosis.java\">package jp.yucchi.personalitydiagnosis;\r\n\r\nimport javafx.animation.KeyFrame;\r\nimport javafx.animation.KeyValue;\r\nimport javafx.animation.Timeline;\r\nimport javafx.application.Application;\r\nimport javafx.beans.property.DoubleProperty;\r\nimport javafx.beans.property.SimpleDoubleProperty;\r\nimport javafx.fxml.FXMLLoader;\r\nimport javafx.scene.Parent;\r\nimport javafx.scene.Scene;\r\nimport javafx.scene.image.Image;\r\nimport javafx.stage.Stage;\r\nimport javafx.util.Duration;\r\n\r\n\/**\r\n *\r\n * @author Yucchi\r\n *\/\r\npublic class PersonalityDiagnosis extends Application {\r\n\r\n    @Override\r\n    public void start(Stage stage) throws Exception {\r\n\r\n        FXMLLoader loader = new FXMLLoader(getClass().getResource(\"FXMLPersonalityDiagnosis.fxml\"));\r\n        loader.load();\r\n        Parent root = loader.getRoot();\r\n        FXMLPersonalityDiagnosisController controller = loader.getController();\r\n        controller.setStage(stage);\r\n        Scene scene = new Scene(root);\r\n        scene.getStylesheets().add(this.getClass().getResource(\"PersonalityDiagnosisCSS.css\").toExternalForm());\r\n        stage.setScene(scene);\r\n        Image myIcon = new Image(this.getClass().getResource(\"resources\/sakura_icon.png\").toExternalForm());\r\n        stage.getIcons().add(myIcon);\r\n        stage.setTitle(\"Personality Diagnosis for JavaFX\");\r\n        stage.setResizable(false);\r\n        \/\/ \u8d77\u52d5\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\r\n        DoubleProperty openOpacityProperty = new SimpleDoubleProperty(0.0);\r\n        stage.opacityProperty().bind(openOpacityProperty);\r\n        Timeline openTimeline = new Timeline(\r\n                new KeyFrame(\r\n                        new Duration(100),\r\n                        new KeyValue(openOpacityProperty, 0.0)\r\n                ), new KeyFrame(\r\n                        new Duration(2_500),\r\n                        new KeyValue(openOpacityProperty, 1.0)\r\n                ));\r\n        openTimeline.setCycleCount(1);\r\n        openTimeline.play();\r\n        stage.centerOnScreen();\r\n        stage.show();\r\n\r\n    }\r\n\r\n    public static void main(String[] args) {\r\n        launch(args);\r\n    }\r\n\r\n}\r\n\r\n<\/pre>\n<pre title=\"FXMLPersonalityDiagnosisController.java\">package jp.yucchi.personalitydiagnosis;\r\n\r\nimport com.ibm.watson.developer_cloud.personality_insights.v3.model.Profile;\r\nimport com.ibm.watson.developer_cloud.personality_insights.v3.model.Trait;\r\nimport java.io.StringReader;\r\nimport java.net.URL;\r\nimport java.util.HashMap;\r\nimport java.util.List;\r\nimport java.util.Map;\r\nimport java.util.ResourceBundle;\r\nimport java.util.concurrent.ExecutorService;\r\nimport java.util.concurrent.Executors;\r\nimport javafx.animation.KeyFrame;\r\nimport javafx.animation.KeyValue;\r\nimport javafx.animation.Timeline;\r\nimport javafx.application.Platform;\r\nimport javafx.beans.binding.Bindings;\r\nimport javafx.beans.property.DoubleProperty;\r\nimport javafx.beans.property.SimpleDoubleProperty;\r\nimport javafx.concurrent.Task;\r\nimport static javafx.concurrent.Worker.State.RUNNING;\r\nimport javafx.event.ActionEvent;\r\nimport javafx.event.EventHandler;\r\nimport javafx.fxml.FXML;\r\nimport javafx.fxml.Initializable;\r\nimport javafx.scene.canvas.Canvas;\r\nimport javafx.scene.canvas.GraphicsContext;\r\nimport javafx.scene.control.Button;\r\nimport javafx.scene.control.Label;\r\nimport javafx.scene.control.ProgressIndicator;\r\nimport javafx.scene.control.TextField;\r\nimport javafx.scene.layout.AnchorPane;\r\nimport javafx.scene.paint.Color;\r\nimport javafx.scene.text.Font;\r\nimport javafx.scene.text.FontSmoothingType;\r\nimport javafx.scene.text.Text;\r\nimport javafx.stage.Stage;\r\nimport javafx.stage.WindowEvent;\r\nimport javafx.util.Duration;\r\nimport javax.json.Json;\r\nimport javax.json.JsonObject;\r\nimport javax.json.JsonReader;\r\nimport twitter4j.Status;\r\n\r\n\/**\r\n *\r\n * @author Yucchi\r\n *\/\r\npublic class FXMLPersonalityDiagnosisController implements Initializable {\r\n\r\n    @FXML\r\n    private ResourceBundle resources;\r\n\r\n    @FXML\r\n    private URL location;\r\n\r\n    @FXML\r\n    private AnchorPane anchorPane;\r\n\r\n    @FXML\r\n    private Canvas personalityChart;\r\n\r\n    @FXML\r\n    private Canvas personalityCanvas;\r\n\r\n    @FXML\r\n    private Canvas needsChart;\r\n\r\n    @FXML\r\n    private Canvas needsCanvas;\r\n\r\n    @FXML\r\n    private Canvas valuesChart;\r\n\r\n    @FXML\r\n    private Canvas valuesCanvas;\r\n\r\n    @FXML\r\n    private Label big5Label;\r\n\r\n    @FXML\r\n    private Label needsLabel;\r\n\r\n    @FXML\r\n    private Label valueLabel;\r\n\r\n    @FXML\r\n    private Label idLabel;\r\n\r\n    @FXML\r\n    private TextField idTextField;\r\n\r\n    @FXML\r\n    private Button diagnosisButton;\r\n\r\n    @FXML\r\n    private Button cancelButton;\r\n\r\n    @FXML\r\n    private ProgressIndicator progressIndicator;\r\n\r\n    @FXML\r\n    private Button clearButton;\r\n\r\n    @FXML\r\n    private Label messageLabel;\r\n\r\n    \/\/ PersonalityChart \u9802\u70b9\u306e\u5ea7\u6a19\r\n    \/\/ \u77e5\u7684\u597d\u5947\u5fc3\r\n    private double opennessX;\r\n    private double opennessY;\r\n    \/\/ \u8aa0\u5b9f\u6027\r\n    private double conscientiousnessX;\r\n    private double conscientiousnessY;\r\n    \/\/ \u5916\u5411\u6027\r\n    private double extraversionX;\r\n    private double extraversionY;\r\n    \/\/ \u611f\u60c5\u8d77\u4f0f\r\n    private double emotionalRangeX;\r\n    private double emotionalRangeY;\r\n    \/\/ \u5354\u8abf\u6027\r\n    private double agreeablenessX;\r\n    private double agreeablenessY;\r\n\r\n    \/\/ NeedsChart \u9802\u70b9\u306e\u5ea7\u6a19\r\n    \/\/ \u5b9f\u7528\u4e3b\u7fa9\r\n    private double practicalityX;\r\n    private double practicalityY;\r\n    \/\/ \u597d\u5947\u5fc3\r\n    private double curiosityX;\r\n    private double curiosityY;\r\n    \/\/ \u81ea\u5df1\u8868\u73fe\r\n    private double selfExpressionX;\r\n    private double selfExpressionY;\r\n    \/\/ \u7406\u60f3\r\n    private double idealX;\r\n    private double idealY;\r\n    \/\/ \u81ea\u7531\u4e3b\u7fa9\r\n    private double libertyX;\r\n    private double libertyY;\r\n    \/\/ \u5b89\u5b9a\u6027\r\n    private double stabilityX;\r\n    private double stabilityY;\r\n    \/\/ \u4ed5\u7d44\r\n    private double structureX;\r\n    private double structureY;\r\n    \/\/ \u8208\u596e\r\n    private double excitementX;\r\n    private double excitementY;\r\n    \/\/ \u6311\u6226\r\n    private double challengeX;\r\n    private double challengeY;\r\n    \/\/ \u793e\u4f1a\u6027\r\n    private double loveX;\r\n    private double loveY;\r\n    \/\/ \u8abf\u548c\r\n    private double harmonyX;\r\n    private double harmonyY;\r\n    \/\/ \u89aa\u5bc6\r\n    private double closenessX;\r\n    private double closenessY;\r\n\r\n    \/\/ ValueChart \u9802\u70b9\u306e\u5ea7\u6a19\r\n    \/\/ \u5feb\u697d\u4e3b\u7fa9\r\n    private double hedonismX;\r\n    private double hedonismY;\r\n    \/\/ \u81ea\u5df1\u5897\u9032\r\n    private double selfEnhancementX;\r\n    private double selfEnhancementY;\r\n    \/\/ \u5909\u5316\u8a31\u5bb9\u6027\r\n    private double opennessToChangeX;\r\n    private double opennessToChangeY;\r\n    \/\/ \u73fe\u72b6\u7dad\u6301\r\n    private double conservationX;\r\n    private double conservationY;\r\n    \/\/ \u81ea\u5df1\u8d85\u8d8a\r\n    private double selfTranscendenceX;\r\n    private double selfTranscendenceY;\r\n\r\n    private final ExecutorService service = Executors.newSingleThreadExecutor();\r\n    private Task&lt;Profile&gt; task;\r\n    private TweetCollection tweetCollection;\r\n    private PersonalityAnalysis personalityAnalysis;\r\n    private GraphicsContext personalityGc;\r\n    private GraphicsContext needsGc;\r\n    private GraphicsContext valuesGc;\r\n    private double width;\r\n    private double jpCenterHeight;\r\n    private double offset;\r\n\r\n    @FXML\r\n    void cancel(ActionEvent event) {\r\n        task.cancel();\r\n    }\r\n\r\n    @FXML\r\n    void diagnosis(ActionEvent event) {\r\n        clearChart();\r\n        getprofile();\r\n    }\r\n\r\n    @FXML\r\n    void clear(ActionEvent event) {\r\n        clearChart();\r\n        idTextField.clear();\r\n        messageLabel.textProperty().unbind();\r\n        messageLabel.setText(\"Please enter the Twitter ID and press the diagnosis button.\");\r\n    }\r\n\r\n    private void getprofile() {\r\n\r\n        progressIndicator.setOpacity(1.0);\r\n\r\n        task = new Task&lt;&gt;() {\r\n\r\n            @Override\r\n            protected Profile call() throws Exception {\r\n\r\n                List&lt;Status&gt; tweets;\r\n                Profile profile;\r\n\r\n                updateMessage(\"Getting a tweets.\");\r\n                tweets = tweetCollection.getTweets(idTextField, task);\r\n\r\n                if (isCancelled()) {\r\n                    return null;\r\n                }\r\n\r\n                updateMessage(\"Completed getting tweets.  Personality analysis started.  Please wait for a while.\");\r\n                profile = personalityAnalysis.toAnalyze(tweets);\r\n\r\n                if (profile == null) {\r\n                    failed();\r\n                }\r\n\r\n                return profile;\r\n\r\n            }\r\n\r\n            @Override\r\n            protected void succeeded() {\r\n\r\n                super.succeeded();\r\n\r\n                Profile profile = getValue();\r\n                List&lt;Trait&gt; personality = profile.getPersonality();\r\n                List&lt;Trait&gt; needs = profile.getNeeds();\r\n                List&lt;Trait&gt; values = profile.getValues();\r\n\r\n                JsonObject jsonObject;\r\n                try (JsonReader jsonReader = Json.createReader(new StringReader(profile.toString()))) {\r\n                    jsonObject = jsonReader.readObject();\r\n                }\r\n\r\n                updateMessage(\"Personality analysis is completed with \" + jsonObject.getInt(\"word_count\") + \" words of Tweet.\");\r\n\r\n                Map&lt;String, Double&gt; personalityMap = new HashMap&lt;&gt;(personality.size());\r\n                Map&lt;String, Double&gt; valuesMap = new HashMap&lt;&gt;(values.size());\r\n                Map&lt;String, Double&gt; needsMap = new HashMap&lt;&gt;(needs.size());\r\n\r\n                for (int i = 0; personality.size() &gt; i; i++) {\r\n                    String key = jsonObject.getJsonArray(\"personality\").getJsonObject(i).getJsonString(\"name\").getString();\r\n                    double value = jsonObject.getJsonArray(\"personality\").getJsonObject(i).getJsonNumber(\"percentile\").doubleValue();\r\n                    personalityMap.put(key, value);\r\n                }\r\n\r\n                for (int i = 0; values.size() &gt; i; i++) {\r\n                    String key = jsonObject.getJsonArray(\"values\").getJsonObject(i).getJsonString(\"name\").getString();\r\n                    double value = jsonObject.getJsonArray(\"values\").getJsonObject(i).getJsonNumber(\"percentile\").doubleValue();\r\n                    valuesMap.put(key, value);\r\n                }\r\n\r\n                for (int i = 0; needs.size() &gt; i; i++) {\r\n                    String key = jsonObject.getJsonArray(\"needs\").getJsonObject(i).getJsonString(\"name\").getString();\r\n                    double value = jsonObject.getJsonArray(\"needs\").getJsonObject(i).getJsonNumber(\"percentile\").doubleValue();\r\n                    needsMap.put(key, value);\r\n                }\r\n\r\n                drawPersonalityResult(personalityMap);\r\n                drawNeedsResult(needsMap);\r\n                drawValuesResult(valuesMap);\r\n\r\n            }\r\n\r\n            @Override\r\n            protected void cancelled() {\r\n                super.cancelled();\r\n                updateMessage(\"Cancelled!\");\r\n                clearChart();\r\n            }\r\n\r\n            @Override\r\n            protected void failed() {\r\n                super.failed();\r\n                updateMessage(\"Failed!  An unexpected error occurred for some reason.\");\r\n            }\r\n\r\n            private void drawPersonalityResult(Map&lt;String, Double&gt; personalityMap) {\r\n\r\n                \/\/ PersonalityResult\r\n                double openness = personalityMap.getOrDefault(\"\u77e5\u7684\u597d\u5947\u5fc3\", 0.0);\r\n                double conscientiousness = personalityMap.getOrDefault(\"\u8aa0\u5b9f\u6027\", 0.0);\r\n                double extraversion = personalityMap.getOrDefault(\"\u5916\u5411\u6027\", 0.0);\r\n                double emotionalRange = personalityMap.getOrDefault(\"\u611f\u60c5\u8d77\u4f0f\", 0.0);\r\n                double agreeableness = personalityMap.getOrDefault(\"\u5354\u8abf\u6027\", 0.0);\r\n\r\n                \/\/ \u30c1\u30e3\u30fc\u30c8\u8868\u793a\u7528\r\n                String opennessResult = String.format(\"%.2f\", openness * 100).concat(\"%\");\r\n                String conscientiousnessResult = String.format(\"%.2f\", conscientiousness * 100).concat(\"%\");\r\n                String extraversionResult = String.format(\"%.2f\", extraversion * 100).concat(\"%\");\r\n                String emotionalRangeResult = String.format(\"%.2f\", emotionalRange * 100).concat(\"%\");\r\n                String agreeablenessResult = String.format(\"%.2f\", agreeableness * 100).concat(\"%\");\r\n\r\n                \/\/ \u539f\u70b9\r\n                final double originX = personalityCanvas.getWidth() \/ 2;\r\n                final double originY = personalityCanvas.getHeight() \/ 2;\r\n                \/\/ \u30e9\u30a4\u30f3\u9577\u3055\r\n                final double lineLength = 150.0;\r\n                \/\/ \u9805\u76ee\u6570\r\n                final int items = personalityMap.size();\r\n                \/\/ \u77e5\u7684\u597d\u5947\u5fc3 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double opennessScoreX = getPositionX(originX, lineLength, openness, items, 0);\r\n                final double opennessScoreY = getPositionY(originY, lineLength, openness, items, 0);\r\n                \/\/ \u8aa0\u5b9f\u6027 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double conscientiousnessScoreX = getPositionX(originX, lineLength, conscientiousness, items, 1);\r\n                final double conscientiousnessScoreY = getPositionY(originY, lineLength, conscientiousness, items, 1);\r\n                \/\/ \u5916\u5411\u6027 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double extraversionScoreX = getPositionX(originX, lineLength, extraversion, items, 2);\r\n                final double extraversionScoreY = getPositionY(originY, lineLength, extraversion, items, 2);\r\n                \/\/ \u611f\u60c5\u8d77\u4f0f \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double emotionalRangeScoreX = getPositionX(originX, lineLength, emotionalRange, items, 3);\r\n                final double emotionalRangeScoreY = getPositionY(originY, lineLength, emotionalRange, items, 3);\r\n                \/\/ \u5354\u8abf\u6027 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double agreeablenessScoreX = getPositionX(originX, lineLength, agreeableness, items, 4);\r\n                final double agreeablenessScoreY = getPositionY(originY, lineLength, agreeableness, items, 4);\r\n\r\n                \/\/ \u30b9\u30b3\u30a2\u8868\u793a\r\n                personalityGc.setStroke(Color.rgb(255, 0, 255));\r\n                personalityGc.setLineWidth(2);\r\n                personalityGc.beginPath();\r\n                personalityGc.moveTo(opennessScoreX, opennessScoreY);\r\n                personalityGc.lineTo(conscientiousnessScoreX, conscientiousnessScoreY);\r\n                personalityGc.lineTo(extraversionScoreX, extraversionScoreY);\r\n                personalityGc.lineTo(emotionalRangeScoreX, emotionalRangeScoreY);\r\n                personalityGc.lineTo(agreeablenessScoreX, agreeablenessScoreY);\r\n                personalityGc.closePath();\r\n                personalityGc.stroke();\r\n                personalityGc.setFill(Color.rgb(255, 0, 255, 0.3));\r\n                personalityGc.fill();\r\n\r\n                \/\/ \u9805\u76ee\u3000\u7d50\u679c\u8868\u793a\r\n                personalityGc.setFontSmoothingType(FontSmoothingType.LCD);\r\n                personalityGc.setFont(Font.font(18));\r\n                personalityGc.setFill(Color.RED);\r\n                personalityGc.fillText(opennessResult, opennessX - width * 5 \/ 2, opennessY + jpCenterHeight - offset - offset * 1.1);\r\n                personalityGc.fillText(conscientiousnessResult, conscientiousnessX + width \/ 2, conscientiousnessY + jpCenterHeight - offset * 1.1);\r\n                personalityGc.fillText(extraversionResult, extraversionX - width, extraversionY + jpCenterHeight + offset + offset * 1.1);\r\n                personalityGc.fillText(emotionalRangeResult, emotionalRangeX - width * 9 \/ 4, emotionalRangeY + jpCenterHeight + offset + offset * 1.1);\r\n                personalityGc.fillText(agreeablenessResult, agreeablenessX - width * 7 \/ 2, agreeablenessY + jpCenterHeight - offset * 1.1);\r\n\r\n            }\r\n\r\n            private void drawNeedsResult(Map&lt;String, Double&gt; needsMap) {\r\n\r\n                \/\/ NeedsResult\r\n                double practicality = needsMap.getOrDefault(\"\u5b9f\u7528\u4e3b\u7fa9\", 0.0);\r\n                double curiosity = needsMap.getOrDefault(\"\u597d\u5947\u5fc3\", 0.0);\r\n                double selfExpression = needsMap.getOrDefault(\"\u81ea\u5df1\u8868\u73fe\", 0.0);\r\n                double ideal = needsMap.getOrDefault(\"\u7406\u60f3\", 0.0);\r\n                double liberty = needsMap.getOrDefault(\"\u81ea\u7531\u4e3b\u7fa9\", 0.0);\r\n                double stability = needsMap.getOrDefault(\"\u5b89\u5b9a\u6027\", 0.0);\r\n                double structure = needsMap.getOrDefault(\"\u4ed5\u7d44\", 0.0);\r\n                double excitement = needsMap.getOrDefault(\"\u8208\u596e\", 0.0);\r\n                double challenge = needsMap.getOrDefault(\"\u6311\u6226\", 0.0);\r\n                double love = needsMap.getOrDefault(\"\u793e\u4f1a\u6027\", 0.0);\r\n                double harmony = needsMap.getOrDefault(\"\u8abf\u548c\", 0.0);\r\n                double closeness = needsMap.getOrDefault(\"\u89aa\u5bc6\", 0.0);\r\n\r\n                \/\/ \u30c1\u30e3\u30fc\u30c8\u8868\u793a\u7528\r\n                String practicalityResult = String.format(\"%.2f\", practicality * 100).concat(\"%\");\r\n                String curiosityResult = String.format(\"%.2f\", curiosity * 100).concat(\"%\");\r\n                String selfExpressionResult = String.format(\"%.2f\", selfExpression * 100).concat(\"%\");\r\n                String idealResult = String.format(\"%.2f\", ideal * 100).concat(\"%\");\r\n                String libertyResult = String.format(\"%.2f\", liberty * 100).concat(\"%\");\r\n                String stabilityResult = String.format(\"%.2f\", stability * 100).concat(\"%\");\r\n                String structureResult = String.format(\"%.2f\", structure * 100).concat(\"%\");\r\n                String excitementResult = String.format(\"%.2f\", excitement * 100).concat(\"%\");\r\n                String challengeResult = String.format(\"%.2f\", challenge * 100).concat(\"%\");\r\n                String loveResult = String.format(\"%.2f\", love * 100).concat(\"%\");\r\n                String harmonyResult = String.format(\"%.2f\", harmony * 100).concat(\"%\");\r\n                String closenessResult = String.format(\"%.2f\", closeness * 100).concat(\"%\");\r\n\r\n                \/\/ \u539f\u70b9\r\n                final double originX = needsCanvas.getWidth() \/ 2;\r\n                final double originY = needsCanvas.getHeight() \/ 2;\r\n                \/\/ \u30e9\u30a4\u30f3\u9577\u3055\r\n                final double lineLength = 150.0;\r\n                \/\/ \u9805\u76ee\u6570\r\n                final int items = needsMap.size();\r\n                \/\/ \u5b9f\u7528\u4e3b\u7fa9 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double practicalityScoreX = getPositionX(originX, lineLength, practicality, items, 0);\r\n                final double practicalityScoreY = getPositionY(originY, lineLength, practicality, items, 0);\r\n                \/\/ \u597d\u5947\u5fc3 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double curiosityScoreX = getPositionX(originX, lineLength, curiosity, items, 1);\r\n                final double curiosityScoreY = getPositionY(originY, lineLength, curiosity, items, 1);\r\n                \/\/ \u81ea\u5df1\u8868\u73fe \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double selfExpressionScoreX = getPositionX(originX, lineLength, selfExpression, items, 2);\r\n                final double selfExpressionScoreY = getPositionY(originY, lineLength, selfExpression, items, 2);\r\n                \/\/ \u7406\u60f3 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double idealScoreX = getPositionX(originX, lineLength, ideal, items, 3);\r\n                final double idealScoreY = getPositionY(originY, lineLength, ideal, items, 3);\r\n                \/\/ \u81ea\u7531\u4e3b\u7fa9 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double libertyScoreX = getPositionX(originX, lineLength, liberty, items, 4);\r\n                final double libertyScoreY = getPositionY(originY, lineLength, liberty, items, 4);\r\n                \/\/ \u5b89\u5b9a\u6027 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double stabilityScoreX = getPositionX(originX, lineLength, stability, items, 5);\r\n                final double stabilityScoreY = getPositionY(originY, lineLength, stability, items, 5);\r\n                \/\/ \u4ed5\u7d44 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double structureScoreX = getPositionX(originX, lineLength, structure, items, 6);\r\n                final double structureScoreY = getPositionY(originY, lineLength, structure, items, 6);\r\n                \/\/ \u8208\u596e \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double excitementScoreX = getPositionX(originX, lineLength, excitement, items, 7);\r\n                final double excitementScoreY = getPositionY(originY, lineLength, excitement, items, 7);\r\n                \/\/ \u6311\u6226 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double challengeScoreX = getPositionX(originX, lineLength, challenge, items, 8);\r\n                final double challengeScoreY = getPositionY(originY, lineLength, challenge, items, 8);\r\n                \/\/ \u793e\u4f1a\u6027 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double loveScoreX = getPositionX(originX, lineLength, love, items, 9);\r\n                final double loveScoreY = getPositionY(originY, lineLength, love, items, 9);\r\n                \/\/ \u8abf\u548c \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double harmonyScoreX = getPositionX(originX, lineLength, harmony, items, 10);\r\n                final double harmonyScoreY = getPositionY(originY, lineLength, harmony, items, 10);\r\n                \/\/ \u89aa\u5bc6 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double closenessScoreX = getPositionX(originX, lineLength, closeness, items, 11);\r\n                final double closenessScoreY = getPositionY(originY, lineLength, closeness, items, 11);\r\n\r\n                \/\/ \u30b9\u30b3\u30a2\u8868\u793a\r\n                needsGc.setStroke(Color.rgb(255, 0, 255));\r\n                needsGc.setLineWidth(2);\r\n                needsGc.beginPath();\r\n                needsGc.moveTo(practicalityScoreX, practicalityScoreY);\r\n                needsGc.lineTo(curiosityScoreX, curiosityScoreY);\r\n                needsGc.lineTo(selfExpressionScoreX, selfExpressionScoreY);\r\n                needsGc.lineTo(idealScoreX, idealScoreY);\r\n                needsGc.lineTo(libertyScoreX, libertyScoreY);\r\n                needsGc.lineTo(stabilityScoreX, stabilityScoreY);\r\n                needsGc.lineTo(structureScoreX, structureScoreY);\r\n                needsGc.lineTo(excitementScoreX, excitementScoreY);\r\n                needsGc.lineTo(challengeScoreX, challengeScoreY);\r\n                needsGc.lineTo(loveScoreX, loveScoreY);\r\n                needsGc.lineTo(harmonyScoreX, harmonyScoreY);\r\n                needsGc.lineTo(closenessScoreX, closenessScoreY);\r\n                needsGc.closePath();\r\n                needsGc.stroke();\r\n                needsGc.setFill(Color.rgb(255, 0, 255, 0.3));\r\n                needsGc.fill();\r\n\r\n                \/\/ \u9805\u76ee\u3000\u7d50\u679c\u8868\u793a\r\n                needsGc.setFontSmoothingType(FontSmoothingType.LCD);\r\n                needsGc.setFont(Font.font(18));\r\n                needsGc.setFill(Color.RED);\r\n                needsGc.fillText(practicalityResult, practicalityX - width * 4 \/ 2, practicalityY + jpCenterHeight - offset - offset * 1.1);\r\n                needsGc.fillText(curiosityResult, curiosityX + width \/ 2, curiosityY + jpCenterHeight - offset \/ 2 - offset * 1.1);\r\n                needsGc.fillText(selfExpressionResult, selfExpressionX + width \/ 2, selfExpressionY - jpCenterHeight + offset \/ 2 - offset * 1.1);\r\n                needsGc.fillText(idealResult, idealX + width \/ 2, idealY + jpCenterHeight - offset * 1.1);\r\n                needsGc.fillText(libertyResult, libertyX + width \/ 2, libertyY + jpCenterHeight + offset \/ 2 + offset * 1.1);;\r\n                needsGc.fillText(stabilityResult, stabilityX + width \/ 2, stabilityY - jpCenterHeight + offset * 1.5 + offset * 1.1);\r\n                needsGc.fillText(structureResult, structureX - width * 2 \/ 2, structureY + jpCenterHeight + offset + offset * 1.1);\r\n                needsGc.fillText(excitementResult, excitementX - width * 5 \/ 2, excitementY - jpCenterHeight + offset * 1.5 + offset * 1.1);\r\n                needsGc.fillText(challengeResult, challengeX - width * 5 \/ 2, challengeY + jpCenterHeight + offset \/ 2 + offset * 1.1);\r\n                needsGc.fillText(loveResult, loveX - width * 7 \/ 2, loveY + jpCenterHeight - offset * 1.1);\r\n                needsGc.fillText(harmonyResult, harmonyX - width * 5 \/ 2, harmonyY - jpCenterHeight + offset \/ 2 - offset * 1.1);\r\n                needsGc.fillText(closenessResult, closenessX - width * 5 \/ 2, closenessY + jpCenterHeight - offset \/ 2 - offset * 1.1);\r\n\r\n            }\r\n\r\n            private void drawValuesResult(Map&lt;String, Double&gt; valuesMap) {\r\n\r\n                double hedonism = valuesMap.getOrDefault(\"\u5feb\u697d\u4e3b\u7fa9\", 0.0);\r\n                double selfEnhancement = valuesMap.getOrDefault(\"\u81ea\u5df1\u5897\u9032\", 0.0);\r\n                double opennessToChange = valuesMap.getOrDefault(\"\u5909\u5316\u8a31\u5bb9\u6027\", 0.0);\r\n                double conservation = valuesMap.getOrDefault(\"\u73fe\u72b6\u7dad\u6301\", 0.0);\r\n                double selfTranscendence = valuesMap.getOrDefault(\"\u81ea\u5df1\u8d85\u8d8a\", 0.0);\r\n\r\n                String hedonismResult = String.format(\"%.2f\", hedonism * 100).concat(\"%\");\r\n                String selfEnhancementResult = String.format(\"%.2f\", selfEnhancement * 100).concat(\"%\");\r\n                String opennessToChangeResult = String.format(\"%.2f\", opennessToChange * 100).concat(\"%\");\r\n                String conservationResult = String.format(\"%.2f\", conservation * 100).concat(\"%\");\r\n                String selfTranscendenceResult = String.format(\"%.2f\", selfTranscendence * 100).concat(\"%\");\r\n\r\n                \/\/ \u539f\u70b9\r\n                final double originX = valuesCanvas.getWidth() \/ 2;\r\n                final double originY = valuesCanvas.getHeight() \/ 2;\r\n                \/\/ \u30e9\u30a4\u30f3\u9577\u3055\r\n                final double lineLength = 150.0;\r\n                \/\/ \u9805\u76ee\u6570\r\n                final int items = valuesMap.size();\r\n                \/\/ \u5feb\u697d\u4e3b\u7fa9 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double hedonismScoreX = getPositionX(originX, lineLength, hedonism, items, 0);\r\n                final double hedonismScoreY = getPositionY(originY, lineLength, hedonism, items, 0);\r\n                \/\/ \u81ea\u5df1\u5897\u9032 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double selfEnhancementScoreX = getPositionX(originX, lineLength, selfEnhancement, items, 1);\r\n                final double selfEnhancementScoreY = getPositionY(originY, lineLength, selfEnhancement, items, 1);\r\n                \/\/ \u5909\u5316\u8a31\u5bb9\u6027 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double opennessToChangeScoreX = getPositionX(originX, lineLength, opennessToChange, items, 2);\r\n                final double opennessToChangeScoreY = getPositionY(originY, lineLength, opennessToChange, items, 2);\r\n                \/\/ \u73fe\u72b6\u7dad\u6301 \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double conservationScoreX = getPositionX(originX, lineLength, conservation, items, 3);\r\n                final double conservationScoreY = getPositionY(originY, lineLength, conservation, items, 3);\r\n                \/\/ \u81ea\u5df1\u8d85\u8d8a \u30b9\u30b3\u30a2\u30dd\u30b8\u30b7\u30e7\u30f3\r\n                final double selfTranscendenceScoreX = getPositionX(originX, lineLength, selfTranscendence, items, 4);\r\n                final double selfTranscendenceScoreY = getPositionY(originY, lineLength, selfTranscendence, items, 4);\r\n\r\n                \/\/ \u30b9\u30b3\u30a2\u8868\u793a\r\n                valuesGc.setStroke(Color.rgb(255, 0, 255));\r\n                valuesGc.setLineWidth(2);\r\n                valuesGc.beginPath();\r\n                valuesGc.moveTo(hedonismScoreX, hedonismScoreY);\r\n                valuesGc.lineTo(selfEnhancementScoreX, selfEnhancementScoreY);\r\n                valuesGc.lineTo(opennessToChangeScoreX, opennessToChangeScoreY);\r\n                valuesGc.lineTo(conservationScoreX, conservationScoreY);\r\n                valuesGc.lineTo(selfTranscendenceScoreX, selfTranscendenceScoreY);\r\n                valuesGc.closePath();\r\n                valuesGc.stroke();\r\n                valuesGc.setFill(Color.rgb(255, 0, 255, 0.3));\r\n                valuesGc.fill();\r\n\r\n                \/\/ \u9805\u76ee\u3000\u7d50\u679c\u8868\u793a\r\n                valuesGc.setFontSmoothingType(FontSmoothingType.LCD);\r\n                valuesGc.setFont(Font.font(18));\r\n                valuesGc.setFill(Color.RED);\r\n                valuesGc.fillText(hedonismResult, hedonismX - width * 4 \/ 2, hedonismY + jpCenterHeight - offset - offset * 1.1);\r\n                valuesGc.fillText(selfEnhancementResult, selfEnhancementX + width \/ 2, selfEnhancementY + jpCenterHeight - offset * 1.1);\r\n                valuesGc.fillText(opennessToChangeResult, opennessToChangeX - width * 2, opennessToChangeY + jpCenterHeight + offset + offset * 1.1);\r\n                valuesGc.fillText(conservationResult, conservationX - width * 9 \/ 4, conservationY + jpCenterHeight + offset + offset * 1.1);\r\n                valuesGc.fillText(selfTranscendenceResult, selfTranscendenceX - width * 9 \/ 2, selfTranscendenceY + jpCenterHeight - offset * 1.1);\r\n\r\n            }\r\n\r\n        };\r\n\r\n        service.submit(task);\r\n\r\n        idTextField.editableProperty().bind(task.stateProperty().isNotEqualTo(RUNNING));\r\n        diagnosisButton.disableProperty().bind(Bindings.or(\r\n                task.stateProperty().isEqualTo(RUNNING),\r\n                idTextField.textProperty().isEmpty()));\r\n        cancelButton.disableProperty().bind(task.stateProperty().isNotEqualTo(RUNNING));\r\n        clearButton.disableProperty().bind(task.stateProperty().isEqualTo(RUNNING));\r\n        progressIndicator.visibleProperty().bind(task.stateProperty().isEqualTo(RUNNING));\r\n        messageLabel.textProperty().bind(task.messageProperty());\r\n\r\n    }\r\n\r\n    @Override\r\n    public void initialize(URL url, ResourceBundle rb) {\r\n        tweetCollection = new TweetCollection();\r\n        personalityAnalysis = new PersonalityAnalysis();\r\n        personalityGc = personalityCanvas.getGraphicsContext2D();\r\n        needsGc = needsCanvas.getGraphicsContext2D();\r\n        valuesGc = valuesCanvas.getGraphicsContext2D();\r\n        progressIndicator.setProgress(-1.0);\r\n        diagnosisButton.disableProperty().bind(idTextField.textProperty().isEmpty());\r\n\r\n        \/\/ Canvas \u306e\u30c6\u30ad\u30b9\u30c8\u5ea7\u6a19\u8a2d\u5b9a\u306b\u4f7f\u3046\u3002\u751f\u8089\u3001\u713c\u8089\u3001\u82e6\u8089\u306e\u7b56\u3068\u3057\u3066\u3053\u3046\u306a\u3063\u305f\u3002(&gt;_&lt;\uff61)\u3000\u4eca\u5f8c\u306e\u8ab2\u984c\u3068\u3059\u308b\u3002\r\n        Text text = new Text(\"\u5922\");\r\n        text.setFont(Font.font(18));\r\n        width = text.getBoundsInLocal().getWidth();\r\n        jpCenterHeight = (2 * text.getBaselineOffset() - text.getBoundsInLocal().getHeight()) \/ 2;\r\n        offset = text.getFont().getSize();\r\n\r\n        drawPersonalityChart();\r\n        drawNeedsChart();\r\n        drawValueChart();\r\n    }\r\n\r\n    void setStage(Stage stage) {\r\n        stage.setOnCloseRequest((WindowEvent we) -&gt; {\r\n            \/\/ \u30af\u30ed\u30fc\u30b8\u30f3\u30b0\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\r\n            DoubleProperty closeOpacityProperty = new SimpleDoubleProperty(1.0);\r\n            stage.opacityProperty().bind(closeOpacityProperty);\r\n            Timeline closeTimeline = new Timeline(\r\n                    new KeyFrame(\r\n                            new Duration(100),\r\n                            new KeyValue(closeOpacityProperty, 1.0)\r\n                    ), new KeyFrame(\r\n                            new Duration(2_500),\r\n                            new KeyValue(closeOpacityProperty, 0.0)\r\n                    ));\r\n            EventHandler&lt;ActionEvent&gt; eh = ae -&gt; {\r\n                service.shutdownNow();\r\n                Platform.exit();\r\n                System.exit(0);\r\n            };\r\n\r\n            closeTimeline.setOnFinished(eh);\r\n            closeTimeline.setCycleCount(1);\r\n            closeTimeline.play();\r\n            we.consume();\r\n        });\r\n    }\r\n\r\n    private void drawPersonalityChart() {\r\n        \/\/ \u539f\u70b9\r\n        final double originX = personalityChart.getWidth() \/ 2;\r\n        final double originY = personalityChart.getHeight() \/ 2;\r\n        \/\/ \u30e9\u30a4\u30f3\u9577\u3055\r\n        final double lineLength = 150.0;\r\n        \/\/ \u9805\u76ee\u6570\r\n        final int items = 5;\r\n        \/\/ \u77e5\u7684\u597d\u5947\u5fc3\r\n        opennessX = getPositionX(originX, lineLength, 1.0, items, 0);\r\n        opennessY = getPositionY(originY, lineLength, 1.0, items, 0);\r\n        \/\/ \u8aa0\u5b9f\u6027\r\n        conscientiousnessX = getPositionX(originX, lineLength, 1.0, items, 1);\r\n        conscientiousnessY = getPositionY(originY, lineLength, 1.0, items, 1);\r\n        \/\/ \u5916\u5411\u6027\r\n        extraversionX = getPositionX(originX, lineLength, 1.0, items, 2);\r\n        extraversionY = getPositionY(originY, lineLength, 1.0, items, 2);\r\n        \/\/ \u611f\u60c5\u8d77\u4f0f\r\n        emotionalRangeX = getPositionX(originX, lineLength, 1.0, items, 3);\r\n        emotionalRangeY = getPositionY(originY, lineLength, 1.0, items, 3);\r\n        \/\/ \u5354\u8abf\u6027\r\n        agreeablenessX = getPositionX(originX, lineLength, 1.0, items, 4);\r\n        agreeablenessY = getPositionY(originY, lineLength, 1.0, items, 4);\r\n\r\n        GraphicsContext gc = personalityChart.getGraphicsContext2D();\r\n\r\n        gc.setStroke(Color.BLUE);\r\n        gc.setLineWidth(1);\r\n        gc.strokeLine(originX, originY, opennessX, opennessY);\r\n        gc.strokeLine(originX, originY, conscientiousnessX, conscientiousnessY);\r\n        gc.strokeLine(originX, originY, extraversionX, extraversionY);\r\n        gc.strokeLine(originX, originY, emotionalRangeX, emotionalRangeY);\r\n        gc.strokeLine(originX, originY, agreeablenessX, agreeablenessY);\r\n        for (int i = 0; 6 &gt; i; i++) {\r\n            gc.beginPath();\r\n            gc.moveTo(getPositionX(originX, lineLength, i * 0.2, items, 0), getPositionY(originY, lineLength, i * 0.2, items, 0));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 1), getPositionY(originY, lineLength, i * 0.2, items, 1));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 2), getPositionY(originY, lineLength, i * 0.2, items, 2));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 3), getPositionY(originY, lineLength, i * 0.2, items, 3));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 4), getPositionY(originY, lineLength, i * 0.2, items, 4));\r\n            gc.closePath();\r\n            gc.stroke();\r\n        }\r\n\r\n        gc.setFontSmoothingType(FontSmoothingType.LCD);\r\n        gc.setFont(Font.font(18));\r\n        gc.setFill(Color.RED);\r\n        gc.fillText(\"\u77e5\u7684\u597d\u5947\u5fc3\", opennessX - width * 5 \/ 2, opennessY + jpCenterHeight - offset);\r\n        gc.fillText(\"\u8aa0\u5b9f\u6027\", conscientiousnessX + width \/ 2, conscientiousnessY + jpCenterHeight);\r\n        gc.fillText(\"\u5916\u5411\u6027\", extraversionX - width, extraversionY + jpCenterHeight + offset);\r\n        gc.fillText(\"\u611f\u60c5\u8d77\u4f0f\", emotionalRangeX - width * 9 \/ 4, emotionalRangeY + jpCenterHeight + offset);\r\n        gc.fillText(\"\u5354\u8abf\u6027\", agreeablenessX - width * 7 \/ 2, agreeablenessY + jpCenterHeight);\r\n\r\n    }\r\n\r\n    private void drawNeedsChart() {\r\n        \/\/ \u539f\u70b9\r\n        final double originX = needsChart.getWidth() \/ 2;\r\n        final double originY = needsChart.getHeight() \/ 2;\r\n        \/\/ \u30e9\u30a4\u30f3\u9577\u3055\r\n        final double lineLength = 150.0;\r\n        \/\/ \u9805\u76ee\u6570\r\n        final int items = 12;\r\n        \/\/ \u5b9f\u7528\u4e3b\u7fa9\r\n        practicalityX = getPositionX(originX, lineLength, 1.0, items, 0);\r\n        practicalityY = getPositionY(originY, lineLength, 1.0, items, 0);\r\n        \/\/ \u597d\u5947\u5fc3\r\n        curiosityX = getPositionX(originX, lineLength, 1.0, items, 1);\r\n        curiosityY = getPositionY(originY, lineLength, 1.0, items, 1);\r\n        \/\/ \u81ea\u5df1\u8868\u73fe\r\n        selfExpressionX = getPositionX(originX, lineLength, 1.0, items, 2);\r\n        selfExpressionY = getPositionY(originY, lineLength, 1.0, items, 2);\r\n        \/\/ \u7406\u60f3\r\n        idealX = getPositionX(originX, lineLength, 1.0, items, 3);\r\n        idealY = getPositionY(originY, lineLength, 1.0, items, 3);\r\n        \/\/ \u81ea\u7531\u4e3b\u7fa9\r\n        libertyX = getPositionX(originX, lineLength, 1.0, items, 4);\r\n        libertyY = getPositionY(originY, lineLength, 1.0, items, 4);\r\n        \/\/ \u5b89\u5b9a\u6027\r\n        stabilityX = getPositionX(originX, lineLength, 1.0, items, 5);\r\n        stabilityY = getPositionY(originY, lineLength, 1.0, items, 5);\r\n        \/\/ \u4ed5\u7d44\r\n        structureX = getPositionX(originX, lineLength, 1.0, items, 6);\r\n        structureY = getPositionY(originY, lineLength, 1.0, items, 6);\r\n        \/\/ \u8208\u596e\r\n        excitementX = getPositionX(originX, lineLength, 1.0, items, 7);\r\n        excitementY = getPositionY(originY, lineLength, 1.0, items, 7);\r\n        \/\/ \u6311\u6226\r\n        challengeX = getPositionX(originX, lineLength, 1.0, items, 8);\r\n        challengeY = getPositionY(originY, lineLength, 1.0, items, 8);\r\n        \/\/ \u793e\u4f1a\u6027\r\n        loveX = getPositionX(originX, lineLength, 1.0, items, 9);\r\n        loveY = getPositionY(originY, lineLength, 1.0, items, 9);\r\n        \/\/ \u8abf\u548c\r\n        harmonyX = getPositionX(originX, lineLength, 1.0, items, 10);\r\n        harmonyY = getPositionY(originY, lineLength, 1.0, items, 10);\r\n        \/\/ \u89aa\u5bc6\r\n        closenessX = getPositionX(originX, lineLength, 1.0, items, 11);\r\n        closenessY = getPositionY(originY, lineLength, 1.0, items, 11);\r\n\r\n        GraphicsContext gc = needsChart.getGraphicsContext2D();\r\n\r\n        gc.setStroke(Color.BLUE);\r\n        gc.setLineWidth(1);\r\n        gc.strokeLine(originX, originY, practicalityX, practicalityY);\r\n        gc.strokeLine(originX, originY, curiosityX, curiosityY);\r\n        gc.strokeLine(originX, originY, selfExpressionX, selfExpressionY);\r\n        gc.strokeLine(originX, originY, idealX, idealY);\r\n        gc.strokeLine(originX, originY, libertyX, libertyY);\r\n        gc.strokeLine(originX, originY, stabilityX, stabilityY);\r\n        gc.strokeLine(originX, originY, structureX, structureY);\r\n        gc.strokeLine(originX, originY, excitementX, excitementY);\r\n        gc.strokeLine(originX, originY, challengeX, challengeY);\r\n        gc.strokeLine(originX, originY, loveX, loveY);\r\n        gc.strokeLine(originX, originY, harmonyX, harmonyY);\r\n        gc.strokeLine(originX, originY, closenessX, closenessY);\r\n        for (int i = 0; 6 &gt; i; i++) {\r\n            gc.beginPath();\r\n            gc.moveTo(getPositionX(originX, lineLength, i * 0.2, items, 0), getPositionY(originY, lineLength, i * 0.2, items, 0));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 1), getPositionY(originY, lineLength, i * 0.2, items, 1));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 2), getPositionY(originY, lineLength, i * 0.2, items, 2));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 3), getPositionY(originY, lineLength, i * 0.2, items, 3));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 4), getPositionY(originY, lineLength, i * 0.2, items, 4));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 5), getPositionY(originY, lineLength, i * 0.2, items, 5));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 6), getPositionY(originY, lineLength, i * 0.2, items, 6));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 7), getPositionY(originY, lineLength, i * 0.2, items, 7));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 8), getPositionY(originY, lineLength, i * 0.2, items, 8));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 9), getPositionY(originY, lineLength, i * 0.2, items, 9));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 10), getPositionY(originY, lineLength, i * 0.2, items, 10));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 11), getPositionY(originY, lineLength, i * 0.2, items, 11));\r\n            gc.closePath();\r\n            gc.stroke();\r\n        }\r\n\r\n        gc.setFontSmoothingType(FontSmoothingType.LCD);\r\n        gc.setFont(Font.font(18));\r\n        gc.setFill(Color.RED);\r\n        gc.fillText(\"\u5b9f\u7528\u4e3b\u7fa9\", practicalityX - width * 4 \/ 2, practicalityY + jpCenterHeight - offset);\r\n        gc.fillText(\"\u597d\u5947\u5fc3\", curiosityX + width \/ 2, curiosityY + jpCenterHeight - offset \/ 2);\r\n        gc.fillText(\"\u81ea\u5df1\u8868\u73fe\", selfExpressionX + width \/ 2, selfExpressionY - jpCenterHeight + offset \/ 2);\r\n        gc.fillText(\"\u7406\u60f3\", idealX + width \/ 2, idealY + jpCenterHeight);\r\n        gc.fillText(\"\u81ea\u7531\u4e3b\u7fa9\", libertyX + width \/ 2, libertyY + jpCenterHeight + offset \/ 2);\r\n        gc.fillText(\"\u5b89\u5b9a\u6027\", stabilityX + width \/ 2, stabilityY - jpCenterHeight + offset * 1.5);\r\n        gc.fillText(\"\u4ed5\u7d44\", structureX - width * 2 \/ 2, structureY + jpCenterHeight + offset);\r\n        gc.fillText(\"\u8208\u596e\", excitementX - width * 5 \/ 2, excitementY - jpCenterHeight + offset * 1.5);\r\n        gc.fillText(\"\u6311\u6226\", challengeX - width * 5 \/ 2, challengeY + jpCenterHeight + offset \/ 2);\r\n        gc.fillText(\"\u793e\u4f1a\u6027\", loveX - width * 7 \/ 2, loveY + jpCenterHeight);\r\n        gc.fillText(\"\u8abf\u548c\", harmonyX - width * 5 \/ 2, harmonyY - jpCenterHeight + offset \/ 2);\r\n        gc.fillText(\"\u89aa\u5bc6\", closenessX - width * 5 \/ 2, closenessY + jpCenterHeight - offset \/ 2);\r\n\r\n    }\r\n\r\n    private void drawValueChart() {\r\n        \/\/ \u539f\u70b9\r\n        final double originX = valuesChart.getWidth() \/ 2;\r\n        final double originY = valuesChart.getHeight() \/ 2;\r\n        \/\/ \u30e9\u30a4\u30f3\u9577\u3055\r\n        final double lineLength = 150.0;\r\n        \/\/ \u9805\u76ee\u6570\r\n        final int items = 5;\r\n\r\n        \/\/ \u5feb\u697d\u4e3b\u7fa9\r\n        hedonismX = getPositionX(originX, lineLength, 1.0, items, 0);\r\n        hedonismY = getPositionY(originY, lineLength, 1.0, items, 0);\r\n        \/\/ \u81ea\u5df1\u5897\u9032\r\n        selfEnhancementX = getPositionX(originX, lineLength, 1.0, items, 1);\r\n        selfEnhancementY = getPositionY(originY, lineLength, 1.0, items, 1);\r\n        \/\/ \u5909\u5316\u8a31\u5bb9\u6027\r\n        opennessToChangeX = getPositionX(originX, lineLength, 1.0, items, 2);\r\n        opennessToChangeY = getPositionY(originY, lineLength, 1.0, items, 2);\r\n        \/\/ \u73fe\u72b6\u7dad\u6301\r\n        conservationX = getPositionX(originX, lineLength, 1.0, items, 3);\r\n        conservationY = getPositionY(originY, lineLength, 1.0, items, 3);\r\n        \/\/ \u81ea\u5df1\u8d85\u8d8a\r\n        selfTranscendenceX = getPositionX(originX, lineLength, 1.0, items, 4);\r\n        selfTranscendenceY = getPositionY(originY, lineLength, 1.0, items, 4);\r\n\r\n        GraphicsContext gc = valuesChart.getGraphicsContext2D();\r\n\r\n        gc.setStroke(Color.BLUE);\r\n        gc.setLineWidth(1);\r\n        gc.strokeLine(originX, originY, hedonismX, hedonismY);\r\n        gc.strokeLine(originX, originY, selfEnhancementX, selfEnhancementY);\r\n        gc.strokeLine(originX, originY, opennessToChangeX, opennessToChangeY);\r\n        gc.strokeLine(originX, originY, conservationX, conservationY);\r\n        gc.strokeLine(originX, originY, selfTranscendenceX, selfTranscendenceY);\r\n        for (int i = 0; 6 &gt; i; i++) {\r\n            gc.beginPath();\r\n            gc.moveTo(getPositionX(originX, lineLength, i * 0.2, items, 0), getPositionY(originY, lineLength, i * 0.2, items, 0));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 1), getPositionY(originY, lineLength, i * 0.2, items, 1));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 2), getPositionY(originY, lineLength, i * 0.2, items, 2));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 3), getPositionY(originY, lineLength, i * 0.2, items, 3));\r\n            gc.lineTo(getPositionX(originX, lineLength, i * 0.2, items, 4), getPositionY(originY, lineLength, i * 0.2, items, 4));\r\n            gc.closePath();\r\n            gc.stroke();\r\n        }\r\n\r\n        gc.setFontSmoothingType(FontSmoothingType.LCD);\r\n        gc.setFont(Font.font(18));\r\n        gc.setFill(Color.RED);\r\n        gc.fillText(\"\u5feb\u697d\u4e3b\u7fa9\", hedonismX - width * 4 \/ 2, hedonismY + jpCenterHeight - offset);\r\n        gc.fillText(\"\u81ea\u5df1\u5897\u9032\", selfEnhancementX + width \/ 2, selfEnhancementY + jpCenterHeight);\r\n        gc.fillText(\"\u5909\u5316\u8a31\u5bb9\u6027\", opennessToChangeX - width * 2, opennessToChangeY + jpCenterHeight + offset);\r\n        gc.fillText(\"\u73fe\u72b6\u7dad\u6301\", conservationX - width * 9 \/ 4, conservationY + jpCenterHeight + offset);\r\n        gc.fillText(\"\u81ea\u5df1\u8d85\u8d8a\", selfTranscendenceX - width * 9 \/ 2, selfTranscendenceY + jpCenterHeight);\r\n    }\r\n\r\n    private double getPositionX(double originX, double lineLength, double ratio, int items, int vertex) {\r\n        return originX + lineLength * ratio * Math.cos(Math.toRadians(90 - (360 \/ items) * vertex));\r\n    }\r\n\r\n    private double getPositionY(double originY, double lineLength, double ratio, int items, int vertex) {\r\n        return originY - lineLength * ratio * Math.sin(Math.toRadians(90 - (360 \/ items) * vertex));\r\n    }\r\n\r\n    private void clearChart() {\r\n        personalityGc.clearRect(0, 0, personalityCanvas.getWidth(), personalityCanvas.getHeight());\r\n        needsGc.clearRect(0, 0, needsCanvas.getWidth(), needsCanvas.getHeight());\r\n        valuesGc.clearRect(0, 0, valuesCanvas.getWidth(), valuesCanvas.getHeight());\r\n    }\r\n\r\n}\r\n\r\n<\/pre>\n<pre title=\"TweetCollection.java\">package jp.yucchi.personalitydiagnosis;\r\n\r\nimport com.ibm.watson.developer_cloud.personality_insights.v3.model.Profile;\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\nimport java.util.logging.Level;\r\nimport java.util.logging.Logger;\r\nimport javafx.concurrent.Task;\r\nimport javafx.scene.control.TextField;\r\nimport twitter4j.Paging;\r\nimport twitter4j.ResponseList;\r\nimport twitter4j.Status;\r\nimport twitter4j.Twitter;\r\nimport twitter4j.TwitterException;\r\nimport twitter4j.TwitterFactory;\r\nimport twitter4j.conf.ConfigurationBuilder;\r\n\r\n\/**\r\n *\r\n * @author Yucchi\r\n *\/\r\npublic class TweetCollection {\r\n\r\n    Task&lt;Profile&gt; task;\r\n    TextField idTextField;\r\n\r\n    TweetCollection() {\r\n    }\r\n\r\n    public TweetCollection(Task&lt;Profile&gt; task, TextField idTextField) {\r\n        this.task = task;\r\n        this.idTextField = idTextField;\r\n    }\r\n\r\n    public List&lt;Status&gt; getTweets(TextField idTextField, Task&lt;Profile&gt; task) {\r\n\r\n        Twitter twitter;\r\n\r\n        ConfigurationBuilder cb = new ConfigurationBuilder();\r\n        cb.setDebugEnabled(true)\r\n                .setOAuthConsumerKey(\"Set Your OAuth ConsumerKey\")\r\n                .setOAuthConsumerSecret(\"Set Your OAuth Consumer Secret\")\r\n                .setOAuthAccessToken(\"Set Your OAuth Access Token\")\r\n                .setOAuthAccessTokenSecret(\"Set YourOAuth Access Token Secret\");\r\n\r\n        TwitterFactory tf = new TwitterFactory(cb.build());\r\n        twitter = tf.getInstance();\r\n        long userId = 0;\r\n        List&lt;Status&gt; tweetList = new ArrayList&lt;&gt;();\r\n\r\n        try {\r\n            userId = twitter.showUser(idTextField.getText()).getId();\r\n        } catch (TwitterException ex) {\r\n            Logger.getLogger(FXMLPersonalityDiagnosisController.class.getName()).log(Level.SEVERE, null, ex);\r\n        }\r\n\r\n        long cursor = -1;\r\n        int tweetQuantity = 200;\r\n        int totalTweets = 1_000;\r\n        Paging page = new Paging(1, tweetQuantity);\r\n        ResponseList&lt;Status&gt; tweets = null;\r\n\r\n        do {\r\n            if (task.isCancelled()) {\r\n                return null;\r\n            }\r\n            try {\r\n                tweets = twitter.getUserTimeline(userId, page);\r\n            } catch (TwitterException ex) {\r\n                Logger.getLogger(FXMLPersonalityDiagnosisController.class.getName()).log(Level.SEVERE, null, ex);\r\n            }\r\n            if (tweets == null || tweets.isEmpty()) {\r\n                break;\r\n            }\r\n            for (int i = 0; i &lt; tweets.size(); i++) {\r\n                if (task.isCancelled()) {\r\n                    return null;\r\n                }\r\n                Status status = tweets.get(i);\r\n                \/\/ \u30aa\u30fc\u30d0\u30fc\u30e9\u30c3\u30d7\u9632\u6b62\r\n                cursor = status.getId() - 1;\r\n                \/\/ \u30ea\u30c4\u30a4\u30fc\u30c8\u3092\u9664\u5916\r\n                if (status.isRetweet()) {\r\n                    continue;\r\n                }\r\n                \/\/ \u65e5\u672c\u8a9e\u3060\u3051\u9078\u629e\r\n                if (!\"ja\".contains(status.getLang())) {\r\n                    continue;\r\n                }\r\n                tweetList.add(status);\r\n            }\r\n            if (tweetList.size() &gt;= totalTweets) {\r\n                return tweetList;\r\n            }\r\n            page.maxId(cursor); \/\/ \u6b21\u306f\u3053\u3053\u3067\u8a2d\u5b9a\u3055\u308c\u308b max_id \u304b\u3089\r\n        } while (true);\r\n\r\n        return tweetList;\r\n\r\n    }\r\n\r\n}\r\n\r\n<\/pre>\n<pre title=\"PersonalityAnalysis.java\">package jp.yucchi.personalitydiagnosis;\r\n\r\nimport com.ibm.watson.developer_cloud.personality_insights.v3.PersonalityInsights;\r\nimport com.ibm.watson.developer_cloud.personality_insights.v3.model.ContentItem;\r\nimport com.ibm.watson.developer_cloud.personality_insights.v3.model.Profile;\r\nimport com.ibm.watson.developer_cloud.personality_insights.v3.model.ProfileOptions;\r\nimport com.ibm.watson.developer_cloud.service.exception.BadRequestException;\r\nimport java.util.List;\r\nimport java.util.logging.Level;\r\nimport java.util.logging.Logger;\r\nimport twitter4j.Status;\r\n\r\n\/**\r\n *\r\n * @author Yucchi\r\n *\/\r\npublic class PersonalityAnalysis {\r\n\r\n    List&lt;Status&gt; tweets;\r\n\r\n    PersonalityAnalysis() {\r\n    }\r\n\r\n    public PersonalityAnalysis(List&lt;Status&gt; tweets) {\r\n        this.tweets = tweets;\r\n    }\r\n\r\n    Profile toAnalyze(List&lt;Status&gt; tweets) {\r\n\r\n        Profile result = null;\r\n        String text = null;\r\n\r\n        for (int i = 0; tweets.size() &gt; i; i++) {\r\n            text += tweets.get(i).getText();\r\n        }\r\n\r\n        PersonalityInsights service = new PersonalityInsights(\"2016-10-19\");\r\n        service.setUsernameAndPassword(\"username\", \"password\");\r\n        ProfileOptions options = new ProfileOptions.Builder()\r\n                .contentLanguage(ContentItem.Language.JA)\r\n                .acceptLanguage(ProfileOptions.AcceptLanguage.JA)\r\n                .text(text).build();\r\n\r\n        try {\r\n            result = service.profile(options).execute();\r\n        } catch (BadRequestException e) {\r\n            Logger.getLogger(PersonalityAnalysis.class.getName()).log(Level.SEVERE, null, e);\r\n        }\r\n\r\n        return result;\r\n\r\n    }\r\n\r\n}\r\n\r\n<\/pre>\n<pre title=\"FXMLPersonalityDiagnosis.fxml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n\r\n&lt;?import javafx.geometry.Insets?&gt;\r\n&lt;?import javafx.scene.canvas.Canvas?&gt;\r\n&lt;?import javafx.scene.control.Button?&gt;\r\n&lt;?import javafx.scene.control.Label?&gt;\r\n&lt;?import javafx.scene.control.ProgressIndicator?&gt;\r\n&lt;?import javafx.scene.control.TextField?&gt;\r\n&lt;?import javafx.scene.layout.AnchorPane?&gt;\r\n&lt;?import javafx.scene.text.Font?&gt;\r\n\r\n&lt;AnchorPane id=\"anchorPane\" fx:id=\"anchorPane\" maxHeight=\"-Infinity\" maxWidth=\"-Infinity\" minHeight=\"-Infinity\" minWidth=\"-Infinity\" prefHeight=\"730.0\" prefWidth=\"1532.0\" xmlns=\"http:\/\/javafx.com\/javafx\/9.0.1\" xmlns:fx=\"http:\/\/javafx.com\/fxml\/1\" fx:controller=\"jp.yucchi.personalitydiagnosis.FXMLPersonalityDiagnosisController\"&gt;\r\n    &lt;children&gt;\r\n        &lt;Canvas id=\"personalityChart\" fx:id=\"personalityChart\" height=\"500.0\" layoutX=\"49.0\" layoutY=\"653.0\" width=\"500.0\" AnchorPane.bottomAnchor=\"70.0\" AnchorPane.leftAnchor=\"6.0\" \/&gt;\r\n        &lt;Canvas id=\"personalityCanvas\" fx:id=\"personalityCanvas\" height=\"500.0\" layoutX=\"105.0\" layoutY=\"335.0\" width=\"500.0\" AnchorPane.bottomAnchor=\"70.0\" AnchorPane.leftAnchor=\"6.0\" \/&gt;\r\n        &lt;Canvas id=\"needsChart\" fx:id=\"needsChart\" height=\"500.0\" layoutX=\"643.0\" layoutY=\"635.0\" width=\"500.0\" AnchorPane.bottomAnchor=\"70.0\" AnchorPane.leftAnchor=\"516.0\" \/&gt;\r\n        &lt;Canvas id=\"needsCanvas\" fx:id=\"needsCanvas\" height=\"500.0\" layoutX=\"674.0\" layoutY=\"335.0\" width=\"500.0\" AnchorPane.bottomAnchor=\"70.0\" AnchorPane.leftAnchor=\"516.0\" \/&gt;\r\n        &lt;Canvas id=\"valuesChart\" fx:id=\"valuesChart\" height=\"500.0\" layoutX=\"1228.0\" layoutY=\"630.0\" width=\"500.0\" AnchorPane.bottomAnchor=\"70.0\" AnchorPane.rightAnchor=\"6.0\" \/&gt;\r\n        &lt;Canvas id=\"valuesCanvas\" fx:id=\"valuesCanvas\" height=\"500.0\" layoutX=\"1192.0\" layoutY=\"335.0\" width=\"500.0\" AnchorPane.bottomAnchor=\"70.0\" AnchorPane.rightAnchor=\"6.0\" \/&gt;\r\n        &lt;Label id=\"big5PersonalityLabel\" fx:id=\"big5Label\" alignment=\"CENTER\" layoutX=\"164.0\" layoutY=\"385.0\" maxHeight=\"-Infinity\" maxWidth=\"-Infinity\" minHeight=\"-Infinity\" minWidth=\"-Infinity\" prefHeight=\"50.0\" prefWidth=\"500.0\" text=\"Big 5 Personality\" AnchorPane.bottomAnchor=\"576.0\" AnchorPane.leftAnchor=\"6.0\"&gt;\r\n            &lt;font&gt;\r\n                &lt;Font size=\"36.0\" \/&gt;\r\n            &lt;\/font&gt;\r\n        &lt;\/Label&gt;\r\n        &lt;Label id=\"needsLabel\" fx:id=\"needsLabel\" alignment=\"CENTER\" layoutX=\"638.0\" layoutY=\"359.0\" maxHeight=\"-Infinity\" maxWidth=\"-Infinity\" minHeight=\"-Infinity\" minWidth=\"-Infinity\" prefHeight=\"50.0\" prefWidth=\"500.0\" text=\"Needs\" AnchorPane.bottomAnchor=\"576.0\" AnchorPane.leftAnchor=\"516.0\"&gt;\r\n            &lt;font&gt;\r\n                &lt;Font size=\"36.0\" \/&gt;\r\n            &lt;\/font&gt;\r\n        &lt;\/Label&gt;\r\n        &lt;Label id=\"valueLabel\" fx:id=\"valueLabel\" alignment=\"CENTER\" layoutX=\"1183.0\" layoutY=\"357.0\" maxHeight=\"-Infinity\" maxWidth=\"-Infinity\" minHeight=\"-Infinity\" minWidth=\"-Infinity\" prefHeight=\"50.0\" prefWidth=\"500.0\" text=\"Value\" AnchorPane.bottomAnchor=\"576.0\" AnchorPane.rightAnchor=\"6.0\"&gt;\r\n            &lt;font&gt;\r\n                &lt;Font size=\"36.0\" \/&gt;\r\n            &lt;\/font&gt;\r\n        &lt;\/Label&gt;\r\n        &lt;Label id=\"id\" fx:id=\"idLabel\" alignment=\"CENTER\" layoutX=\"73.0\" layoutY=\"50.0\" maxHeight=\"-Infinity\" maxWidth=\"-Infinity\" minHeight=\"-Infinity\" minWidth=\"-Infinity\" prefHeight=\"70.0\" prefWidth=\"230.0\" text=\"Twitter ID \" AnchorPane.leftAnchor=\"90.0\" AnchorPane.topAnchor=\"10.0\"&gt;\r\n            &lt;font&gt;\r\n                &lt;Font name=\"System Bold\" size=\"38.0\" \/&gt;\r\n            &lt;\/font&gt;\r\n        &lt;\/Label&gt;\r\n        &lt;Button id=\"diagnosis\" fx:id=\"diagnosisButton\" alignment=\"CENTER\" layoutX=\"802.0\" layoutY=\"14.0\" maxHeight=\"-Infinity\" maxWidth=\"-Infinity\" minHeight=\"-Infinity\" minWidth=\"-Infinity\" mnemonicParsing=\"false\" onAction=\"#diagnosis\" prefHeight=\"70.0\" prefWidth=\"300.0\" text=\"DIAGNOSIS\" AnchorPane.leftAnchor=\"802.0\" AnchorPane.topAnchor=\"10.0\"&gt;\r\n            &lt;font&gt;\r\n                &lt;Font name=\"System Bold\" size=\"38.0\" \/&gt;\r\n            &lt;\/font&gt;\r\n        &lt;\/Button&gt;\r\n        &lt;TextField id=\"idTextField\" fx:id=\"idTextField\" focusTraversable=\"false\" layoutX=\"326.0\" layoutY=\"10.0\" maxHeight=\"-Infinity\" maxWidth=\"-Infinity\" minHeight=\"-Infinity\" minWidth=\"-Infinity\" prefHeight=\"70.0\" prefWidth=\"435.0\" text=\"\\@Yucchi_jp\" AnchorPane.leftAnchor=\"326.0\" AnchorPane.topAnchor=\"10.0\"&gt;\r\n            &lt;font&gt;\r\n                &lt;Font name=\"System Bold\" size=\"38.0\" \/&gt;\r\n            &lt;\/font&gt;\r\n        &lt;\/TextField&gt;\r\n        &lt;Button id=\"cancel\" fx:id=\"cancelButton\" alignment=\"CENTER\" disable=\"true\" layoutX=\"1078.0\" layoutY=\"14.0\" maxHeight=\"-Infinity\" maxWidth=\"-Infinity\" minHeight=\"-Infinity\" minWidth=\"-Infinity\" mnemonicParsing=\"false\" onAction=\"#cancel\" prefHeight=\"70.0\" prefWidth=\"300.0\" text=\"CANCEL\" AnchorPane.rightAnchor=\"90.0\" AnchorPane.topAnchor=\"10.0\"&gt;\r\n            &lt;font&gt;\r\n                &lt;Font name=\"System Bold\" size=\"38.0\" \/&gt;\r\n            &lt;\/font&gt;\r\n            &lt;opaqueInsets&gt;\r\n                &lt;Insets \/&gt;\r\n            &lt;\/opaqueInsets&gt;\r\n        &lt;\/Button&gt;\r\n        &lt;ProgressIndicator id=\"progressIndicator\" fx:id=\"progressIndicator\" layoutX=\"613.0\" layoutY=\"315.0\" opacity=\"0.0\" progress=\"0.0\" AnchorPane.bottomAnchor=\"75.0\" AnchorPane.leftAnchor=\"300.0\" AnchorPane.rightAnchor=\"300.0\" AnchorPane.topAnchor=\"165.0\" \/&gt;\r\n        &lt;Button id=\"clearButton\" fx:id=\"clearButton\" alignment=\"CENTER\" layoutX=\"1142.0\" layoutY=\"664.0\" maxHeight=\"-Infinity\" maxWidth=\"-Infinity\" minHeight=\"-Infinity\" minWidth=\"-Infinity\" mnemonicParsing=\"false\" onAction=\"#clear\" prefHeight=\"50.0\" prefWidth=\"300.0\" text=\"CLEAR\" AnchorPane.bottomAnchor=\"10.0\" AnchorPane.rightAnchor=\"90.0\"&gt;\r\n            &lt;font&gt;\r\n                &lt;Font name=\"System Bold\" size=\"26.0\" \/&gt;\r\n            &lt;\/font&gt;\r\n        &lt;\/Button&gt;\r\n        &lt;Label id=\"messageLabel\" fx:id=\"messageLabel\" layoutX=\"90.0\" layoutY=\"686.0\" minHeight=\"50.0\" prefHeight=\"50.0\" prefWidth=\"1026.0\" text=\"Please enter the Twitter ID and press the diagnosis button.\" AnchorPane.bottomAnchor=\"10.0\" AnchorPane.leftAnchor=\"90.0\"&gt;\r\n            &lt;font&gt;\r\n                &lt;Font name=\"System Bold\" size=\"26.0\" \/&gt;\r\n            &lt;\/font&gt;\r\n        &lt;\/Label&gt;\r\n    &lt;\/children&gt;\r\n&lt;\/AnchorPane&gt;\r\n\r\n<\/pre>\n<pre title=\"PersonalityDiagnosisCSS.css\">\/* \r\n    Author     : Yucchi\r\n*\/\r\n\r\n\/* AnchorPane *\/\r\n#anchorPane {\r\n    -fx-background-color: black;\r\n}\r\n\r\n\/* Button *\/\r\n.button {\r\n    -fx-padding: 5 22 5 22;   \r\n    -fx-border-color: hotpink;\r\n    -fx-border-width: 2;\r\n    -fx-background-radius: 0;\r\n    -fx-background-color: #1d1d1d;\r\n    -fx-font-family: \"Segoe UI\", Helvetica, Arial, sans-serif;\r\n    -fx-font-size: 30pt;\r\n    -fx-text-fill: hotpink;\r\n}\r\n\r\n.button:hover {\r\n    -fx-background-color: #3a3a3a;\r\n}\r\n\r\n.button:pressed, .button:default:hover:pressed\r\n{\r\n    -fx-background-color:#ccccff;\r\n    -fx-text-fill:#ff00ff;\r\n}\r\n\r\n.button:focused\r\n{\r\n    -fx-border-color: hotpink, hotpink;\r\n    -fx-border-width: 1, 1;\r\n    -fx-border-style: solid, segments(1, 1);\r\n    -fx-border-radius: 0, 0;\r\n    -fx-border-insets: 1 1 1 1, 0;\r\n}\r\n\r\n.button:disabled, .button:default:disabled\r\n{\r\n    -fx-opacity: 0.4;\r\n    -fx-background-color: #1d1d1d;\r\n    -fx-text-fill:lightpink;\r\n}\r\n\r\n.button:default\r\n{\r\n    -fx-background-color: #008287;\r\n    -fx-text-fill: #ffffff;\r\n}\r\n\r\n.button:default:hover{\r\n    -fx-background-color: #219297;\r\n}\r\n\r\n#clearButton{\r\n    -fx-padding: 5 22 5 22;   \r\n    -fx-border-color: hotpink;\r\n    -fx-border-width: 2;\r\n    -fx-background-radius: 0;\r\n    -fx-background-color: #1d1d1d;\r\n    -fx-font-family: \"Segoe UI\", Helvetica, Arial, sans-serif;\r\n    -fx-font-size: 20pt;\r\n    -fx-text-fill: hotpink;\r\n}\r\n\r\n#clearButton:hover {\r\n    -fx-background-color: #3a3a3a;\r\n}\r\n\r\n#clearButton:pressed, .button:default:hover:pressed\r\n{\r\n    -fx-background-color: #ccccff;\r\n    -fx-text-fill: #ff00ff;\r\n}\r\n\r\n#clearButton:focused\r\n{\r\n    -fx-border-color: hotpink, hotpink;\r\n    -fx-border-width: 1, 1;\r\n    -fx-border-style: solid, segments(1, 1);\r\n    -fx-border-radius: 0, 0;\r\n    -fx-border-insets: 1 1 1 1, 0;\r\n}\r\n\r\n#clearButton:disabled, .button:default:disabled\r\n{\r\n    -fx-opacity: 0.4;\r\n    -fx-background-color: #1d1d1d;\r\n    -fx-text-fill:lightpink;\r\n}\r\n\r\n#clearButton:default\r\n{\r\n    -fx-background-color: #008287;\r\n    -fx-text-fill: #ffffff;\r\n}\r\n\r\n#clearButton:default:hover{\r\n    -fx-background-color: #219297;\r\n}\r\n\r\n.label{\r\n    -fx-text-fill: hotpink;\r\n}\r\n\r\n\/* TextField *\/\r\n#idTextField{\r\n    -fx-text-fill: hotpink;\r\n    -fx-border-color: hotpink;\r\n    -fx-background-color:TRANSPARENT;\r\n}\r\n\r\n.progress-indicator {\r\n    -fx-base: rgba(165.000005, 214.000002, 167.000005, 1.0);\r\n    -fx-progress-color: #ff00ff;\r\n}\r\n\r\n<\/pre>\n<p>\u898b\u3066\u306e\u901a\u308a GUI \u306f AnchorPane \u306b\u76f4\u63a5\u90e8\u54c1\u3092\u8cbc\u308a\u4ed8\u3051\u30ea\u30b5\u30a4\u30ba\u51fa\u6765\u306a\u304f\u3059\u308b\u3068\u3044\u3046\u3053\u3068\u3092\u3057\u3066\u3044\u307e\u3059\u3002(HBox,VBox \u4f7f\u3044\u307e\u3057\u3087\u3046(^_^;<\/p>\n<p>\u30c6\u30ad\u30b9\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u5165\u529b\u3055\u308c\u305f Twitter ID \u306e\u30c4\u30a4\u30fc\u30c8\u3092\u7d04 1000 \u4ef6\u53d6\u5f97\u3057\u3066\u305d\u308c\u3092 <a href=\"https:\/\/www.ibm.com\/watson\/services\/personality-insights\/\" target=\"_blank\">Watson Personality Insights<\/a> \u3067\u5206\u6790\u3057\u3066\u305d\u306e\u7d50\u679c\u3092\u30ec\u30fc\u30c0\u30fc\u30c1\u30e3\u30fc\u30c8\u306b\u8868\u793a\u3055\u305b\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>Twitter \u306e\u30c4\u30a4\u30fc\u30c8\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u306f Twitter API \u3092\u5229\u7528\u3057\u306a\u304f\u3066\u306f\u306a\u3089\u306a\u3044\u306e\u3067 <a href=\"https:\/\/developer.twitter.com\/\" target=\"_blank\">Twitter Developer<\/a> \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u767b\u9332\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/www.ibm.com\/cloud-computing\/jp\/ja\/bluemix\/\" target=\"_blank\">IBM Cloud (Bluemix)<\/a> \u306e <a href=\"https:\/\/www.ibm.com\/watson\/services\/personality-insights\/\" target=\"_blank\">Watson Personality Insights<\/a> \u3092\u5229\u7528\u3059\u308b\u306b\u306f <a href=\"https:\/\/www.ibm.com\/cloud-computing\/jp\/ja\/bluemix\/lite-account\/\" target=\"_blank\">IBM Cloud (Bluemix)\u30e9\u30a4\u30c8\u30fb\u30a2\u30ab\u30a6\u30f3\u30c8<\/a>\u306e\u767b\u9332\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u65e2\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u3001\u3082\u3057\u304f\u306f\u6709\u6599\u30d7\u30e9\u30f3\u3092\u3054\u5229\u7528\u306e\u65b9\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<p><strong>\u53c2\u8003<\/strong><\/p>\n<ul>\n<li><a href=\"http:\/\/yucchi.jp\/blog\/?p=2457\" target=\"_blank\">Twitter Developer \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u767b\u9332<\/a>\n<li><a href=\"http:\/\/yucchi.jp\/blog\/?p=2507\" target=\"_blank\">IBM BlueMix Watson \u306e Personality Insights \u3092\u4f7f\u3046\u305f\u3081\u306b<\/a><\/li>\n<\/ul>\n<p>\u30c4\u30a4\u30fc\u30c8\u53d6\u5f97\u3001\u5206\u6790\u30c7\u30fc\u30bf\u53d6\u5f97\u306e\u51e6\u7406\u306f\u6642\u9593\u304c\u304b\u304b\u308b\u306e\u3067\u975e\u540c\u671f\u51e6\u7406\u3067\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>JavaFX \u306b\u975e\u540c\u671f\u51e6\u7406\u3092\u7c21\u5358\u306b\u6271\u3046\u3053\u3068\u3092\u53ef\u80fd\u3068\u3059\u308b javafx.concurrent \u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p><strong>\u53c2\u8003<\/strong><\/p>\n<ul>\n<li><a href=\"http:\/\/yucchi.jp\/blog\/?p=2422\">\u4eca\u3055\u3089\u3060\u3051\u3069 JavaFX \u3067\u975e\u540c\u671f\u51e6\u7406<\/a><\/li>\n<\/ul>\n<p>Twitter \u306e\u30c4\u30a4\u30fc\u30c8\u3092\u53d6\u5f97\u51e6\u7406\u306f TweetCollection \u30af\u30e9\u30b9\u3067\u304a\u3053\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u53d6\u5f97\u3057\u305f\u30c4\u30a4\u30fc\u30c8\u306e\u5206\u6790\u51e6\u7406\u306f PersonalityAnalysis \u30af\u30e9\u30b9\u3067\u304a\u3053\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u3089\u4e8c\u3064\u306e\u51e6\u7406\u3092\u975e\u540c\u671f\u51e6\u7406\u3057\u3066\u305d\u308c\u306b\u3088\u3063\u3066\u5f97\u3089\u308c\u305f\u5206\u6790\u30c7\u30fc\u30bf\u3092 Canvas \u306b\u304a\u7d75\u304b\u304d\u5bfe\u5fdc\u3057\u305f\u30ec\u30fc\u30c0\u30fc\u30c1\u30e3\u30fc\u30c8\u4e0a\u306b\u8868\u793a\u3055\u305b\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3053\u3053\u3067 Canvas \u306f\u30d9\u30fc\u30b9\u3068\u306a\u308b\u30ec\u30fc\u30c0\u30fc\u30c1\u30e3\u30fc\u30c8\u3068\u3001\u5206\u6790\u30c7\u30fc\u30bf\u306e\u8868\u793a\u7528\u306e\u4e8c\u3064\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u5206\u6790\u30c7\u30fc\u30bf\u3092\u30d9\u30fc\u30b9\u306e\u30ec\u30fc\u30c0\u30fc\u30c1\u30e3\u30fc\u30c8\u306b\u91cd\u306d\u3066\u8868\u793a\u3055\u305b\u3066\u3044\u307e\u3059\u3002\uff08\u30d5\u30a9\u30c8\u30b7\u30e7\u30c3\u30d7\u3067\u4f7f\u3046\u30ec\u30a4\u30e4\u30fc\u306e\u3088\u3046\u306b\uff09<\/p>\n<p>\u3053\u3053\u3067 Canvas \u306b\u6587\u5b57\u5217\u3092\u8868\u793a\u3055\u305b\u308b\u306e\u306b\u4f4d\u7f6e\u6c7a\u3081\u304c\u96e3\u3057\u304f\u82e6\u52b4\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>X \u5ea7\u6a19\u306e\u4f4d\u7f6e\u306f\u65e5\u672c\u8a9e\u3067\u7b49\u5e45\u306e\u3082\u306e\u3092\u4f7f\u3063\u3066\u3044\u308b\u306e\u3067\u4e00\u6587\u5b57\u306e\u5e45\u30c7\u30fc\u30bf\u3092\u5143\u306b\u8a08\u7b97\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u5bfe\u5fdc\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>Y \u5ea7\u6a19\u306f\u306a\u304b\u306a\u304b\u96e3\u3057\u304f\u7d50\u5c40\u3053\u308c\u3068\u3044\u3063\u305f\u7d50\u8ad6\u304c\u5f97\u3089\u308c\u305a\u30d5\u30a9\u30f3\u30c8\u306e\u30b5\u30a4\u30ba\u3092\u305d\u306e\u307e\u307e\u5229\u7528\u3057\u305f\u308a\u3001\u65e5\u672c\u8a9e\u306e\u30bb\u30f3\u30bf\u30fc\u306e\u4f4d\u7f6e\u3092\u30b4\u30cb\u30e7\u30b4\u30cb\u30e7\u3057\u3066\u53d6\u5f97\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u3067\u306f\u3042\u3093\u307e\u308a\u306a\u306e\u3067 FontMetrics \u3092\u53d6\u5f97\u3057\u3066\u3061\u3083\u3093\u3068\u5bfe\u5fdc\u3057\u3088\u3046\u3068\u3057\u305f\u306e\u3067\u3059\u304c\u305d\u308c\u3067\u3082\u3042\u307e\u308a\u7dba\u9e97\u306b\u30d7\u30ed\u30b0\u30e9\u30de\u30c1\u30c3\u30af\u306b\u6c7a\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u304b\u3063\u305f\u3002<\/p>\n<p>\u3057\u304b\u305f\u306a\u3044\u306e\u3067\u30a6\u30b6\u30a6\u30b6\u306e\u529b\u6280\u30b3\u30fc\u30c9\u5bfe\u5fdc\u3068\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3061\u306a\u307f\u306b JavaFX 9 \u3067\u306e FontMetrics \u53d6\u5f97\u306f JavaFX 8 \u3068\u540c\u3058\u3088\u3046\u306b\u51fa\u6765\u306a\u304f\u306a\u3063\u3066\u3057\u307e\u3063\u3066\u3044\u308b\u306e\u3067\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p><strong>\u53c2\u8003<\/strong><\/p>\n<ul>\n<li><a href=\"http:\/\/yucchi.jp\/blog\/?p=2454\">JavaFX 9 \u3067 FontMetrics \u3092\u53d6\u5f97\u3059\u308b<\/a><\/li>\n<\/ul>\n<p>\u3053\u306e\u3088\u3046\u306b\u624b\u629c\u304d\u3060\u3051\u3069\u3061\u3087\u3063\u3068\u904a\u3093\u3067\u307f\u3088\u3046\u304b\u306a\u3063\u3066\u3044\u3046\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30d7\u30ed\u30b0\u30e9\u30e0\u304c JavaFX \u3060\u3068\u7c21\u5358\u306b\u3067\u304d\u3066\u3057\u307e\u3057\u307e\u3059\u3002<\/p>\n<p>\u53d6\u5f97\u89e3\u6790\u3059\u308b\u3082\u306e\u3092\u4e8c\u3064\u306b\u3057\u3066\u91cd\u306d\u5408\u308f\u305b\u3066\u8868\u793a\u3057\u3066\u76f8\u6027\u8a3a\u65ad\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u3057\u3066\u3082\u697d\u3057\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002<\/p>\n<p>Java \u306b\u306f JavaFX \u304c\u6a19\u6e96\u3067\u3064\u3044\u3066\u3044\u308b\u306e\u3067 Java \u30d7\u30ed\u30b0\u30e9\u30de\u30fc\u3001Java \u306b\u8208\u5473\u306e\u3042\u308b\u304b\u305f\u306f\u304a\u6c17\u697d\u306b\u697d\u3057\u3093\u3067\u307f\u3066\u306f\u3044\u304b\u304c\u3067\u3057\u3087\u3046\u304b\u3002<\/p>\n<p>\u3082\u3061\u308d\u3093\u3001JavaFX \u3082 Java \u306a\u306e\u3067\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3059\u3002<\/p>\n<p><b><font color=\"#ff0000\" size=\"5\">Write once, run anywhere<\/font><\/b><\/p>\n<p>Windows \u3067\u3082 Linux \u3067\u3082\u4e00\u5ea6\u66f8\u3051\u3070\u3069\u3061\u3089\u3067\u3082\u52d5\u3044\u3061\u3083\u3044\u307e\u3059\u3002<\/p>\n<p><font color=\"#f6f6f6\" size=\"4\"><strong>Write once\uff0ctest anywhere \u3068\u306f\u8a00\u308f\u306a\u3044\u3067 (&gt;_&lt;\uff61)<\/strong><\/font><\/p>\n<p><iframe loading=\"lazy\" height=\"480\" src=\"https:\/\/www.youtube.com\/embed\/KCMP6NIZnVE?rel=0&amp;showinfo=0\" frameborder=\"0\" width=\"853\" allowfullscreen allow=\"encrypted-media\" gesture=\"media\"><\/iframe><\/p>\n<p>&nbsp;<\/p>\n<div id=\"scid:0767317B-992E-4b12-91E0-4F059A8CECA8:64e25c19-d46a-4ffa-b2f5-a3dc155c642e\" class=\"wlWriterEditableSmartContent\" style=\"float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px\">Hatena \u30bf\u30b0: <a href=\"http:\/\/b.hatena.ne.jp\/t\/Java\" rel=\"tag\">Java<\/a>,<a href=\"http:\/\/b.hatena.ne.jp\/t\/JavaFX\" rel=\"tag\">JavaFX<\/a>,<a href=\"http:\/\/b.hatena.ne.jp\/t\/Computer\" rel=\"tag\">Computer<\/a><\/div>\n<div class='wp_social_bookmarking_light'>\n            <div class=\"wsbl_hatena\"><a href='\/\/b.hatena.ne.jp\/add?mode=confirm&url=http%3A%2F%2Fyucchi.jp%2Fblog%2F%3Fp%3D2521&title=Happy%20New%20Year%202018%21' title='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='http:\/\/yucchi.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/hatena.gif' alt='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' title='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' width='16' height='12' class='wp_social_bookmarking_light_img' \/><\/a><\/div>\n            <div class=\"wsbl_facebook\"><a href='http:\/\/www.facebook.com\/share.php?u=http%3A%2F%2Fyucchi.jp%2Fblog%2F%3Fp%3D2521&t=Happy%20New%20Year%202018%21' title='Facebook \u306b\u30b7\u30a7\u30a2' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='http:\/\/yucchi.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/facebook.png' alt='Facebook \u306b\u30b7\u30a7\u30a2' title='Facebook \u306b\u30b7\u30a7\u30a2' width='16' height='16' class='wp_social_bookmarking_light_img' \/><\/a><\/div>\n            <div class=\"wsbl_google_plus_one\"><g:plusone size=\"medium\" annotation=\"none\" href=\"http:\/\/yucchi.jp\/blog\/?p=2521\" ><\/g:plusone><\/div>\n            <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"http:\/\/yucchi.jp\/blog\/?p=2521\" data-text=\"Happy New Year 2018!\" data-lang=\"ja\">Tweet<\/a><\/div>\n    <\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n","protected":false},"excerpt":{"rendered":"<p>Happy New Year! May this be a happy and fruitful year. \u65b0\u5e74\u6700\u521d\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u306f JavaFX \u3067 IBM Cloud (Bluemix) \u306e Watson Personality Insights \u3092\u5229\u7528\u3057\u305f\u4eba\u683c\u8a3a\u65ad\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3059\u3002 \u6628\u5e74\u306e 11 \u6708 1 \u65e5\u304b\u3089 IBM Cloud (Bluemix)\u30e9\u30a4\u30c8\u30fb\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6c17\u697d\u306b\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u5c11\u3057\u904a\u3093\u3067\u307f\u307e\u3057\u305f\u3002 \u3082\u3046\u3001\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u3066\u304b\u3089\u968f\u5206\u7d4c\u3061\u307e\u3059\u306e\u3067\u53c2\u8003\u3068\u306a\u308b\u8cc7\u6599\u304c\u30cd\u30c3\u30c8\u4e0a\u306b\u3042\u308b\u306e\u3067\u30b0\u30b0\u308c\u3070\u306a\u3093\u3068\u304b\u305d\u308c\u306a\u308a\u306e\u3082\u306e\u306f\u52d5\u304b\u305b\u308b\u3088\u3046\u3067\u3059\u3002 \u3068\u8a00\u3046\u3053\u3068\u3067\u5b9a\u756a\u306e Twitter \u306e\u3064\u3076\u3084\u304d\u3092\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,3,12],"tags":[24,17,21],"class_list":["post-2521","post","type-post","status-publish","format-standard","hentry","category-computer","category-java","category-javafx","tag-computer","tag-java","tag-javafx"],"_links":{"self":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2521"}],"version-history":[{"count":1,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2521\/revisions"}],"predecessor-version":[{"id":2522,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2521\/revisions\/2522"}],"wp:attachment":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2521"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}