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

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

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

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

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

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

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

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

これを右よりにします。

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

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

            Field field = spinner.getClass().getDeclaredField("textField");
            field.setAccessible(true);         
            tf = (TextField) field.get(spinner);         
            tf.setStyle("-fx-text-fill: black; -fx-font: 14pt 'serif'; -fx-alignment: CENTER_RIGHT;");

これでも動いたのですが 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()のバインドさせたかったのですが何やら例外吐くので無理にバインドしないことにしました。(ヲヒ

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

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

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

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        
        spinner.setEditable(true);
        
	// 書式設定
        CurrencyStringConverter currencyStringConverter = new CurrencyStringConverter();
        TextFormatter formatter = new TextFormatter<>(currencyStringConverter);
        
//      // 動くけど例外吐くからダメ (>_<。)
//      formatter.valueProperty().bindBidirectional((Property)spinner.valueProperty());

	// スピナーに書式設定
        spinner.getEditor().setTextFormatter(formatter);
        
        // バインド例外吐くから・・・
        formatter.setValue(INITAL_VALUE);
        
        // アプリケーション起動時のスタイル
        spinner.getEditor().setStyle("-fx-text-fill: black; -fx-font: 14pt 'serif'; -fx-alignment: CENTER_RIGHT;");
        
        // Spinner のデザインを変更
        spinner.getStyleClass().add(Spinner.STYLE_CLASS_SPLIT_ARROWS_VERTICAL);

        spinner.valueProperty().addListener((ov, oldValue, newValue) -> {
            
            // バインド例外吐くから・・・
            formatter.setValue(newValue);

	  // RT-40257  https://javafx-jira.kenai.com/browse/RT-40257
            if (beh == null) {
                beh = (SpinnerBehavior) ((SpinnerSkin) (spinner.getSkin())).getBehavior();
                spinner.focusedProperty().addListener((obs, b, b1) -> {
                    if (b && !b1) {
                        beh.stopSpinning();
                    }
                });
            }

	    // スピナーのスタイルを変更する
            if (newValue <= 30_000) {
                spinner.getEditor().setStyle("-fx-text-fill: red; -fx-font: italic bold 14pt 'serif'; -fx-alignment: CENTER_RIGHT;");   
            }else{
                if (newValue >= 70_000) {
                spinner.getEditor().setStyle("-fx-text-fill: blue; -fx-font: italic bold 14pt 'serif'; -fx-alignment: CENTER_RIGHT;");              
            }else{
                  spinner.getEditor().setStyle("-fx-text-fill: black; -fx-font: 14pt 'serif'; -fx-alignment: CENTER_RIGHT;");  
                }                
            }            

            if (newValue <= 30_000 && poor.getValue()) {
                poor.setValue(Boolean.FALSE);
                showPoorDialog();
            }
            if (newValue >= 70_000 && rich.getValue()) {
                rich.setValue(Boolean.FALSE);
                showRichDialog();
            }

        });

    }

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

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

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 タグ:

SONY ICZ-R250TV 買っちゃいました。(^_^)

私の人生で初めてラジオを購入しました。

これまでラジオはもらい物ばかりでわざわざ購入するようなものでは無かった。

若い人は知らないと思うけどラジカセというのがあってラジオ単体の製品を購入する人はわたしの周りではいなかった。

私の叔父は株をやっていてよく短波放送を聞くのにラジオをいつも携帯していた。

ラジオ単体で購入するには金額的もしくは携帯性、使用目的を限定する場合だと思う。

そんなこんなで何故今時ラジオなの?

ラジオなんてインターネットでも放送しているコンテンツもあるし、ストリーミングでラジオだけでなくテレビ放送もしている時代なのに。

私が気まぐれで買ってしまった SONY ICZ-R250TV は予約録音ができる!

昔のラジオにそんな機能はありませんでした。

内蔵メモリーも 8GB もあり、さらに SD カードも使える。

私は 32GB の SD カードを追加しました。

これで録音可能時間を当分気にすることはないだろう。

予約機能も設定が豊富で、日時指定(1回のみ)、曜日設定、毎日の指定も可能です。

至れり尽くせりです。

予約件数は 20 件までとなっていますが十分でしょう。

気になるラジオの基本的な性能はどうかというと感度良好です。

これは地域や使用環境によって大きく変わるのであくまで私の個人的な使用環境でのことですのでご注意を。

