在TextField中将2位数字相乘-Java FX

时间:2018-11-11 14:51:21

标签: java javafx

我正在努力解决应用程序中的错误。 通常的想法是将基本价格乘以滑块参数,例如,如果滑块设置为2,price = 2 * price

问题在于,如果我再次切换滑块,则数学运算正在累积。例如,当我将滑块切换为2,然后切换为3,然后再切换为4时,我的结果是price * 2 * 3 * 4,但我的期望是记住了price * 4。我该如何解决?

#google_map *, #google_map *:before, #google_map *:after {
    -webkit-transform: none !important; 
}

1 个答案:

答案 0 :(得分:0)

因此,您遇到的问题是从“文本字段”获取字符串并对其进行数学运算。

解决此问题的方法是通过执行以下操作将字符串解析为整数:

int baseCost = Integer.parseInt(textField.getValue());

这将为您提供作为整数的基本成本,然后,您可以使用类似的方法将其乘以滑块中的数字。现在,您可以通过执行以下操作在priceTextField中设置值:

//totalCost is an integer value calculated by multiplying the base cost and the slider's value.
priceTextField.textProperty().setValue(Integer.toString(totalCost));

我希望这会有所帮助!

遇到新问题,这就是发生这种情况的原因:

出现问题的原因是因为每次更改滑块中的值时,您都将priceTextField设置为daySlideri。然后,下次更改时,将i设置为等于priceTextField中当前的值。这就是为什么它要进行多次乘法。

如果我没记错的话,您要执行的操作是将TextField值乘以Slider值,然后将其显示在另一个TextField中。因此,您可以说int i = Integer.parseInt(textField.getValue())以获取基本成本的价值。然后,您可以将其乘以daysSlider的值,然后执行priceTextField.textProperty().setValue( Integer.toString(i * sliderValue);

要解决您的新问题:

ArrayList<Integer> baseCost = new ArrayList<>();

priceTextField.valueProperty().addListener(new ChangeListener(){
    @Override
    public void changed(ObservableValue arg0, Object arg1, Object arg2) {
        baseCost.add(Integer.parseInt(priceTextField.getText()));
    }
}
daysSlider.valueProperty().addListener(new ChangeListener() {

    @Override
    public void changed(ObservableValue arg0, Object arg1, Object arg2) {
        priceTextField.textProperty().setValue(
                String.valueOf((int) daysSlider.getValue() * baseCost.get(0) ));
    }

});

回答您的第三个问题(可以在聊天中找到)

这是使您可以运行的方式:

daysSlider.valueProperty().addListener(new ChangeListener() {
    @Override
    public void changed(ObservableValue arg0, Object arg1, Object arg2) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
              priceTextField.textProperty().setValue(
              String.valueOf((int) daysSlider.getValue() * baseCost.get(0) ));
            }
        };

        Handler handler = new Handler();
        //Run the runnable after 3000 milliseconds or 3 seconds.
        handler.postDelayed(runnable, 3000);

    }

});