スライダーを初期化するときに、以下のコードを使用しました。
//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);
}
});
ここで、changed イベントをトリガーして、その 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);
(正直に言うと、これが最善の解決策のように思えます)。
しかし、疑問に思っているのは、変更されたイベントを別の方法でトリガーする方法はありますか?