今まで私の家にあったラジオ(ラジカセを含む)の中では一番感度良好です。

と言っても随分昔の機種なので技術の進歩で当然の結果だと思います。

また、受信状況が良くない場合のためにループアンテナも付属しています。

ノイズ対策もノイズキャンセル機能を搭載しているのでお好みで設定できます。

SONY ICZ-R250TV は AM 放送の他に FM、ワンセグ TV 放送も受信できます。

ちなみにFM補完放送にも対応しています。

ロッドアンテナとホイップアンテナも装備しています。

私の使用環境ではFM、ワンセグ TV 放送の受信は厳しいチャンネルもありました。

これは外部アンテナを使用すれば問題ないと思いますがワンセグ TV 放送は興味ないのでいいです。

FM 放送は滅多に聞かないと思うし、たまに車の運転中に聞くチャンネルはうれしいことに感度良好で綺麗に聞くことができたので Good! でした。

ラジオの基本性能でもう一つ特筆することがあります。

音が良い!

あくまでラジオとしてですが音が良い!

これは音響機器メーカーとしての Sony のこだわりでしょうか。

専用スピーカーBOXとバスレフ方式を採用しているので低音が心地よく聞こえます。

そのせいか高音も透き通った良い音で聞こえるような気がします。

録音したファイルのスピーカー再生ではデジタル信号処理による Clear Audio+ という Sony の得意技も設定できます。(そこまでやるか

調子にのって音楽ファイルを SD メモリーにいれて再生させてみたところそこそこ楽しめます。

残念ながら音楽ファイルを綺麗な音で楽しむという所まではいかないようです。

音楽用に設計された機種と比べること自体間違いのですがついつい・・・ Sony だから期待していまいました。

さて、次に使い勝手の良さをみていきます。

時計、チャンネル設定、予約設定などは取扱説明書を読めば簡単に設定できます。

チャンネル設定は今時仕様で地域を選んだら自動でプリセットされます。楽ちんです。

ただし、この取扱説明書の文字が小さく読みにくい。

取扱説明書を2倍くらいの大きさにして大きな文字と絵にしてほしいですね。

コスト的に厳しいかもしれないけど取扱説明書は購入者が絶対に必要とし必ず目を通すものだということを忘れないでほしい。

それら設定をする操作ボタンは解りやすく日本語で表記されています。

これら操作ボタンはラジオのフロントとトップに集中されています。

a

b

c

はじめはこんなにたくさんあって使いにくいかもしれないと心配しましたが実に合理的な配置になっていると感心させられます。

これら操作のインフォメーションは中央の小さな液晶パネルに表示されます。

バックライトのオン、オフも設定できるし、解りやすくていいです。(白色バックライトはいいね。)

昔のように周波数パネル上の棒をダイヤルを回しながら左右に動かして放送局を選択するという味わい深い操作を必要としません。(^_^;)

お気に入りの放送局を五つ登録できる機能までついてます。(便利です。)

このラジオのマニアックな使い方は語学学習にあるといっても過言ではありますせん。

私には必要の無い機能なのですが、録音したファイルの再生スピードの調整ができます。

リピート機能もあります。

ディクテーション再生機能も搭載しているので聞いて、書いてといった学習に最適ですね。

語学の学習に役立つことは間違いないでしょう。

このラジオはステレオマイクを内蔵しているので自分の発音を録音して確認するなど楽しみ方はいろいろありそうです。

このラジオに録音したファイルをパソコンで管理するのに sound organizer というアプリケーションが内蔵メモリーに付属されています。

ラジオとパソコンを USB ケーブルでつないぐと sound organizer のインストールが開始されほぼ自動で設定終了し、使えるようになります。

録音ファイルのコピーや移動などパソコン上でできます。

ラジオに音楽ファイルなどを転送して楽しむこともできます。

私の家にあったラジオ(ラジカセは除く)の電源はすべて乾電池でした。

このラジオの電源はリチウムイオン電池を内蔵していて AC アダプタを使用してでの使用、 AC アダプタ無しで内蔵リチウムイオン電池だけでの使用が可能です。

内蔵充電池があるというのはうれしいです!

しかも単三アルカリ乾電池 4 本を併用して使用すると最大約 20 時間使えるそうです。

以上、ゆっちの散財記録でした。

  

SONY ICZ-R250TV