JavaFX

Jigsaw のお勉強 その4 JavaFX (Spinner がほんの少しだけ良くなった)

Java JavaFX

このエントリーは じゃばえふえっくす Advent Calendar 2018 の初日(12月4日)です。

未だにJigsawのお勉強をしています。(^_^;)

今回はJavaFXを使ってみます。

そんなJavaFXですが正式リリース前からさらにリリースされてからもいろいろありました。

現在はJavaにバンドルされていません。

正確にはいろいろなところからJDKが提供されているのでひょっとしたらJavaFXをバンドルしたJavaがあるのかもしれません。

今回はOpenJDKとOpenJFXを使います。

JavaFX 11でjavafx.scene.control.Spinner<T>クラスにほんの少し優しい変更が追加されたのでそれを試してみました。

矢印ボタンをマウスにて押し続けたときの入力時間がJavaFX 8の750ms固定だったのが自由に変更できるようになりました。

InitialDelayとRepeatDelayが設定可能となります。

デフォルトの設定時間はそれぞれ300ms、60ms となっています。

まず、Spinnerについて少しだけ復習しておきましょう。

SpinnerのAPIドキュメントに下記のように書かれています。

順序付けられたシーケンスからユーザーが数値またはオブジェクト値を選択できるようにする単一行のテキスト・フィールド。

通常、スピナーはシーケンスの要素間を移動するための小さな矢印ボタンのペアを提供します。

キーボードの上/下矢印キーでも要素間を自由に移動できます。

ユーザーがスピナーに直接(有効な)値を入力することもできます。

コンボ・ボックスも同様の機能を提供しますが、スピナーの方が好まれる場合があるのは、重要なデータを不明瞭化する可能性があるドロップ・ダウン・リストが不要であり、また、他の多くのJavaFX UIコントロールのようにObservableListデータ・モデルを使用せずに、wrappingなどの機能や、より単純な’無限’データ・モデルの仕様(SpinnerValueFactory)を使用できるためです。

Spinnerのシーケンス値はSpinnerValueFactoryで定義します。

value factoryはコンストラクタ引数として指定し、value factory propertyを使用して変更できます。

JavaFXには、次に示す一般的なタイプのSpinnerValueFactoryクラスが用意されています。

•SpinnerValueFactory.IntegerSpinnerValueFactory

•SpinnerValueFactory.DoubleSpinnerValueFactory

•SpinnerValueFactory.ListSpinnerValueFactory

Spinnerには、Spinnerの現在のvalueの表示および変更を行う、editorと呼ばれるTextField子コンポーネントがあります。

Spinnerはデフォルトで編集不可能ですが、editable propertyをtrueに設定すると、入力を受け入れることができます。

Spinnerエディタは、値ファクトリのvalue propertyに対する変更をリスニングすることにより、値ファクトリとの同期を保ちます。 ユーザーがeditorに表示された値を変更した場合、Spinnerのvalueとeditorの値が異なってしまう可能性があります。

モデルの値をeditorの値と同じにするには、ユーザーが[Enter]キーを使用して編集をコミットする必要があります。

APIドキュメントによると一般的なタイプのSpinnerValueFactoryクラスと使ってSpinnerインスタンスを作成できると書かれていました。

Spinner​(double min, double max, double initialValue) // SpinnerValueFactory.DoubleSpinnerValueFactory

Spinner​(double min, double max, double initialValue, double amountToStepBy) // SpinnerValueFactory.DoubleSpinnerValueFactory

Spinner​(int min, int max, int initialValue) // SpinnerValueFactory.IntegerSpinnerValueFactory

Spinner​(int min, int max, int initialValue, int amountToStepBy) // SpinnerValueFactory.IntegerSpinnerValueFactory

Spinner​(ObservableList<T> items) // SpinnerValueFactory.ListSpinnerValueFactory

Spinner​(SpinnerValueFactory<T> valueFactory) // 指定されたvalue factoryを設定する場合

Spinnerインスタンスを作成するのは容易にできることが確認できたので次はSpinnerの定数フィールド値を使ってスタイルの設定方法を調べてみます。

public static final String STYLE_CLASS_ARROWS_ON_LEFT_HORIZONTAL

