Implementando “Listeners”

 

Os “listeners” do ambiente awt/swing podem ser implementados de várias maneiras. Um Listener é associado a um componente gráfico. O componente gráfico tipicamente tem métodos:

addxxxxxListener(xxxxxListener listener)

onde xxxxx é o tipo de listener (p.ex. action ou MouseMotion). Os listners são interfaces que prescrevem métodos que serão invocados pela MVJ quando o evento correspondente ocorrer. Alguns listners têm apenas um método como por exemplo o método actionPerformed nas interfaces ActionListeners, mas o MouseListener tem cinco métodos. O parâmetro de chamada dos métodos é do tipo Event relacionado ao evento correspondente.

.

No exemplo CounterGUI, o “listener era uma instância (countList) da classe:
public class CounterListener implements ActionListener …

countList é instanciada na instância counterPane da classe.CounterPanel

Um listener pode ser implementado por uma classe interna à definição da classe correspondente ao Panel

class InternalCounterListener implements ActionListener{

 

   //The constructor is empty

   public InternalCounterListener() {}

 

 public void actionPerformed(ActionEvent evt){

 String actionCommand = evt.getActionCommand(); ...

Um “listener” pode não ter uma classe especifica nem ser uma classe interna, ou seja usa-se a própria classe correspondente ao Panel:
class CounterInterfacePanel extends JPanel implements ActionListener

Um “listener” pode ainda corresponder a uma classe anônima:

upButton.addActionListener(

  new ActionListener(){

    public void actionPerformed (ActionEvent evt){

      increment();

    }

  }

);