Como usar expressões lambda para manipular eventos em Java

Em Java, você pode usar expressões lambda para simplificar classes que implementam interfaces que têm apenas um método - ou seja, interfaces que se qualificam como interfaces funcionais. o ActionListener interface é uma interface deste tipo: Tem apenas um método, chamado Ação executada.

Quando você usa uma expressão Lambda, você não tem que implementar explicitamente o ActionListener interface. Em vez disso, você pode usar um código como o seguinte para adicionar um ouvinte de evento:

button1.addActionListener (e -> Button1Click ()) -

Em seguida, o método Button1Click será chamado sempre que o usuário clica button1.

Confira esta versão do ClickMe programa que usa uma expressão lambda para manipular o evento clique de botão.

import javax.swing. * -. importação java.awt.event * - ClickMeLambdaextends classe pública JFrame {void main (String [] args) public static {nova ClickMeLambda () -} private JButton button1-pública ClickMeLambda(){this.setSize(300,150)-this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)-this.setTitle("I'm Escuta ") - JPanel panel1 = new JPanel () - button1 = new JButton (" Click Me ") - button1.addActionListener (e -> Button1Click ()) -panel1.add (button1) -this.add (painel 1) - this.setVisible (true) -} private int clickCount = 0-public void Button1Click () {clickCount ++ - if (clickCount == 1) button1.setText ( "Eu tenho clicado!") - elsebutton1.setText ( "eu" ve foi clicado "+ + clickCount" tempos "!) -}}

Verificar as características directamente relacionados com a utilização da expressão Lambda:

 button1.addActionListener (e -> Button1Click ()) -

Esta declaração usa uma expressão Lambda para adicionar um ouvinte de ação para lidar com cliques de botão. A expressão Lambda simplesmente chama o método Button1Click sempre que o usuário clica no botão.

 private int clickCount = 0-

o clickCount variável é declarada como um campo de classe.

 Button1Click public void ()

o Button1Click método é chamado sempre que o usuário clica no botão. Este método altera o texto que é exibido na etiqueta do botão.

Note que você poderia ter eliminado o Button1Click método completamente e, em vez incluído seu código diretamente na expressão Lambda, como este:

 button1.addActionListener (e -> {clickCount ++ - if (clickCount == 1) button1.setText ( "Eu tenho clicado!") - elsebutton1.setText ( "Eu tenho clicado" + + "tempos!" ClickCount) -}) -

No entanto, este tipo de codificação pode rapidamente se tornar inviável. Assim, como regra, incluem o trabalho real feito por um manipulador de eventos em um método separado que é chamado através de uma expressão Lambda quando o manipulador de eventos está configurado.

menu