水平方向(左向きと右向き)の矢印がSpinnerの左側に配置されます。

public static final String STYLE_CLASS_ARROWS_ON_LEFT_VERTICAL

垂直方向(上向きと下向き)の矢印がSpinnerの左側に配置されます。

public static final String STYLE_CLASS_ARROWS_ON_RIGHT_HORIZONTAL

水平方向(左向きと右向き)の矢印がSpinnerの右側に配置されます。

public static final String STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL

Spinnerの左側に減分矢印、右側に増分矢印が配置されます。

public static final String STYLE_CLASS_SPLIT_ARROWS_VERTICAL

スピナーの幅全体にわたって上下に伸びた矢印が配置されます。

何も指定をしない場合はデフォルトの垂直方向(上向きと下向き)の矢印がSpinnerの右側に配置されます。

Spinnerインスタンスの作成、スタイルの設定方法が解ったので試してみます。

Spinnerのデザインをデフォルトの垂直方向(上向きと下向き)の矢印がSpinnerの右側に配置

1

Spinnerのデザインを水平方向(左向きと右向き)の矢印がSpinnerの左側に配置
spinner.getStyleClass().add(Spinner.STYLE_CLASS_ARROWS_ON_LEFT_HORIZONTAL);

2

Spinner のデザインを垂直方向(上向きと下向き)の矢印がSpinnerの左側に配置
spinner.getStyleClass().add(Spinner.STYLE_CLASS_ARROWS_ON_LEFT_VERTICAL);

3

Spinnerのデザインを水平方向(左向きと右向き)の矢印がSpinnerの右側に配置
spinner.getStyleClass().add(Spinner.STYLE_CLASS_ARROWS_ON_RIGHT_HORIZONTAL);

4

Spinnerのデザインを左側に減分矢印、右側に増分矢印が配置
spinner.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL);

5

Spinnerのデザインをスピナーの幅全体にわたって上下に伸びた矢印が配置
spinner.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_VERTICAL);

6

// 最小値 0、最大値 100、初期値 50、増分または減分するステップの量のSpinnerインスタンス作成
Spinner<Integer> spinner = new Spinner<>(0, 100, 50, 10);

javafx.​scene.​Nodeパッケージのpublic final ObservableList<String> getStyleClass()でノードを論理的にグループ化するために使用できる文字列識別子のリストを取得しava.​util.​Listパッケージのpublic abstract boolean add(E arg0)メソッドでSpinnerの定数フィールド値を追加して設定します。

Spinnerの増分、減分の矢印ボタンの配置デザインの設定はこれで可能となりました。

次に Spinnerに表示されている値のアライメントとカスタムフォントを設定してみます。

//  カスタムフォント、アライメントを設定
Font f = Font.loadFont(this.getClass().getResourceAsStream(“resources/AKUBIN1.34.ttf”), 28);
spinner.getEditor().setStyle(“-fx-text-fill: black; -fx-font: 18px ‘Akubin’; -fx-alignment: CENTER_RIGHT;”);

SpinnerExample

上の行でカスタムフォントを読み込んでその下の行でSpinnerにそのフォントを設定、テキストのサイズ、文字色、アライメントを設定しています。

そしてついでに

// Spinneのエディタをユーザー入力可能とする
spinner.setEditable(true);

としてユーザー入力可能としてます。

増分、減分のステップ量は変わらずユーザーによって入力された値からの増分値、減分値となります。

また、最大値、最小値を超えることはありません。

ここまでのプログラムのソースコードは次のようになります。

それではSpinnerにInitialDelayとRepeatDelayを設定するプログラムを組んでみます。

せっかくだからJDK 12 Early-Access Builds (build: 21)とJavaFX Early-Access Builds (openjfx-12-ea+2)を使ってみます。

さらに、モジュラjarを作ってモジュール化します。

そして、jlinkで配布用にカスタムJREをバンドルしたアプリケーションを作成します。

NetBeans IDE 10.0-vc4を使ってお気楽に組もうとしたがこのバージョンには未対応なので古典的なツールを使いました。

ちなみにNetBeans IDE 10.0 Devでプロジェクトをビルドし、jlinkでカスタムJRE組み込みアプリケーションの作成はできました。

