猿问

在 TextField 中乘以 2 位数字 - Java FX

我正在为我的应用程序中的一个错误而苦苦挣扎。总体思路是将基本价格乘以滑块参数,例如,如果滑块设置为 2,则价格 = 2 * 价格


问题是如果我再次切换滑块,数学运算就会累积。例如,当我将滑块切换到 2,然后切换到 3,然后切换到 4,我的结果是价格 * 2 * 3 * 4,但我的期望是记住价格 * 4。我该如何解决?


daysSlider.valueProperty().addListener(new ChangeListener() {


@Override

    public void changed(ObservableValue arg0, Object arg1, Object arg2) {

      int i = Integer.parseInt(priceTextField.getText());

        priceTextField.textProperty().setValue(

                String.valueOf((int) daysSlider.getValue()* i ));

    }

});


泛舟湖上清波郎朗
浏览 184回答 1
1回答

神不在的星期二

因此,您遇到的问题是从文本字段中获取字符串并对其进行数学运算。解决此问题的方法是通过执行以下操作将字符串解析为整数: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为daySlidertimes i。然后,下次发生更改时,您设置i的值等于priceTextField. 这就是为什么它要进行多次乘法运算。如果我没记错的话,您尝试做的是将 TextField 值乘以 Slider 值并将其显示在另一个 TextField 中。因此,您可以做的就是int i = Integer.parseInt(textField.getValue())获得基本成本的价值。然后,您可以将其乘以该daysSlider值并执行priceTextField.textProperty().setValue(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Integer.toString(i * sliderValue);要解决您的新问题:ArrayList<Integer> baseCost = new ArrayList<>();priceTextField.valueProperty().addListener(new ChangeListener(){&nbsp; &nbsp; @Override&nbsp; &nbsp; public void changed(ObservableValue arg0, Object arg1, Object arg2) {&nbsp; &nbsp; &nbsp; &nbsp; baseCost.add(Integer.parseInt(priceTextField.getText()));&nbsp; &nbsp; }}daysSlider.valueProperty().addListener(new ChangeListener() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void changed(ObservableValue arg0, Object arg1, Object arg2) {&nbsp; &nbsp; &nbsp; &nbsp; priceTextField.textProperty().setValue(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String.valueOf((int) daysSlider.getValue() * baseCost.get(0) ));&nbsp; &nbsp; }});回答您的第三个问题(可以在聊天中找到):这是您制作可运行文件的方式:daysSlider.valueProperty().addListener(new ChangeListener() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void changed(ObservableValue arg0, Object arg1, Object arg2) {&nbsp; &nbsp; &nbsp; &nbsp; Runnable r = new Runnable() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; priceTextField.textProperty().setValue(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String.valueOf((int) daysSlider.getValue() * baseCost.get(0) ));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; Handler handler = new Handler();&nbsp; &nbsp; &nbsp; &nbsp; //Run the runnable after 3000 milliseconds or 3 seconds.&nbsp; &nbsp; &nbsp; &nbsp; handler.postDelayed(runnable, 3000);&nbsp; &nbsp; }});
随时随地看视频慕课网APP

相关分类

Java
我要回答