2017-05-08 4 views
0

説明JavaFXのDoubleProperty intValue()メソッドは常に0を返すために、ここで戻ります.... 100

私はそれでLabelProgressBar progressPropertyにバインドさテキストです持っています。それから私は100で、プログレスバーの値を乗算し、iはバーを例"50 %""25 %"などのために、整数プラス%として* 100、プログレスバーの値を表示したい:

label.textProperty().bind(Bindings.concat(progressBar.progressProperty().multiply(100.00).intValue()," %"); 

問題

.intValue()メソッドは何らかの理由で常に0を返します。私は削除した場合には、このような

最後に

なぜintValue()行為...ダブル、たとえば25,05345 %32,3456534 %あるプログレスバーの値を返しますか?

答えて

2

、私はそれが実際にそこにあると仮定するつもりです(そうでなければ、コンパイルされません)、それは最後です。

第2に、Bindings.concat()は、オブザーバビリティだけでなく、あらゆるオブジェクトを取り込みます。したがって、Bindings.concat(new Object(), new Object());はうまくコンパイルされますが、役に立たないでしょう。あなたの場合、このメソッドをBindings.concat(int, String)と呼び、intIntegerに自動ボックスされています。

JavaDocより:

引数の一つはObservableValueと このObservableValue変化の値を実装している場合、変更は自動的 ストリング式に反映されています。

あなたは法に観察可能を与えていないので、あなたは0であることを起こるおり、メソッドが実行された時点で、あなたのバインディング式の値を取得しようとしています。

label.textProperty().bind(Bindings.format("%1$.0f %%", progressBar.progressProperty().multiply(100.00))); 

をそれとも、すでにBindings.createStringBinding()経由思い付いたものを使用:

あなたはこれを行うことができます。

+0

説明ありがとうございます。 – GOXR3PLUS

0

私は何かが紛失しているか、または以下のバインディングがカーバイド収集されているようですか?

label.textProperty().bind(Bindings.concat(progressBar.progressProperty().multiply(100.00).intValue()," %"); 

だから私は以下に置き換え、それが動作します...あなたは、あなたの質問に答えましたが、とにかく...

まず、あなたのサンプルコードは)を逃すものを持っている

label.textProperty().bind(Bindings.createStringBinding(
     () -> String.format("Work Done : %d %%", progressBar.progressProperty().multiply(100.00).intValue()), 
     progressBar.progressProperty())); 
関連する問題