ただ、エラーバッジの嵐のエディタは心が痛みます。

それではお気に入りのエディタか心を痛めながらNetBeans IDE 10.0-vc4を使って下記ファイルを作成します。

 

 

 

 

プロジェクトの構成は下図のようにします。

11

カスタムフォントを使うのでお気に入りのフォントをご用意ください。

コンパイル時にはJDK 12の新機能を使えるように–release 12 –enable-preview VMオプションをつけます。

Java SE 11からJavaFXはバンドルされなくなったのでそれらライブラリをダウンロードしてコンパイル、実行時にモジュールパスを指定します。

JavaFXはこちらから入手できます。

https://gluonhq.com/products/javafx/

JavaFX Linux SDKとJavaFX Linux jmodsがあります。

JavaFX Linux SDKだけでいいのですがjlinkで配布用にカスタムJREをバンドルしたアプリケーションを作成する場合はJavaFX Linux jmodsが必要となります。

-d オプションでbin/IncludeeJavaFXディレクトリにコンパイルによって作成されるクラスファイルが格納されるようにしています。

–module-pathオプションでJavaFX SDKのパスを指定します。

–add-modulesオプションでアプリケーションで必要とされるモジュールを指定します。

12

FXMLDocument.fxmlはコンパイルを実行しても出力ディレクトリbin/IncludeeJavaFXには移動、コピーされないので存在しません。

FXMLDocument.fxmlをコンパイルして作成されたクラスファイルのある場所にコピーします。

13

フォントを格納しているresourcesディレクトリもコピーします。

14

プロジェクトの構成は下図のようになります。

15

それでは実行してみましょう。

–enable-preview VMオプションを忘れずに。

–module-path、–add-modules、–moduleオプションも必要です。

16

ちゃんとコンパイルされて実行できました。

17

と、思いきや

18

何やら妙な警告がでました。(>_<。)

GTK libraries version 3を使うとだめそうなので-Djdk.gtk.verbose=true -Djdk.gtk.version=2とVM オプションをあたえます。

19

これってJavaFX 12のリリースまでには修正されるのかな?

20

それではこのプログラムをモジュラjar化してみます。

modsディレクトリを作成してそこにモジュラjarを格納します。

–module-versionでこのモジュールのバージョンを設定します。

実行時メインクラスの指定をしなくていいように–main-classオプションを使ってメインクラスを指定してアプリケーションエントリポイントを設定します。

21

モジュラjarがちゃんとできたか確認します。

22

問題無さそうなのでプログラムを走らせてみます。

–module-pathにはこのアプリケーションを格納しているmodsディレクトリとJavaFX SDKのパスを指定します。

–moduleオプションはメインクラスの指定を省力できるようにしたのでモジュール名だけで実行できます。

モジュラjar作成時にメインクラスの指定をしなかった場合は–module モジュール名/モジュールのメインクラス名とアプリケーションエントリポイント指定しなければいけません。

今回の場合だと、–module IncludedJavaFX/jp.yucchi.includedjavafx.IncludedJavaFXとします。

23

アプリケーションのモジュール化に成功し、ちゃんと動くことが確認できました。

24

最後にjlinkで配布用にカスタムJREをバンドルしたアプリケーションを作成します。

includedjavafx-imageディレクトリを作成しそこに成果物を格納します。

–module-pathオプションでJDKとJavaFXのモジュールを指定します。JavaFX Linux SDKのパスじゃなくてJavaFX Linux jmodsのパスを指定することに注意してください。

–add-modulesオプションでこのアプリケーション自体を指定します。

–launcherオプションを次のように設定します。

–launcher <コマンド名>=<モジュール名><メインクラス>

–outputオプションで出力先を設定します。

25

jlinkによって作成されたランチャーファイルにVMオプションを記述します。

26

27

これを忘れると少し焦ります。(^_^;)

28

動きましたね。

JavaがインストールされてないPCでも動くことを確認しました。(Linux)

ただしWindowsでは動きません。

Windowsで動く配布用アプリはWindowsで作成しなくてはいけないようです。

Write once, run anywhere ってのは遠い過去の夢になってしまったのでしょうか・・・

