单击并按住向上/向下箭头按钮时,微调器更新的速度很慢。有没有办法提高变化速度?
当我单击,单击,单击鼠标时,微调器值会随着我单击而变化。如果我在每次按键时使用键盘上的向上/向下箭头或者按住向上/向下箭头键,它也会快速变化。当我点击并按住箭头按钮时,我希望值快速改变。
任何人都知道这样做的方法吗?
答案 0 :(得分:4)
SpinnerBehavior
的{{1}}每750毫秒触发一次更新。遗憾的是,如果不反映访问SpinnerSkin
成员,就无法简单地设置/修改此行为。因此,没有反射的唯一方法是使用事件过滤器以更快的速度触发更新:
private
答案 1 :(得分:2)
我修改了fabian的答案,以便在按住鼠标的同时降低微调器的速度:
private int currentFrame = 0;
private int previousFrame = 0;
@Override
public void handle(long now)
{
if (now - startTimestamp >= initialDelay)
{
// Single or holded mouse click
if (currentFrame == previousFrame || currentFrame % 10 == 0)
{
if (increment)
{
spinner.increment();
}
else
{
spinner.decrement();
}
}
}
++currentFrame;
}
停止计时器后,我们再次调整previousFrame:
public void stop()
{
previousFrame = currentFrame;
[...]
}
答案 2 :(得分:2)
Fabian的回答略有改进。将以下mod添加到MOUSE_RELEASED addEventerFilter将停止单击与微调器关联的文本字段时导致的NullPointerException。干杯法比安!
spinner.addEventFilter(MouseEvent.MOUSE_RELEASED, evt -> {
Node node = evt.getPickResult().getIntersectedNode();
if (node.getStyleClass().contains("increment-arrow-button") ||
node.getStyleClass().contains("decrement-arrow-button")) {
if (evt.getButton() == MouseButton.PRIMARY) {
handler.stop();
}
}
});
答案 3 :(得分:0)
在某些情况下,更改更新速度的替代方法可能是调整每次更新值增加/减少的数量。
SpinnerValueFactory.IntegerSpinnerValueFactory intFactory =
(SpinnerValueFactory.IntegerSpinnerValueFactory) spinner.getValueFactory();
intFactory.setAmountToStepBy(100);
参考:http://news.kynosarges.org/2016/10/28/javafx-spinner-for-numbers/