[Ajuda] Relacionar o botão a interface. AddActionListener(this)

Prezados, boa tarde.
Por favor me retirem a pequena dúvida abaixo.

button.addActionListener(this);

O que o parametro dessa linha significa?
Não intendi o significado do “this” ou o que esse método deseja ser informado como parametrô.

É correto afirmar que esse comando serve para criar uma “Relação” entre a Interface e o button, de modo que quando o botão efetuar um evento ative o método actionPerformed da Interface?

[code]import javax.swing.JButton;
import javax.swing.JFrame;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Principal implements ActionListener {
JButton button;
public static void main (String[] args) {
Principal Prin = new Principal();
Prin.Go();
}

public void Go(){
JFrame Moldura = new JFrame();
button = new JButton("Click-me!");


button.addActionListener(this);

Moldura.getContentPane().add(button);
Moldura.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Moldura.setVisible(true);
Moldura.setSize(300,300);

}

public void actionPerformed(ActionEvent event) {
	
	button.setText("O botao foi apertado!!!");
}  

}[/code]

Obrigado!

Esse método faz com que o botão, sempre que for clicado, chame o método actionPerformed do ActionListener que você passar por esse parâmetro.
No caso, o seu próprio JFrame é um actionListener (veja, você implementa a interface ActionListener e define um método actionPerformed).

Por isso, você chama “this”. É como se o frame dizendo “O actionlistener que vai receber o evento sou eu mesmo”.

Se você tiver vários botões, essa não é uma boa prática. O ideal seria criar uma inner class para cada botão:

button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { button.setText("O botao foi apertado!!!"); } });

Simples, seu objeto vai procurar o evento na propria classe, ou seja o parametro passado ai tem que ser um ActionListener, como sua classe implementou um ActionListener, logo ele vai procurar esse evento na propria classe.

Caso eu vá criar um botão em outra classe, e deseje após ele ser clickado que chame o método actionPerformed da classe Principal.
Eu teria de utilizar como parametrô a classe que herda a interface?
Algo assim: button.addActionListener(Principal); ?

Obrigado pela atenção de vocês!

acho melhor vc seguir a dica que o Vini te passou, e vc implementar o método addActionListener do botao.

Isso é possível. Tosco, mas possível.

Mas você pode compartilhar listeners quando vários botões fazem a mesma coisa. Por exemplo, você pode criar um actionListener só chamado “AbrirActionListener” e adiciona-lo ao botão abrir, ao menu abrir, ao popup menu abrir e a tecla CTRL+A.

Mesmo se houver uma pequena diferença, como no caso dos botões de uma calculadora (onde o funcionamento é praticamente o mesmo) é possível compartilhar o listener.

Só não é bom registrar o mesmo listener para vários botões se a ação dos botões for diferente. Aí vc será obrigado a fazer um for que testa pela origem do evento. O que torna o código uma salsicha pouco legível, de baixa performance e difícil de manter.