如何使自定义SpinnerNumberModel的幂为2

时间:2014-12-29 10:42:57

标签: java swing jspinner

我试图创建一个自定义SpinnerNumberModel类并实现4个方法,即getValue(),setValue(),getNextValue()和getPreviousValue()。当我想将步长设置为2的幂时,似乎我总是从所有这些方法中得到错误。

import javax.swing.SpinnerNumberModel;

public class MySpinnerModel extends SpinnerNumberModel {

    Number value;
    @Override
    public Object getValue() {
        Object returnValue = Math.pow(2, (Double) super.getValue());
        return returnValue;
    }

    @Override
    public void setValue(Object value) {
         if ((value == null) || !(value instanceof Number)) {
                throw new IllegalArgumentException("illegal value");
            }
            if (!value.equals(this.value)) {
                this.value = (Double)value;
                fireStateChanged();
            }
    }

    @Override
    public Object getNextValue() {
        Object returnValue = Math.pow(2, (Double) super.getNextValue());
        return returnValue;

    }

    @Override
    public Object getPreviousValue() {
        Object returnValue = Math.pow(2, (Double) super.getPreviousValue());
        return returnValue;
    } 

}

1 个答案:

答案 0 :(得分:2)

  

当我按下按钮以增加或减少旋转器中的数字时,数字不会改变

问题是您永远不会从super.setValue()覆盖的方法中调用setValue()。而是将值分配给不在任何地方使用的类字段。