为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

泛舟湖上清波郎朗 2022-01-12 16:13:35
我正在为我的应用程序中的一个错误而苦苦挣扎。总体思路是将基本价格乘以滑块参数,例如,如果滑块设置为 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 ));    }});
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

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


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


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(

                    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);


    }


});


查看完整回答
反对 回复 2022-01-12
  • 1 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号