He creado una Spinner enteros con valores
min (5), max (15) and initialValue (12)
y wrapAround (true)
.
Una vez que el spinner alcanza el max (15)
valor durante la subasta, en lugar de restablecer el valor a min (5)
como se dice en la documentación , es volver a poner a valor10 (max (15) - min (5))
setWrapAround vacío public final (valor booleano)
Establece el valor de la propiedad WRAPAROUND.
Descripción de propiedad:
La propiedad WRAPAROUND se utiliza para especificar si la fábrica valor debe ser circular. Por ejemplo, en caso de un modelo de valor de incremento a base de número entero de la parte posterior valor máximo al valor mínimo (y viceversa).
Nota: Disminuir funciona correctamente, una vez que se alcanza el min (5)
valor, el valor Spinner establece automáticamentemax (15)
public class IntSpinnerTest extends Application
{
@Override
public void start(Stage stage) throws Exception
{
var spinner = new Spinner<Integer>();
var factory = new SpinnerValueFactory.IntegerSpinnerValueFactory(5, 15, 12);
factory.setWrapAround(true);
spinner.setValueFactory(factory);
stage.setScene(new Scene(new BorderPane(spinner), 400, 200));
stage.setTitle("IntSpinnerTest");
stage.centerOnScreen();
stage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
Se trata de un error conocido: JDK-8193286 . El remitente incluyó una solución-subclases IntegerSpinnerValueFactory
:
package sample;
import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory;
public final class IntSpinnerValueFactory extends IntegerSpinnerValueFactory {
public IntSpinnerValueFactory(final int min, final int max) {
super(min, max);
}
public IntSpinnerValueFactory(final int min, final int max, final int initialValue) {
super(min, max, initialValue, 1);
}
@Override
public void increment(final int steps) {
final int min = getMin();
final int max = getMax();
final int currentValue = getValue();
final int newIndex = currentValue + steps * getAmountToStepBy();
setValue(newIndex <= max ? newIndex : (isWrapAround() ? (newIndex - min) % (max - min + 1) + min : max));
}
}
Nota: La solución provisional se ha modificado ligeramente en función de las recomendaciones.