Spinner

肝心のことを忘れていました。

上のGifアニメで増分、減分ボタンを押しっぱなしにしている時のSpinnerの更新時間に注目してください。

// タイマーの時間を設定
versionSpinner.setInitialDelay(Duration.millis(INTIAL_DELAY_TIME));
versionSpinner.setRepeatDelay(Duration.millis(REPEAT_DELAY_TIME));

setInitialDelay​(Duration value) メソッドで押し続けて最初に更新される時間を設定しています。

このプログラムでは解りやすくするために1500ミリ秒に設定しました。

そのまま押し続けた時の更新時間(リピート時間)は

setRepeatDelay​(Duration value) メソッドで 500ミリ秒と設定しました。

Java SE 8 u40 では750ミリ秒に固定されていて変更することができなかったので少しうれしいアップデートです。

Swingも悪くはないけど近い将来にはJavaの標準 GUI はJavaFXになってほしい。

 

Jigsawにもほんの少しだけ慣れてきたけど難しいですね。

モジュールの依存関係を調べるのがお手軽にできるツールがあればいいのだけど・・・

jdepsは万能ではないので落とし穴に落ちます。(>_<。)

今回のプログラムではFXMLを利用しています。

JavaFXでGUIの構築にはとても便利です。

で、それを使うためにmodule-info.javaにrequires javafx.fxml;とrequiresモジュールディレクティブ設定します。

ところがそれだけではjava.lang.reflect.InvocationTargetExceptionが投げられます。

FXMLを利用したJavaFXアプリケーションではjavafx.fxmlモジュール側からこのプログラムのFXMLのコントローラークラスに対してリフレクションによるアクセスがあります。

モジュールのカプセル化はリフレクションにも適用されるからです。

JDK 9より前はリフレクションを使えばパッケージ内の全てのクラスやクラスの全てのメンバーにアクセスできました。

つまりリフレクションは開発者の本意と関係なくカプセル化を破壊することが可能です。

Jigsawでは強力で繊細なカプセル化が提供されています。

デフォルトでは外部モジュールからモジュール内のクラスにアクセスすることはできません。

外部モジュールからアクセスできるのはexportsされたパッケージの公開クラス、公開メンバだけなのです。

非公開なメンバへのアクセスは外部モジュールから禁止されています。

こういった所でもモジュール化のメリットである依存性、公開範囲の制限が絡んでくるんですね。

なのでこのリフレクションによるjavafx.fxmlモジュール側からのアクセスを許可する必要があります。

それにはopens…toモジュール・ディレクティブを設定します。

module-info.javaにopens jp.yucchi.includedjavafx to javafx.fxml;とopensモジュールディレクティブを付け加えるだけです。

module-info.javaにこのモジュールディレクティブを加えることによって実行時にのみ特定のモジュールに対してパッケージへのアクセスを許可することが可能です。

つまり、特定のパッケージ内のpublic型(およびネストされているpublic型とprotected型)に対して実行時にのみアクセスできることを指定可能となります。

指定したパッケージのすべての型(およびその型のすべてのメンバ)にリフレクションを使ってアクセスすることもできます。

Jigsawの強力で繊細なカプセル化はJDK 9より前のものより開発者には喜ばれるはずですね。

そうなるとjdepsのような依存性を解決する強力なツールの必要性が求められます。

そのうち統合開発環境なんかに乗っかってくることを期待します。

 

Jigsaw のお勉強 その1

Jigsaw のお勉強 その2

Jigsaw のお勉強 その3

Hatena タグ: ,


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Happy New Year 2018!

Computer Java JavaFX

Happy New Year! May this be a happy and fruitful year.

新年最初のエントリーは JavaFX で IBM Cloud (Bluemix)Watson Personality Insights を利用した人格診断プログラムです。

昨年の 11 月 1 日から IBM Cloud (Bluemix)ライト・アカウントが気楽に使えるようになったので少し遊んでみました。

もう、リリースされてから随分経ちますので参考となる資料がネット上にあるのでググればなんとかそれなりのものは動かせるようです。

と言うことで定番の Twitter のつぶやきを解析して人格診断をおこなうプログラムを組んでみました。

