Events
组件,无论是自定义的还是框架的一部分,支持事件处理。您可以添加事件监听器以捕获各种类型的事件,例如用户交互、状态变化或其他自定义事件。这些事件监听器可以用于针对事件触发特定的操作或行为。
在下面的示例中,使用三种支持的方法中的每一种来添加事件:lambda 表达式、匿名类和方法引用。
添加事件
添加事件监听器可以使用以下模式之一,其中:
-
myComponent是您希望附加事件监听器的组件。 -
addEventListener被替换为特定事件的方法。 -
EventListener被替换为所监听的事件类型。
myComponent.addEventListener(e -> {
//事件触发时执行
});
//或
myComponent.addEventListener(new ComponentEventListener<EventListener>() {
@Override
public void onComponentEvent(ComponentEvent e){
//事件触发时执行
}
});
//或
myComponent.addEventListener(this::eventMethod);
还添加了其他语法糖方法或别名,以允许通过使用 on 前缀后跟事件来替代添加事件,例如:
myComponent.onEvent(e -> {
//事件触发时执行
});
移除事件
当添加事件监听器时,将返回一个 ListenerRegistration 对象。这可以用于,除了其他目的,稍后移除事件。
//添加事件
ListenerRegistration listenerRegistration = myComponent.addEventListener(e -> {
//事件触发时执行
});
//移除事件
listenerRegistration.remove();
使用事件有效载荷
请注意,事件通常附带有效载荷,其中包含与事件相关的附加信息。您可以有效利用此有效载荷在事件处理程序中访问相关数据,而无需在客户端和服务器之间进行不必要的往返。这可以提高应用程序的性能。
以下代码片段查询组件以获取信息,就我们的演示而言,这已经包含在事件有效载荷中,代表低效的代码:
myComponent.addEventListener(e -> {
// 从组件访问数据
String componentText = e.getComponent().getText();
//或如果组件在函数的作用域内可访问
String componentText = myComponent.getText();
// 使用componentText执行其他操作。
});
相反,利用方法的有效载荷,这里为了示例包括组件的文本,可以避免往返:
myComponent.addEventListener(e -> {
// 从事件有效载荷访问数据
String componentText = e.getText();
// 使用componentText执行其他操作。
});
这种方法最大限度地减少了查询组件以获取信息的需要,因为数据在事件有效载荷中随时可用。通过遵循这种高效的事件处理实践,您可以增强组件的性能和响应能力。有关更多信息,您可以参考 客户端/服务器交互。
示例
以下演示展示了如何向一个 ButtonClickEvent 添加事件到一个 Button。这个 Button 还使用事件有效载荷中传递的信息在屏幕上显示信息。
显示代码
- ButtonEventView.java