JavaFX Integer Spinner (IntegerSpinnerValueFactory) 不会将值环绕到最小值

标签 java javafx java-11 javafx-11

我创建了一个带有值的 Integer Spinner

min (5)、max (15) 和 initialValue (12)wrapAround (true)

一旦微调器在递增期间达到max (15) 值,而不是像documentation 中所说的那样将值重置为min (5) , 它被重置为值 10 (max (15) - min (5))

public final void setWrapAround​(boolean value)

Sets the value of the property wrapAround.

Property description:

The wrapAround property is used to specify whether the value factory should be circular. For example, should an integer-based value model increment from the maximum value back to the minimum value (and vice versa).

注意:递减正常工作,一旦达到 min (5) 值,Spinner 值会自动设置为 max (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);
  }
}

最佳答案

这是一个已知错误:JDK-8193286 .提交者提供了一个解决方法——子类化 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)); 
  } 

} 

注意:解决方法已根据建议略作修改。

关于JavaFX Integer Spinner (IntegerSpinnerValueFactory) 不会将值环绕到最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53950933/

相关文章:

java - 对模块的模棱两可的调用

java - 打印结果表时出现问题

java - 内容出现在自定义单元格工厂的空行中

java - 无法使用 Thread.start() 启动 JavaFX 任务

java - 如何将 Optional<Object> 转换为 Optional<String>

java - 如何启用单击按钮格式并通过窗口增加文本大小

java - 如果我不访问该应用程序,则不会收到通知

java - IndexMinPQ 目的算法 4 由 Sedgwick 和 Wayne 编写

java - 老虎机时间线动画不起作用

JavaFX Canvas 重绘不执行任何操作