Java:如何使JSpinner显示带有偏移量的值

时间:2011-10-27 20:04:52

标签: java swing jspinner

在我的应用程序中,一些值在内部的范围从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,增加更多,触发事件,增量等等。 怎么能解决这个问题?感谢

2 个答案:

答案 0 :(得分:4)

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

  

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

是。 SpinnerModelJSpinner视图提供服务。如果应用程序的模型使用不同的单元,则必须进行一些转换。你必须决定最有意义的地方。作为一个具体示例,此modelControlPanel有一个微调器可以调整 Hz 中的频率,而应用程序的Timer则需要一个以毫秒为单位的周期。 / p>

答案 1 :(得分:2)

我认为CyclingSpinnerListModel可以做到这一点