java - 限制按键输入以防止垃圾邮件

标签 java javafx

我的scrollPane中有一个 Canvas ,我在其中根据当前显示的时间绘制数据。可以使用键盘上的左右箭头键更改位置。问题是,通过按住按键来发送垃圾邮件,会使滚动 Pane 的位置移动得太快。所以我正在考虑的是限制输入,比如在位置再次改变之前等待 100 毫秒或类似的东西。我尝试使用 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();
    }
});

最佳答案

使用时间轴刷新场景并简单地将按键的状态保存在事件处理程序中:

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()));

关于java - 限制按键输入以防止垃圾邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48785147/

相关文章:

Java Trident 库和 Thread.sleep()

java - 将 java.sql.Date 转换为 java.sql.Timestamp

java - 如何在 Java Scene Builder 2.0 中绘制六边形?

java - 编辑约会上的右键单击弹出窗口 JFXtras

JavaFX Script 和 Visage,等效?

java - 在 JavaFX 的节点的子列表中查找特定节点

java - Spring AMQP——@RabbitListener 是在幕后轮询吗?

java - SpringApplicationConfiguration 无法解析为类型

JavaFx通过拖放的方式用一条线连接两个子节点

java - 将数组列表添加到我的 javafx 程序中的选择框