JavaFX Entero Spinner (IntegerSpinnerValueFactory) no se ajusta alrededor del valor mínimo de

Venkata Raju:

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);
  }
}
repollo:

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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=190684&siteId=1
Recomendado
Clasificación