4

在我的应用程序中,一些值的内部范围从 0 开始。但是用户应该看到这个范围从 1 开始。我认为将这些偏移的东西移到表示中是合适的。在这种情况下,它是 JSpinner 组件。这样我就可以在构造函数中指定是否有偏移量(并非所有值都有)。getValue()但是,如果我将 JSpinner 或模型覆盖为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,增加更多,触发事件,增加等等。这怎么可能解决?谢谢

4

2 回答 2

4

不要将程序的数据模型和微调器的数字模型混在一起;让他们分开。委托给SpinnerNumberModel具有正确表示范围的私人, 1.. n。提供一个访问器,它返回所需范围内的值,0.. n –1。

提供getAdjustedValue()基本上getValue()-offset所有客户都应该使用的方法,而不是getValue()

是的。SpinnerModel服务于视图JSpinner。如果您的应用程序模型使用不同的单位,则必须进行一些转换。你必须决定在哪里最有意义。作为一个具体的例子,这个模型ControlPanel有一个微调器,它以Hz为单位调整频率,而应用程序Timer需要一个以毫秒为单位的周期。

于 2011-10-28T01:34:39.767 回答
2

我认为CyclingSpinnerListModel可以做到这一点

于 2011-10-27T20:50:02.753 回答