Vamos lá, vamos partir de um programinha bem simples!
public class Teste extends JFrame implements ActionListener {
private JButton btn;
public Teste() {
JPanel p = new JPanel();
p.setLayout(new FlowLayout(FlowLayout.CENTER));
btn = new JButton("Clique");
btn.addActionListener(this);
p.add(btn);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(p, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == btn) JOptionPane.showMessageDialog(this, "Exemplo");
}
public static void main(String[] args) {
JFrame f = new Teste();
f.setVisible(true);
}
}
Neste exemplo, fiz um botão responder a um clique, exibindo uma caixa de mensagem com a palavra "Exemplo".
Para o botão responder ao clique adicionamos um "ouvinte de eventos".
Isso foi feito na linha btn.addActionListener(this);. Na verdade você pode ter vários objetos interessados nos eventos gerados por um determinado objeto...; assim você pode adicionar vários listeners (ouvintes) para um mesmo objeto.
Ocorre que esse objeto ouvinte tem que implementar a interface ActionListener (repare que a classe que criamos implementa essa interface). Sendo assim, a classe que implementa a interface ActionListener tem que implementar o método public void actionPerformed(ActionEvent e).
Quando o botão recebe o clique do mouse (ou um evento que o valha -- como exemplo, com o botão em foco, pressionar a barra de espaço) o controlador do botão notifica os ouvintes chamando o método actionPerformed() (ele sabe que o método existe porque os ouvintes tem que implementar a interface ActionListener).
Entendeu?! Se não me diz e eu tento de novo! :)