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
Vous devez vous connecter pour publier un commentaire.
Oui c'est possible . Voir l'exemple Donné ci-Dessous:
OriginalL'auteur Vishal K