Eventos

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

Last modified: Sat Aug 12 11:06:05 Hora padrão leste Am. Sul 2000