创建自定义微调器模型

时间:2014-12-28 19:51:49

标签: java swing abstract-class jspinner

我正在尝试创建一个自定义JSpinner,代表一系列强大的数字2.喜欢,1-2-4-8-16等等。我必须通过扩展AbstractSpinnerModel并更改其实现的方法(getNextValue等)来做到这一点。问题是,我的自定义JSpinner上的箭头键不起作用。单击其中一个时没有任何变化。我需要显示当前值的上一个和下一个值。 (先前值= 4当前值= 8下一个值= 16)。

这是我的代码:

import java.awt.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Hw5SpinnerModel extends JFrame {

public static void main(String[] args) {

    Hw5SpinnerModel frame = new Hw5SpinnerModel();

}

public Hw5SpinnerModel() {

    setTitle("Hw5SpinnerModel");
    setSize(350, 300);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    final JSpinner jspn = new JSpinner(new CustomSpinnerModel());

    final JLabel jlbl = new JLabel("");

    add(jspn, BorderLayout.NORTH);
    add(jlbl, BorderLayout.CENTER);

    jspn.addChangeListener(new ChangeListener() {

        @Override
        public void stateChanged(ChangeEvent e) {

            jlbl.setText(jspn.getPreviousValue() + jspn.getValue() + jspn.getNextValue());

        }

    });

    //jlbl.setText(jspn.getNextValue() + "");

    setVisible(true);

}

public class CustomSpinnerModel extends AbstractSpinnerModel {

    Integer i = 1;

    @Override
    public Object getValue() {
        return i;
    }

    @Override
    public void setValue(Object value) {
        i = (Integer) value;
    }

    @Override
    public Object getNextValue() {
        return 2 * i;
    }

    @Override
    public Object getPreviousValue() {
        return i / 2;
    }

}

}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

    jSpinner1.setModel(new SpinnerNumberModel(1, null, null, 1) {
        @Override
        public Object getNextValue() {                
            Object nextValue = super.getValue();
            int x = Integer.valueOf(nextValue.toString())*2;
            //Object o = x;
            return x;
        }
    });

100%