vaadin-framework/documentation/application/application-events.asciidoc

82 lines
2.2 KiB
Plaintext

---
title: Handling Events with Listeners
order: 4
layout: page
---
[[application.events]]
= Handling Events with Listeners
Let us put into practice what we learned of event handling in
<<dummy/../../../framework/architecture/architecture-events#architecture.events,"Events
and Listeners">>. You can implement listener interfaces by directly using lambda expressions, method references or anonymous classes.
For example, in the following, we use a lambda expression to handle button click
events in the constructor:
[source, java]
----
layout.addComponent(new Button("Click Me!",
event -> event.getButton().setCaption("You made click!")));
----
Directing events to handler methods is easy with method references:
[source, java]
----
public class Buttons extends CustomComponent {
public Buttons() {
setCompositionRoot(new HorizontalLayout(
new Button("OK", this::ok),
new Button("Cancel", this::cancel)));
}
private void ok(ClickEvent event) {
event.getButton().setCaption ("OK!");
}
private void cancel(ClickEvent event) {
event.getButton().setCaption ("Not OK!");
}
}
----
[[application.events.anonymous]]
== Using Anonymous Classes
The following example defines an anonymous class that inherits the [classname]#Button.ClickListener# interface.
[source, java]
----
// Have a component that fires click events
Button button = new Button("Click Me!");
// Handle the events with an anonymous class
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
button.setCaption("You made me click!");
}
});
----
Most components allow passing a listener to the constructor.
Note that to be able to access the component from the anonymous listener class,
you must have a reference to the component that is declared before the
constructor is executed, for example as a member variable in the outer class.
You can also to get a reference to the component from the event object:
[source, java]
----
final Button button = new Button("Click It!",
new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
event.getButton().setCaption("Done!");
}
});
----