java - 如何使用时间轴在 JavaFX 中双击?
问题描述
这是我到目前为止所做的,它工作得很好,但是当我双击时,双击事件被触发并且单击事件被触发,当我单击时,当然只有单击被触发。
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));
}
});
Stack Overflow 上的其他解决方案不起作用!他们只是计算点击次数,但仍然遇到我现在遇到的同样问题。
解决方案
我曾经遇到过同样的问题,也找不到解决方案,所以我不得不开发自己的解决方案。
为此,我使用了 Javafx Timeline
,它可以让您在第一次单击时开始时间线,并且取决于您之后是否进行第二次单击,它会将其视为单击或双击,但绝不会同时出现。
这是我的解决方案:
// 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;
});
推荐阅读
- swift - App Store Connect:ITMS-90492:无效的 WatchKit 支持
- php - MongoDb + PHP:不能指定多个位置项目。每个查询
- python-3.x - 如何在 selenium python 中运行多个测试用例?
- reactjs - 如何使用 Async / Await 和 React 钩子?
- kdb - 在 kdb 中更新磁盘上的序列化表
- swift - 为什么更新自动布局约束时我的 UIView 无法正确显示?
- linux - 在 linux 中使用带 sort 或不带 uniq 命令的区别
- angular - RxJS 和 Async/Await:如何比较两者?
- java - 如何使用带有自定义渲染器的 JList 的 setter 来设置单元格的内容?
- python - 将具有浮点数和字符串数的数组转换为浮点数