2023-02-16 403
我正在尝试使用Javafx中的活动处理来做一些脱身工作.我需要能够确定在手动启动事件后是否消耗了事件.
在下面的示例中,正确接收了合成鼠标事件,但是调用campe()不更新事件.
我已经进行了调试,发现javafx实际上创建了一个新的事件实例,因此原件不变
public class EventManipulation extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Button button = new Button();
button.setOnMouseDragged(event -> {
System.out.println("dragged");
event.consume();
});
primaryStage.setScene(new Scene(new HBox(button), 400, 300));
primaryStage.show();
MouseEvent event = new MouseEvent(MouseEvent.MOUSE_DRAGGED, 0, 0, 0, 0, MouseButton.PRIMARY, 1, false, false,
false, false, false, false, false, false, false, false, null);
Event.fireEvent(button, event);
System.out.println(event.isConsumed()); // <== prints false
}
}
我已经发现了EventDispatchchain,但是我不知道如何使其工作.该按钮可以生成事件调度链,但需要一个开始…以下失败,因为我不知道如何创建初始尾巴.
Event result = button.buildEventDispatchChain(null).dispatchEvent(event);
System.out.println(result.isConsumed());
我为此提供的唯一解决方案是实现 eventdispatchchain 接口.相当最小的接口如下.不幸的是,Javafx使用的内置版本是在不可访问的软件包中 – com.sun.javafx.event.EventDispatchChainImpl
private class SimpleChain implements EventDispatchChain {
private Deque<EventDispatcher> dispatchers = new LinkedList<>();
@Override
public EventDispatchChain append(EventDispatcher eventDispatcher) {
dispatchers.addLast(eventDispatcher);
return this;
}
@Override
public EventDispatchChain prepend(EventDispatcher eventDispatcher) {
dispatchers.addFirst(eventDispatcher);
return this;
}
@Override
public Event dispatchEvent(Event event) {
if (dispatchers.peekFirst() != null) {
Event result = dispatchers.removeFirst().dispatchEvent(event, this);
if (result != null) {
return result;
} else {
event.consume();
return event;
}
} else {
return event;
}
}
}
当使用这样的使用时,这将产生预期结果
Event result = button.buildEventDispatchChain(new SimpleChain()).dispatchEvent(event);
System.out.println(result.isConsumed());
以上所述是小编给大家介绍的确定一个事件是否在JavaFX中被消费了,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/33969.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态