JavaFX

JDK8u40 で追加された Formatted Text も試してみた。

JavaFX

JDK8u40 で追加された Spinner と Dialog を試してみた。

JDK8u40 で追加された Spinner と Dialog を試してみた。 とりあえず回避方法をみつけた。

このエントリーは上記の続きです。

と言っても大したことはやっていません。

ただ、新しく追加されたこれらの情報が見つからないので適当にグリグリした記録です。(^_^;)

今回は、Formatted Text を Spinner に適用してみました。

前回までは Spinner に表示されるテキストは左よりになっていて違和感のかたまりがありました。

これを右よりにします。

そして、Spinner に入力される値によりテキストのスタイルも変更してみます。

私はどうしたらいいのか解らなかったのでリファクタリングを使い、Spinner クラスの TextField を下記のように設定していました。

これでも動いたのですが spinner.getEditor() で TextField にアクセスできることが後で発覚しました。((((;゜Д゜)))))))

public final TextField getEditor()

Gets the value of the property editor.
Property description:The editor used by the Spinner control.

API ドキュメントはちゃんと見なければいけませんね。(^_^;)

これで Font 関係は設定できます。

次に Formatted Text を使ってみます。

これも全然情報が見当たらない。

○racle さん、早く新しいチュートリアルをだしてください!

今回は日本円の書式設定を試しました。

CurrencyStringConverter を使えばいいようです。

他にも IntegerStringConverter や ShortStringConverter やら Converter がたくさんあります。

今イチ使い方が良く解らないので適当に手探りでやってみました。

