Я использовал код ниже при инициализации моих ползунков:
//Gets the corresponding slider value, from it's represented value.
int curr = valueToSlider(min, max, current, scale, q, grains);
final JSlider slider = new JSlider(JSlider.VERTICAL, 0, grains, curr);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent event) {
double value = sliderToValue(min, max, slider.getValue(), scale, q, grains);
String str = "";
if (valueType == SliderValueType.FLOAT)
str = String.format("%.2f",value);
if (valueType == SliderValueType.INTEGER)
str = String.format("%.0f", value);
valueLabel.setText(str);
callCommand(c, value);
}
});
Теперь мне нужно инициировать измененное событие, чтобы установить эту метку valueLabel в правильном формате.
slider.setValue(curr);
Я предполагаю, что это не вызывает измененное событие, потому что значение не изменилось. Простое хакерское исправление состоит в том, чтобы просто сделать что-то вроде:
slider.setValue(1);
slider.setValue(curr);
Но вы можете себе представить, что в каком-то коде запуск измененного события со случайным значением может иметь нежелательные последствия.
Я мог воспроизвести этот метод setText
в моем методе инициализации.
if (valueType == SliderValueType.FLOAT)
str = String.format("%.2f",curr);
if (valueType == SliderValueType.INTEGER)
str = String.format("%.0f", curr);
valueLabel.setText(str);
(Что звучит как лучшее решение здесь, если честно).
Но просто интересно - есть ли способ вызвать измененное событие другим способом?