当前位置: 首页 > 知识库问答 >
问题:

javafx:将标签文本属性与TextField的格式结果绑定

宰坚
2023-03-14

我有一个文本字段,用户在其中输入工资。TF有一个基于默认语言环境的TextFormatter。文本字段旁边有一个标签,在这个标签中,我想显示格式为货币的文本字段文本,为此,我使用以下代码:

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 TextProperty绑定。

有人可能会问:为什么不使用货币格式化程序而不是数字格式化程序,如:

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

答案是,当用户想要输入值时,他需要删除除美元符号以外的所有数字。例如,如果用户输入的值没有美元符号,则不会接受新值。

这就是为什么我想在标签中将格式化后的值显示为货币,而不使用货币格式化程序。谢谢

共有2个答案

子车成和
2023-03-14

这是我使用的解决方案

text.focusedProperty().addListener((ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue) -> {
        if(!newPropertyValue){
            show.setText(form.format(formatter.getValue().doubleValue()));
        }
    });
彭华皓
2023-03-14

这不是完全相同的格式,但可能是您需要的格式。

    NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
    show.textProperty().bind(Bindings.createStringBinding(
        () -> formatter.getValue() == null 
              ? "" 
              : currencyFormat.format(formatter.getValue().doubleValue()),         
        formatter.valueProperty()));
 类似资料:
  • 我想做的是: 我有一个JavaFX窗口,我通过拖动不断改变它的宽度和高度。然后的文本具有以下格式: 例子: 我想使用绑定,而不是使用2(两)个ChangeListeners来实现这一点。 我也读过这个问题JavaFX绑定到多个属性

  • 我有一个标签,它显示+ve或-ve符号。 我还有另一个标签,标签的文本颜色取决于的文本。 如果标签符号有3种情况:、和,如果标签符号为,则如何处理的文本为黑色?

  • 我有一个绑定到两个属性的标签。第一个值(DeletedFileCountProperty)是一个简单的int,无需格式化。但是,如何将第二个属性(SimpleLongProperty)格式化为人类可读的filesize值? 示例:的值为1000000。标签应显示“1MB”。 我可以调用绑定中的函数来让此函数格式化值吗? 迄今为止我的代码: 谢谢

  • 我在JavaFX应用程序中使用MVP。 资源: 控制器: 看法 在我的InfoStageView中,只需初始化我的标签和样式我的视图。 如何将我的超链接绑定到我的标签。我尝试了一些方法,但没有成功。我的StringProperty不可点击,但很容易绑定。 我的目标:我想打开带有链接的浏览器。

  • 我有一个TextField,它有一个TextFormatter,它有一个过滤器,接受TextField的输入,并确保它是双格式的。然后使用DoubleStringConverter将过滤后的文本转换为双精度值。这在自定义FXML组件中。请参见下面的示例。 另一个使用此组件的FXML组件... bindBidirectional()试图将文本字段的转换值绑定到其他地方存在的SimpleDoubleP

  • 我正在开发一个简单的Java程序来完成一些简单的mySQL内容。它有一个用JavaFX制作的小GUI。 GUI的控制器有一个SimpleBoleanProperty,我们称之为X,它指示到数据库的连接状态。我将一些简单的东西绑定到它,比如按钮的disableProperty so send querys,如果没有连接,应该禁用它。到现在为止,一直都还不错。 我有一个标签,用于执行以下操作: 如果X