本当は、TextFormatter<Number>とspinner.valueProperty()のバインドさせたかったのですが何やら例外吐くので無理にバインドしないことにしました。(ヲヒ

とりあえず下記コードで目的は果たしました。

コードは部分的なものですが残りは今までとほぼ変わりはないので省略します。

全て見たい方は冒頭の関連エントリーのリンクを辿ってくだしませ。

プログラムを起動します。

右寄りでフォントスタイルも設定通りになってます。

Formatted Text もちゃんと機能しています。

日本円のシンボルマークの \ も表示され、三桁ごとに , も表示されています。

1

 

Spinner の下向きの矢印ボタンを押して値を減らします。

30,000円以下になると Spinner の文字が赤色になり、イタリックで太文字に変更されます。

円のシンボルマークはイタリック、太字にはならない仕様のようですね。

Dialog も出すようにしているのは今まで通りです。

2

 

最小値( 0 )はこのように表示されます。

3

 

上向きの矢印ボタンを押して Spinner の値を増やしていきます。

70,000円以上になると Spinner の文字が青色になり、イタリックで太文字に変更されます。

Dialog も出すようにしているのは今まで通りです。

4

 

最大値までしか増えません。

5

 

今回は Spinner の設定を編集可能としているので 500 を入力してみました。

ちゃんとテキストフォーマットが効いてます。

6

 

上向きの矢印ボタンを押して値を増加させてみます。

編集した値に追加設定値が足されていくようです。

7

 

実に良く出来ています。

しかし、ちょっと挙動がおかしなところがあります。

例えば、9999999999 と入力したら最大値を表示する場合と

Exception in thread “JavaFX Application Thread” java.lang.NumberFormatException: For input string: “9999999999”

という例外を吐く場合があります。

実際に数字以外を入力させても上記例外が発生します。

ここらへんの対応のセオリーとかそのうち出てくるだろうから今は気にしないでおこう。(ヲヒ

JavaFX 面白いからもっともっと情報があるといいのにね!

Hatena タグ:
このエントリーをはてなブックマークに追加
Share on Facebook

JDK8u40 で追加された Spinner と Dialog を試してみた。 とりあえず回避方法をみつけた。

JavaFX

JDK8u40 で追加された Spinner と Dialog を試してみた。

このエントリーで Arrow button をマウスクリックして操作した場合、呼び出す Dialog を Modality.APPLICATION_MODAL または Modality.WINDOW_MODAL に設定すると

Spinner のインクリメントもしくはデクリメントが止まらないという不思議な現象に悩まされました。

キーボードのカーソルキーでの操作では期待通りに正常に動きます。

なんでマウスで Arrow button をクリックして操作するといけないのか?

MousePressed がブロックされずに押しっぱなし状態で SpinnerBehavior クラスの startSpinning(boolean increment) の Timeline が動いちゃってるようです。

そこで、愚かなアイディアですが MouseReleased が発生してから Dialog を呼び出しちゃえってやってみたら期待通りに動いてくれました。

ごめんなさい。こんな方法しか思いつきませんでした。

と言うことでお終いです。

これってやっぱりバグなんだろうか?

追記:Jose Pereda さんよりコメントをいただきました。

それによると SpinnerSkin class に問題があるようです。

詳しくは Jose さんのコメントをご覧ください。

あわせてこの問題に対する素晴らしい解決方法を提示してくれましたのでエントリー本文にも記載させていただきます。

素晴らしいコードをありがとうございました。

Hatena タグ:
このエントリーをはてなブックマークに追加
Share on Facebook

JDK8u40 で追加された Spinner と Dialog を試してみた。

JavaFX

JDK8u40 でやっと Dialog が追加されました。

これでお手軽に使えることになります。

あと Spinner も、そして Formatted Text も追加されました。

今回は Spinner と Dialog をサクッと使ってみたいと思います。

毎月のお小遣いの金額を Spinner で入力してある金額より低いもしくは高い場合に Dialog を出すという超シンプルなものです。

しかし、私はこれでドツボにはまり、未だに改善策を見いだせずに困っています。

心優しい優秀な Java プログラマのかたがこの記事を見ていたらどうか解決方法をお教えくださいませ。

Dialog の設定を Modality.APPLICATION_MODAL と Modality.WINDOW_MODAL にすると思わぬ事態が発生します。

それではプログラムのソースコード及び動画を貼っておきます。

Spinner の CSS のあてかたも解らないので入力値を右寄せにしたり色を変えたりとかもしたかったのですがそれはネット上に情報が出てきてからボチボチ勉強していきたいですね。

追記:キーボードからカーソルキー入力では問題ないのでバグの可能性が高いです。

Hatena タグ:
このエントリーをはてなブックマークに追加
Share on Facebook

JavaFX の SplitPane を試してみた。

JavaFX

JavaFX の SplitPane の存在は知っていたが使う機会が無かったので使い方を知らないまま今日に至っています。

とりあえず簡単な使い方だけでも知っておこうとググってみたのですが日本語での情報を見つけることができませんでした。(>_<。)

しかたないので API ドキュメントをサラッと 読んで 眺めてみることにしました。

Class SplitPane

http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/SplitPane.html#getDividerPositions–

縦、横の指定や分割位置などが設定できるようでメソッド数も少なくシンプルなものです。

ただ、私の英語力及び Java 力では理解できないものがあり目から汗が出ています。

Example に sp.setDividerPositions(0.3f, 0.6f, 0.9f); とあるんだけど

最後の引数の 0.9f は無くてもいいんじゃないの?

最後のスペースは自動計算されるはずでは?

なぜなんだろう?

何か意味があるはずなんだろうけど・・・

と言うことでサクッとプログラムを組んで動作確認してみました。

上記のように ? の状態なのでこれであっているか自信はありません。

ラベルをみっつ均等に表示させ、左のラベルは全体の33パーセントより小さくさせない、右のラベルは全体の33パーセントより大きくさせないという制限も付加してみました。

このプログラムの実行結果は下図のようになります。

初期状態

1

左の Divider を右へドラッグして左のラベルを大ききします。

2

左の Divider を左へドラッグして左のラベルを小さくしようとしますが制限がかかっていて小さくなりません。

3

右の Divider を右へドラッグして中央のラベルを大きくします。

4

右の Divider 左へドラッグして右のラベルを大きくしようとしますが制限がかかっておおきくなりません。

5

これって以外と便利に使えるかもしれないですね。

なんで日本語の情報がないんだろう?

シンプルすぎてスルーされているんだろうか?

最後に、ラベルのテキストは私個人の好みであり所属する会社の公式な好みではありません。(ヲヒ

Hatena タグ:

このエントリーをはてなブックマークに追加
Share on Facebook

TextField を 0 から 9 までの数値しか入力できないようにしてみた

JavaFX

このプログラムは TextField に入力制限をかけたいなぁって思ってどうすればいいんだろう?ってネットサーフィンしていたときに見つけたものです。

Java 8u40 では Formatted Text が追加されるらしいのですが、お試し版を使ったサンプルコードの紹介がまだ見当たらない現状なのでφ(..)メモメモ

ちなみに Alert Dialogs はみんな待っているのでサンプルコードはもう出ていますね。

あと、Spinner も追加されるようです。

JavaFX はまだまだ足りないものがあるとあちこちで言われていますが着実に進化しているようです。

それでは忘備録として下記コードを書き留めておきます。

このプログラムは TextField の lengthProperty にリスナーを登録して入力した値を判定して処理してます。

これだと何かしらのイベント発生時に TextField の入力値を取得して正規表現で判定して問題あればアラートダイアログ出して入力し直してもらうという方法より場合によってはいいかもしれません。

小ネタですがもう暫くは活躍してもらえそうです。(^_^)

Hatena タグ:
このエントリーをはてなブックマークに追加
Share on Facebook

« 古い記事