在我的应用程序中,一些值在内部的范围从0开始。但是用户应该从1开始看这个范围。我认为将这个偏离的东西移到演示文稿中是合适的。在这种情况下,它是JSpinner组件。这样我就可以在contructor中指定是否有偏移量(并非所有值都有)。但是,如果我覆盖JSpinner的getValue()
或模型的getValue()
,那么(+1仅用于测试)
public Object getValue() {
Number value = (Number)super.getValue();
Number newValue=value;
if (value instanceof Double){
newValue=value.doubleValue()+1;
}
else if (value instanceof Integer){
newValue = value.intValue()+1;
}
return newValue;
}
它进入无限循环。我猜,它在某种原因引发状态变化事件。再次调用getValue
,增加更多,触发事件,增量等等。
怎么能解决这个问题?感谢
答案 0 :(得分:4)
不要混淆程序的数据模型和微调器的数字模型;让他们分开。委托具有正确演示范围的私人SpinnerNumberModel
,1 .. n 。提供一个访问器,返回所需范围内的值,0 .. n -1。
提供方法
getAdjustedValue()
,基本上getValue()-offset
,所有客户都应该使用而不是getValue()
?
是。 SpinnerModel
为JSpinner
视图提供服务。如果应用程序的模型使用不同的单元,则必须进行一些转换。你必须决定最有意义的地方。作为一个具体示例,此model的ControlPanel
有一个微调器可以调整 Hz 中的频率,而应用程序的Timer
则需要一个以毫秒为单位的周期。 / p>
答案 1 :(得分:2)
我认为CyclingSpinnerListModel可以做到这一点