本家サイトではこんなデモがおかれています。

1

自分のアカウントで試そうとしたけどエラーで駄目だったのでサンプルの方ので分析してみました。

2

結果が上のスクリーンショットのようになります。

Watson Personality Insights で得られる結果は下段の 「ビッグファイブ – 個性」、「欲求」、「価値」のデータです。

分析データのスコアに関する説明は以下のようされています。

スコアはすべて百分位数であり、膨大な集団の中での位置を表しています。

たとえば、外向性が90%という結果は、その人が90%外向的であることではなく、100人中その人より外向性の低い人が90人(高い人が10人)ということを意味しています。

データは JSON 形式で返されてきます。

これらの分析データの信頼性はどれ位のものかは想像もつかないのですがなかなか面白そうです。

これらの技術を利用した面白いデモも用意されています。

Science and Star Wars の「自分のライトセーバーの色を見つけよう」です。

3

ヨーダと言えば STAR WARS では生ける伝説と称されるジェダイ・マスターで絶対的存在となっています。

うれしいですね! (^_^)

これはもっと詳しく人格診断してみたくなります。

JavaFX で Watson Personality Insights を利用した人格診断プログラムを作るに当たり、分析データをレーダーチャートを使って表示させることにしました。

ところが JavaFX 標準で用意されているチャートにレーダーチャートは見当たりません。((((;゜Д゜)))))))

しかたないので JFreeChart-FX に期待して見に行ったらレーダーチャートは無かった。(見落としていたらごめんなさい)

これで一気に面倒くささハードルが上がった。

とりあえずレーダーチャートは Canvas にお絵かき対応することにしました。

できあがったプログラムを動かして人格診断を行った結果がこちらです。

4

あれれ? なんか・・・ 酷くないですか?

ヨーダと 71 パーセントも性格が一致しているわりには・・・

