123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- ---
- 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!");
- }
- });
- ----
|