限制密钥输入以防止发送垃圾邮件

时间:2018-02-14 10:42:08

标签: java javafx

我的scrollPane中有一个画布,我根据当前显示的时间绘制数据。可以使用键盘上的向左和向右箭头键更改位置。问题是,通过按住它来垃圾密钥,会使scrollPane的位置移动太快。所以我正在考虑的是在位置再次变化之前将输入限制为等待100ms或类似的东西。我尝试使用Thread.Sleep(100),但我更喜欢没有它的解决方案。

scrollPane.setOnKeyPressed(e -> {

    if (e.getCode() == KeyCode.RIGHT)
    {
       Thread.sleep(100);
       drawNextPosition();
    }
    else if (e.getCode() == KeyCode.LEFT)
    {
       Thread.sleep(100);
       drawPreviousPosition();
    }
});

2 个答案:

答案 0 :(得分:3)

使用Timeline刷新场景,只需在事件处理程序中保存键的状态:

private KeyCode key;

private final Timeline timeline = new Timeline(new KeyFrame(Duration.millis(100), evt -> {
    switch (key) {
        case RIGHT:
            drawNextPosition();
        break;
        case LEFT:
            drawPreviousPosition();
        break;
    }
});

private void keyDown(KeyCode code) {
    switch (code) {
        case LEFT:
        case RIGHT:
            // start timeline or continue playing
            timeline.play();
            key = code;
    }

}

private void keyUp(KeyCode code) {
    if (code == key) {
        // stop animation, if key for current direction is released
        timeline.stop();
        key = null;
    }
}
scrollPane.setOnKeyPressed(e -> keyDown(e.getCode()));
scrollPane.setOnKeyReleased(e -> keyUp(e.getCode()));

答案 1 :(得分:1)

尝试使用Timestamp变量。 启动变量。

var last_updated = new Date().getTime();

并且

if(new Date().getTime() > last_updated + 100) {
  drawNewPosition();
  last_updated = new Date().getTime();
}