2016-05-27 8 views
0

私はTextFieldを持っています。ユーザー入力給料があります。 TFには、デフォルトロケールに基づくTextFormatterがあります。あなたのよう enter image description herejavafx:TextFieldの+ FORMAT結果でラベルのテキストプロパティをバインドします。

TextField text = new TextField(); 
Label show = new Label(); 

TextFormatter<Number> formatter = new TextFormatter<>(new FormatStringConverter<>(DecimalFormat.getNumberInstance())); 

text.setTextFormatter(formatter); 

show.textProperty().bind(Bindings.concat(text.getTextFormatter().valueProperty().asString()) 
.concat(" ").concat(Currency.getInstance(Locale.getDefault()).getCurrencyCode())); 

return new HBox(text, show); 

結果:TextFieldの隣にラベルがこのラベルでは、私はこれのすべてについて、私はこのコードを使用して、通貨としてフォーマットのTextFieldのテキストを表示したい、そこにありますラベルテキストは数値としてフォーマットされていません - フォーマッタが適用されていないためです。 私の質問だから、ラベルのテキストをフォーマットし、同じ時間をTextField TextPropertyにバインドすることはできますか?

誰かが求めることができる:なぜのような代わりに数フォーマッタの通貨フォーマッタを使用しない:答えは、ユーザーが値を入力したいとき、ある、彼はすべての桁を削除する必要がありますだけでなく

new TextFormatter<>(new FormatStringConverter<>(DecimalFormat.getCurrencyInstance())); 

BUTたとえばドル記号の場合、ユーザーがドル記号なしで値を入力すると、新しい値は受け入れられません。

そのため、書式設定された値をラベルの通貨として表示し、通貨フォーマッタを使用しません。ありがとう。

答えて

0

ここで私は

text.focusedProperty().addListener((ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue) -> { 
     if(!newPropertyValue){ 
      show.setText(form.format(formatter.getValue().doubleValue())); 
     } 
    }); 
を使用したソリューションです
0

これは全く同じ形式ではありませんが、必要なものかもしれません。

NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(); 
    show.textProperty().bind(Bindings.createStringBinding(
     () -> formatter.getValue() == null 
       ? "" 
       : currencyFormat.format(formatter.getValue().doubleValue()),   
     formatter.valueProperty())); 
関連する問題