> Markdown version of [Handling Events with Listeners](https://vaadin.com/docs/v8/framework/application/application-events). Section index: [llms.txt](https://vaadin.com/docs/v8/framework/llms.txt)

# <a id="application.events"></a>Handling Events with Listeners

Let us put into practice what we learned of event handling in ["Events and Listeners"](https://vaadin.com/docs/v8/framework/architecture/architecture-events.md#architecture.events). 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:

```java
layout.addComponent(new Button("Click Me!",
    event -> event.getButton().setCaption("You made click!")));
```

Directing events to handler methods is easy with method references:

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

## <a id="application.events.anonymous"></a>Using Anonymous Classes

The following example defines an anonymous class that inherits the Button.ClickListener interface.

```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:

```java
final Button button = new Button("Click It!",
  new Button.ClickListener() {
    @Override
    public void buttonClick(ClickEvent event) {
        event.getButton().setCaption("Done!");
    }
  });
```
