我的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();
}
});
答案 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();
}