单击并按住鼠标按钮,JavaFX Spinner更改速度很慢

时间:2016-12-08 22:37:07

标签: javafx javafx-8

单击并按住向上/向下箭头按钮时,微调器更新的速度很慢。有没有办法提高变化速度?

当我单击,单击,单击鼠标时,微调器值会随着我单击而变化。如果我在每次按键时使用键盘上的向上/向下箭头或者按住向上/向下箭头键,它也会快速变化。当我点击并按住箭头按钮时,我希望值快速改变。

任何人都知道这样做的方法吗?

4 个答案:

答案 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/