我的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/