我在初始化滑块时使用了以下代码:
//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);
这不会触发 changed 事件,我猜是因为值没有改变。一个简单的 hacky 解决方法是执行以下操作:
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);
(老实说,这听起来像是最好的解决方案)。
但只是想知道 - 有没有办法以另一种方式触发更改的事件?