我用值创建了一个整数微调器
min (5), max (15) and initialValue (12)
和wrapAround (true)
。
一旦微调器在递增过程中达到max (15)
的值,就不会像在documentation中所说的那样将值重置为min (5)
,而是将其重置为值10 (max (15) - min (5))
public final void setWrapAround(布尔值)
设置属性wrapAround的值。
属性描述:
wrapAround属性用于指定值工厂是否应为圆形。例如,基于整数的值模型应从最大值增加到最小值(反之亦然)。
注意:递减正常工作,一旦达到min (5)
值,微调器值就会自动设置为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);
}
}
答案 0 :(得分:3)
这是一个已知的错误: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));
}
}
注意:根据建议,对解决方法进行了一些修改。
答案 1 :(得分:-1)
我对IntegerSpinner也有类似的问题-但从-11绕到12(负到正)-达到-11或12时它返回零。解决方案是使用字符串使List微调器成为可能。因此,使用或设置将字符串转换为整数和vc所需的值。