JSpinner en Double format

J'aimerais créer JSpinners avec le soutien pour les valeurs non entières comme 2.01 et -3.456, donc getValue() renvoie un Double.

Non seulement cela, mais j'aimerais que la taille du pas doit être dynamique, en utilisant quelque chose comme formule suivante (10% de la grandeur):

stepSize = 0.1 * pow(10, round( log(currentValue) ));

Est-il possible? Ou devrais-je demander, est-il en valeur la dispute?

Mise à jour:

Avec l'adaptation de Vishal réponse, j'ai produit la classe suivante pour faire de belle double filateurs. Jusqu'à présent, ils ont montré à travailler vraiment bien dans mon programme bien que je vais résumé le fait d'adapter la taille du pas de l'autre parent de la classe pour que je puisse faire AdaptiveDoubleSpinners et AdaptiveIntegerSpinners plus tard.

import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class DoubleSpinner extends JSpinner {

    private static final long serialVersionUID = 1L;
    private static final double STEP_RATIO = 0.1;

    private SpinnerNumberModel model;

    public DoubleSpinner() {
        super();
        //Model setup
        model = new SpinnerNumberModel(0.0, -1000.0, 1000.0, 0.1);
        this.setModel(model);

        //Step recalculation
        this.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                Double value = getDouble();
                //Steps are sensitive to the current magnitude of the value
                long magnitude = Math.round(Math.log10(value));
                double stepSize = STEP_RATIO * Math.pow(10, magnitude);
                model.setStepSize(stepSize);
            }
        });
    }

    /**
     * Returns the current value as a Double
     */
    public Double getDouble() {
        return (Double)getValue();
    }

}

OriginalL'auteur CJxD | 2013-03-02