まぁ、人工知能が人の発言(ツイート)を分析して人格診断するとこんなもんですねと悔しいから言っておきます。(ヲヒ

せっかく年末の忙しい時期にゴニョゴニョしてプログラム組んだのにこれではあんまりだから現在の日本の内閣総理大臣である安倍晋三氏の人格診断をしてみた。

5

おおっ! ビッグファイブ – 個性 のスコアが凄い!

やはり職業柄か誠実性、外向性のポイント高いですね。

個々のスコアもそうかも知れないと思わせる結果です。(個人の感想です。)

断っておきますが私は政治にあまり詳しくなくこの結果を利用して政治批判や誹謗中傷を行うことを目的としていません。

テレビ等で見聞きする情報をもとにした感想です。

それではもう一人診断してみましょう。

私の好きな歌手の宇多田ヒカルさんです。

6

ビッグファイブ – 個性の知的好奇心、協調性、外向性のポイントが高いですね。

やはり生まれついての芸術家なのでしょう。

さて、この結果から私には個性が足りないことがバレてしまいました。

2018 年は個性をもう少しなんとかする年にしなければ。。。(^_^;

そう言うことでこのプログラムのコードを載せておきます。

ただし、かなり酷いことを平気でしています。

パスワード等はプログラムにハードコーディングしていますのでそこは適宜書き換えてくださいませ。

あと、例外処理もほとんど対処していません。

IBM Cloud (Bluemix)ライト・アカウントでお気楽に Watson Personality Insights を試してみたかったからです。

JavaFX はそれなりに手抜きプログラムにも対応してくれます。(ヲヒ 本当は駄目ですよ(^_^;

見ての通り GUI は AnchorPane に直接部品を貼り付けリサイズ出来なくするということをしています。(HBox,VBox 使いましょう(^_^;

テキストフィールドに入力された Twitter ID のツイートを約 1000 件取得してそれを Watson Personality Insights で分析してその結果をレーダーチャートに表示させています。

Twitter のツイートを取得するためには Twitter API を利用しなくてはならないので Twitter Developer アプリケーション登録が必要となります。

IBM Cloud (Bluemix)Watson Personality Insights を利用するには IBM Cloud (Bluemix)ライト・アカウントの登録が必要となります。

既に登録されている、もしくは有料プランをご利用の方は必要ありません。

参考

ツイート取得、分析データ取得の処理は時間がかかるので非同期処理で対応しています。

JavaFX に非同期処理を簡単に扱うことを可能とする javafx.concurrent パッケージがあります。

参考

Twitter のツイートを取得処理は TweetCollection クラスでおこなっています。

取得したツイートの分析処理は PersonalityAnalysis クラスでおこなっています。

これら二つの処理を非同期処理してそれによって得られた分析データを Canvas にお絵かき対応したレーダーチャート上に表示させています。

ここで Canvas はベースとなるレーダーチャートと、分析データの表示用の二つを利用しています。

分析データをベースのレーダーチャートに重ねて表示させています。(フォトショップで使うレイヤーのように)

ここで Canvas に文字列を表示させるのに位置決めが難しく苦労しました。

X 座標の位置は日本語で等幅のものを使っているので一文字の幅データを元に計算することによって対応しました。

Y 座標はなかなか難しく結局これといった結論が得られずフォントのサイズをそのまま利用したり、日本語のセンターの位置をゴニョゴニョして取得しています。

これではあんまりなので FontMetrics を取得してちゃんと対応しようとしたのですがそれでもあまり綺麗にプログラマチックに決めることができなかった。

しかたないのでウザウザの力技コード対応としています。

ちなみに JavaFX 9 での FontMetrics 取得は JavaFX 8 と同じように出来なくなってしまっているので注意が必要です。

参考

このように手抜きだけどちょっと遊んでみようかなっていうデスクトッププログラムが JavaFX だと簡単にできてしまします。

取得解析するものを二つにして重ね合わせて表示して相性診断プログラムとしても楽しいかもしれません。

Java には JavaFX が標準でついているので Java プログラマー、Java に興味のあるかたはお気楽に楽しんでみてはいかがでしょうか。

もちろん、JavaFX も Java なのでクロスプラットフォームです。

Write once, run anywhere

Windows でも Linux でも一度書けばどちらでも動いちゃいます。

Write once,test anywhere とは言わないで (>_<。)

 

Hatena タグ: ,,

IBM BlueMix Watson の Personality Insights を使うために

Computer Java JavaFX

IBM BlueMix ライト・アカウント登録を行い、Watson の Personality Insights を使えるようにするφ(..)メモメモ

この IBM BlueMix ライト・アカウントは今年の11月1日から制限が緩くなりお気楽に試せるようになりました。

詳しくはこちらをご覧ください。 https://www.ibm.com/cloud-computing/jp/ja/bluemix/lite-account/

31

32

ライト・アカウントを今すぐ登録 ボタンをクリックします。

ライト・アカウント登録画面がひらきます。

33

必要事項を記入します。

アカウントの作成ボタンをクリックします。

34

登録を完了するために Eメールを確認します。

Eメールの指示通りに確認を完了させます。

35

ログインします。

38

Products, Watson,Watson API とたどってリンクをクリックして移動します。

39

View all services ボタンをクリックします。

40

次に Personality Insights の項の矢印ボタンをクリックします。

41

Already using Personality Insights? Log in のところからログインします。

ライト・フィルターが有効になっているようなのでライト・アカウントで使用できる Watson のサービスが表示されています。

43a

Personality Insights をクリックして選択します。

44a

作成ボタンをクリックします。

45a

ハンバーガーメニューからダッシュボードを選択してクリックします。

46a

47a

ダッシュボードに先ほど作成した Personality Insights サービスがあることを確認します。

48a

それを選択してクリックします。

49a

サービス資格情報をクリックします。

50a

先ほど作成した Personality Insights のサービス資格情報がここで確認できます。

51a

資格情報の表示をクリックして username, password を取得します。

52a

これで Personality Insights サービスを利用する準備は完了です。

おっと! SDK が必要ですね。(^_^;

管理画面の Developer resources の Getting started tutorial をくりっくします。

61a

遷移先画面の Overview for developers のリンク先の Using Software Development Kits から Watson SDKs のリンクをクリックします。

62a

私の場合 Java で開発をするので Java SDK を選択しクリックします。

63a

GitHub にて SDK を取得します。

64

ビルドとか面倒なことはしたくないので先程のページにある JAR ファイルのリンクからいただきます。

65

これで準備完了です!(^_^)

IBM のサイトはころころよく変わるのでこの通りではないかもしれませんが必要なリソースに辿り着ける道しるべになれば幸いです。

あと、Personality Insights の結果は JSON テキストで返されてくるのでお好みで Java で JSON を扱えるようにするライブラリを用意する。

私はこちらを利用しました。

http://json-b.net/download.html

とりあえず、自分用にφ(..)メモメモ… でした。

 

Hatena タグ: ,,

Twitter Developer アプリケーション登録

Computer Java JavaFX

Twitter Developer にてアプリケーション登録を行って

Consumer key
Consumer secret
Access token
Access token secret

を入手します。

サイトが昔とずいぶん変わってしまって迷子になってしまわないよにφ(..)メモメモ

まず、https://developer.twitter.com/ を開きます。

1

そして左上段の Docs にフォーカスして Documentation リンクをクリックして移動します。

2

左上にある Basics リンクをクリックしてでてくるコンテンツメニューの Authentication リンクをクリックして移動します。

3

4

移動したら Guides リンクをクリックします。

5

そして Access tokens from apps.twitter.com をクリックして Getting tokens from apps.twitter.com の項目の

apps.twitter.com をクリックして移動します。

7

過去にアプリケーションの登録を行っていなければ次のような画面が表示されます。

8

Sign in リンクよりログインします。

9

ログインが完了したら次のようなアプリケ-ション登録画面が表示されるので

Create New App ボタンをクリックします。

10

アプリケーション登録のために必要事項を記入します。

Developer Agreement の内容を良く確認して同意できるならチェックボックスにチェックを入れて Create your Twitter applecation ボタンをクリックします。

11

電話番号の登録をしていなければ次のようなエラー画面が表示されます。

12

無事にアプリケーションの登録が完了すれば次のような設定画面が表示されます。

13a

Permissions タブボタンをクリックします。

14a

Access の項目で必要な機能を選択します。

今回のアプリケーションは最新ツイートから過去ツイート1000個ほど取得するためのものなので Read only を選択しています。

あなたが Twitter クライアントを作るなら Read, Write and Access direct messages を選択するのがベターかもしれません。

選択したら Update Settings ボタンをクリックします。

16

Permissions の設定が完了したら Details タブボタンをクリックします。

17

Permissions の設定に間違いが無いか確認します。

18a

良ければ Keys and Access Tokens タブボタンをクリックします。

19a

この画面で Consumer key, Consumer secret が表示されています。

20a

Access Token を取得するために Create my access token ボタンをクリックします。

21a

ここで表示される画面で Twitter API を利用するために必要な

Consumer key
Consumer secret
Access token
Access token secret

が全て取得できます。

トップ画面からアプリケーション登録画面までたどり着きにくくなっているので

apps.twitter.com

にいきなり行くのが楽です。

Java を使ってアプリケーションを作るのに便利な Twitter4J はこちらからダウンロードします。

http://twitter4j.org/ja/index.html

以上、完全無欠の自分用φ(..)メモメモでした。

Hatena タグ: ,,

JavaFX 9 で FontMetrics を取得する

Java JavaFX NetBeans

このエントリーは、JavaFX Advent Calendar 2017 の 20 日目です。

現時点でもエントリーが無いので急遽先日遭遇した問題に解決策を教えていただいたのでそれを記事にしました。

昨日は @aoetk さんの「Bean ValidationのJavaFX対応」でした。

明日も、この記事を書いている現時点ではまだ空いてます。(^_^; きっと誰かが素敵な記事を投稿してくれると楽しみにしています。

11 月から IBM Cloud (Bluemix)ライト・アカウントが気楽に使えるようになり Watson Personality Insights を利用した人格診断プログラムを組んで楽しんでいました。

pi 

その際に Canvas に文字を描くときの位置決めに難儀したので FontMetrics を取得する方法をφ(..)メモメモ

まず、Java で FontMetrics を取得するとしたら java.awt.FontMetrics クラスを使うことができます。

Abstract Window Toolkit を使って下記のようなプログラムを組んでみました。