JavaFx8 3 TextField。在一个文本字段上输入,更新另一个

时间:2015-10-27 11:26:23

标签: javafx textfield

我有三个Textfields tfNet,tfVat和tfGross。 (对于我的应用程序,我使用java赚钱。在此示例中使用double。)

我想要的: 当我更改tfNet时,它应该更新

tfGross.setText("" + (Double.parseDouble(tfNet.getText()) * 
                   (1 + Double.parseDouble(tfVat.getText()) / 100)));

当我改变tfVat时

tfNet.setText("" + (Double.parseDouble(tfGross.getText()) / 
                   (1 + Double.parseDouble(tfVat.getText()) / 100)));

当我改变tfGross

tfNet.setText("" + (Double.parseDouble(tfGross.getText()) / 
                   (1 + Double.parseDouble(tfVat.getText()) / 100)));

我尝试使用TextFormatter来处理所有三个Textfield但是陷入了循环。

然后尝试使用NumberBinding,但无法弄清楚如何操作。

JavaFx的方法是什么?

1)将SimpleDoubleProperty绑定到Textfield并将addListener绑定到DoubleProperty?

2)或TextField上的setOnAction?

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以为每个TextField textProperty()添加侦听器并在其中应用逻辑。

例如,如果您想要将更改侦听器添加到tfNet,您可以写:

tfNet.textProperty().addListener((ov, oldValue, newValue) -> {
    // Proper checks for Text as Double
    tfGross.setText("" + (Double.parseDouble(tfNet.getText()) * 
                   (1 + Double.parseDouble(tfVat.getText()) / 100)));
});