Итак, проблема в том, что вы получаете строку из текстового поля и выполняете с ней математические операции.
Чтобы обойти эту проблему, можно проанализировать строку в целое число, выполнив следующие действия:
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
раз 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);
}
});