1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
---
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!");
}
});
----
|