No modelo de eventos suportado a partir da versão 1.1 de Java, um componente gráfico qualquer pode reconhecer alguma ação do usuário e a partir dela disparar um evento -- indicando, por exemplo, que o botão do mouse foi pressionado ou que um texto foi modificado -- que será capturado por um objeto registrado especificamente para registrar aquele tipo de evento ocorrido naquele componente.
O pacote
java.awt.event
define as diversas classes de eventos que podem ocorrer
através das interfaces gráficas. Eventos gráficos são objetos
derivados da classe
AWTEvent
, que por sua vez
são derivados de objetos de evento genéricos definidos pela classe
EventObject
.
Desta, eventos gráficos herdam o método getSource(), que permite
identificar o objeto que deu origem ao evento.
Eventos gráficos genéricos são especializados de acordo com o tipo de evento sob consideração -- por exemplo, pressionar um botão do mouse gera um MouseEvent. A mesma ação sobre um botão, no entanto, gera também um ActionEvent, enquanto que sobre o botão de minimizar na barra de título de um frame gera um WindowEvent.
Outros eventos de interesse definidos em java.awt.event incluem ItemEvent, indicando que um item de uma lista de opções foi selecionado, TextEvent, quando o conteúdo de um componente de texto foi modificado, e KeyEvent, quando alguma tecla foi pressionada no teclado.
A resposta que uma aplicação dá a qualquer evento que ocorre em algum componente gráfico é determinada por métodos específicos, registrados para responder a cada evento. O nome e a assinatura de cada um desses métodos é determinado por uma interface Java do tipo listener. Assim, para responder a um ActionEvent será utilizado o método definido na interface ActionListener; para responder a um WindowEvent, os métodos de WindowListener; e similarmente há interfaces ItemListener, TextListener e KeyListener. Os eventos do mouse são manipulados através de métodos especificados em duas interfaces, MouseListener (para ações sobre o mouse) e MouseMotionListener (para tratar movimentos realizados com o mouse).
Apesar de existir um grande número de eventos e possibilidades de resposta que a aplicação poderia dar a cada um deles, cada aplicação pode especificar apenas aqueles para os quais há interesse que sejam tratados. Para os eventos que o projetista da aplicação tem interesse de oferecer uma reação, ele deve definir classes manipuladoras de eventos (handlers), implementações de cada listener correspondente ao tipo de evento de interesse. Para interfaces listener que especificam diversos métodos, classes adaptadoras são definidas.
Uma vez que uma classe handler tenha sido criada para responder
aos eventos de um componente, é preciso associar esse componente ao
objeto handler. Para tanto, cada tipo de componente gráfico oferece
métodos na forma
addXXXListener(XXXListener l)
e
removeXXXListener(XXXListener l),
onde XXX está associado a algum evento do tipo
XXXEvent.
Por exemplo, para o componente
Window (e por herança para todas os componentes
derivados desse) são definidos os métodos
public void addWindowListener(WindowListener l) e
public void removeWindowListener(WindowListener l),
pois nesse
tipo de componente é possível ocorrer um WindowEvent.
© Ivan Luiz Marques Ricarte
DCA/FEEC/UNICAMP