java - 在 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 ));
}
});
解决方案
因此,您遇到的问题是从文本字段中获取字符串并对其进行数学运算。
解决此问题的方法是通过执行以下操作将字符串解析为整数:
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
为daySlider
times 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);
}
});
推荐阅读
- css - CSS 中的条件媒体查询
- asp.net-core - 无法让 AJAX/jquery-unobtrusive 在 Asp.Net Core 应用程序中工作
- java - 如何找到一个像素的 4 个邻居
- asp.net-core - 使用自定义属性使用 DataProtectionProvider 实现加密 ValueConverter
- asp.net-mvc - 如何更改 asp.net core mvc 中的默认 AntiForgeryToken 标识符?
- r - Broom::augment() :有没有办法自定义列名或指定输出列?
- mongodb - 如何获取列表包含所有查询元素的文档
- ruby-on-rails - 数字海洋管理 sidekiq 工作者
- python - 如何根据pyspark数据框中的某些条件获取列名作为withColumn语句的一部分?
- google-apps-script - 用于将 ss 转换为多个不同 .pdf 文件的应用程序脚本