如何在JavaFX中使用时间线进行双击?
这就是我到目前为止所做的,它工作得很好,但是当我双击时,双击事件被激发,而单击事件被激发,当我单击时,当然只有单击被激发如何在JavaFX中使用时间线进行双击?,java,javafx,java-8,Java,Javafx,Java 8,这就是我到目前为止所做的,它工作得很好,但是当我双击时,双击事件被激发,而单击事件被激发,当我单击时,当然只有单击被激发 long currentMillis = System.currentTimeMillis(); addEventFilter(MouseEvent.MOUSE_CLICKED, e -> { long currentClickedMillis = System.currentTimeMillis(); long diffMillis = currentCl
long currentMillis = System.currentTimeMillis();
addEventFilter(MouseEvent.MOUSE_CLICKED, e -> {
long currentClickedMillis = System.currentTimeMillis();
long diffMillis = currentClickedMillis - currentMillis;
currentMillis = currentClickedMillis;
if (diffMillis > 500) {
fireEvent(new FlightListEvents(FlightListEvents.FLIGHT_BUTTON_CLICKED, this.aircraft));
} else {
fireEvent(new FlightListEvents(FlightListEvents.FLIGHT_BUTTON_DOUBLE_CLICKED, this.aircraft));
}
});
堆栈溢出的其他解决方案不起作用!他们只是计算点击次数,但仍然存在与我现在相同的问题。我曾经遇到过相同的问题,但也找不到解决方案,因此我必须开发自己的解决方案。
为此,我使用了JavaFX的代码>时间线< /Cord>,这将给你在第一次点击时启动时间线的能力,这取决于如果你再点击第二次点击,它会被认为是单次点击或双击,但不会同时发生。 以下是我的解决方案:
// initialize your timeline
final Timeline clickTimeline = new Timeline();
// minimum duration of a double click 500ms
Duration clickDuration = Duration.millis(500);
KeyFrame clickKeyFrame = new KeyFrame(clickDuration);
boolean isClickTimelinePlaying = false;
clickTimeline.getKeyFrames().add(clickKeyFrame);
addEventFilter(MouseEvent.MOUSE_CLICKED, e -> {
if (isClickTimelinePlaying) {
// when clicking the second time before the time line finishes
isClickTimelinePlaying = false;
fireEvent(new FlightListEvents(FlightListEvents.FLIGHT_BUTTON_DOUBLE_CLICKED, this.aircraft));
clickTimeline.stop();
} else {
// when clicking for the first time
isClickTimelinePlaying = true;
// start the timeline
clickTimeline.play();
});
}
// if timeline finises without receiving a second click, consider it a single click
clickTimeline.setOnFinished(event -> {
fireEvent(new FlightListEvents(FlightListEvents.FLIGHT_BUTTON_CLICKED, this.aircraft));
isClickTimelinePlaying = false;
});
注意:在双击和单击时做完全不同的事情是不好的!通常情况下,双击会增强/扩大单键。@kleopatra但双击也会触发单键事件并不违反直觉?@Elmehdi否,这取决于客户端应用程序来区分:)典型的良好UX f.i.是单选、双启动编辑。第一次开始编辑,第二次删除项目是错误的。。因此,我对这样一个问题的第一个看法是重新思考用户体验(与技术上独立的单/双-这是可能的,正如您的答案正确地表明的那样:)