Você está na página 1de 27

Tutorial II: Tratando eventos em Java

Sumrio
Consideraes iniciais Elementos de uma aplicao Principais tipos de eventos em Java:
(WindowEvent, MouseEvent, ActionEvent, KeyEvent)

Capturando os eventos:
Definindo tratadores de eventos
(WindowAdapter, MouseMotionListener, MouseListener, ActionListener)

Adicionando tratadores de eventos em uma aplicao

Consideraes iniciais
Uma aplicao no constituda somente de sua interface. comum pensarmos que um programa ou aplicao constitudo somente de sua interface, j que isso o que vemos.

Porm, Como programadores, devemos saber que a interface somente um dos componentes da aplicao. Ela pode ser definida como sendo o meio pelo qual o programa estabelece comunicao com o usurio (informa e recebe dados e informaes).

Elementos de uma aplicao

Um programa (.class)

O programa o arquivo que contm as instrues (algoritmos) que quando executadas criam a aplicao

No dispositivo de armazenamento

Execuo

Evento

Aplicao
(programa em execuo na memria)

cria Na memria (em execuo)

Tratador de eventos
interface

evento

Principais tipos de eventos

Principais tipos de eventos


Labels
Panel TextFields
Labels no utilizam muitos eventos. Um dos nicos eventos que faz sentido deles gerar o evento que avisa que o mouse est passando por cima deles.

Frame
Button Em Java, cada componente de interface tem seu conjunto especfico de eventos.

Principais tipos de eventos


Labels
Panel TextFields
Com Panels outros eventos mais interessantes podem ser capturados:
Movimento do mouse; Ao de mouse; Teclado; Re-pintura/atualizao;

Frame
Button Em Java, cada componente de interface tem seu conjunto especfico de eventos.

Principais tipos de eventos


Labels
Panel TextFields

Frame
Button Em Java, cada componente de interface tem seu conjunto especfico de eventos.

Como os TextFields so caixas de texto que coletam informaes do usurio, faz sentido capturar deles os eventos de: Teclado; Alterao de seu contedo;
(ou at mesmo os eventos de movimento ou ao do mouse, em alguns casos)

Principais tipos de eventos


Labels
Panel TextFields

Frame
Button Em Java, cada componente de interface tem seu conjunto especfico de eventos.
Os Frames so parecidos com os Painis. Na verdade eles so painis com bordas! Logo, alm dos eventos de um painel, eles tambm geram eventos de janelas:

Movimento do mouse; Ao de mouse; Teclado; Re-pintura/atualizao; Manipulao de janela;

Principais tipos de eventos


Labels
Panel TextFields

Frame
Button Em Java, cada componente de interface tem seu conjunto especfico de eventos.
J os Buttons (botes), geram eventos de ao (pressionado, solto...) e de mouse (clicado, passando por cima...)

Principais tipos de eventos


Labels
Panel TextFields

Frame
Button Em Java, cada componente de interface tem seu conjunto especfico de eventos.

Logo, existem diferentes classes de eventos e tratadores de eventos, que devem ser utilizadas de acordo com os componentes e as necessidades que o programador possui.

Decorar todos os tipos e tratadores de eventos que o Java possui para cada objeto no faz sentido. Ao invs disso, vamos utilizar os tratadores de eventos principais.

Principais tipos de eventos


Eventos de janela (WindowEvents)
Gerados quando uma janela aberta, fechada, maximizada ou minimizada, entre outros.

Eventos de aes ocorridas em componentes (ActionEvents)


Gerados quando um componente sofre uma ao gerada pelo usurio (seleo de um elemento ou clique do mouse em um boto, por exemplo).

Eventos gerados pelo mouse (MouseEvents)


Pelo movimento do mouse; Por uma ao do mouse (boto clicado, pressionado ou solto);

Eventos gerados pelo teclado (KeyEvents).

Capturando eventos

Aplicao
(programa em execuo na memria) tratador de eventos

possui

interage

usurio

interface
Interao gera eventos

passado para

evento

Aplicao
(programa em execuo na memria) tratador de eventos de janela
WindowListener

possui

interage

usurio
WindowEvent

interface
MouseEvent

tratador de eventos de movimentos do mouse


MouseMotionListener

Interao gera eventos Porm, dependendo do tipo de evento, o tratador de eventos correspondente escolhido

tratador de eventos de aes do mouse


MouseListener

MouseEvent

evento

tratador de eventos de aes em componentes


ActionListener

ActionEvent

tratador de eventos de teclado


KeyListener

KeyEvent

Tipos de tratadores de eventos


Logo, o Java possui 5 tipos bsicos de tratadores de eventos que voc pode utilizar em seus programas:
WindowListener MouseListener MouseMotionListener ActionListener KeyListener - eventos de janelas - eventos de mouse (clique) - eventos de movimento de mouse - eventos de ao (geralmente gerados por botes) - eventos gerados pelo teclado

Para cada um desses tipos o Java oferece uma Classe ou Interface que voc pode utilizar em seus programas. Cada um deles possui uma srie diferente de mtodos, que tratam eventos especficos.

Tratando eventos
Os eventos no so tratados automaticamente. Para fazer isso voc deve seguir os seguintes passos:
Para cada componente de interface que voc criou (janela, boto, painel, caixa de texto...), decida quais so os eventos que voc quer tratar (cada componente
pode gerar um ou mais tipos de eventos);

Aps, defina uma classe adicional no seu programa que seja capaz de tratar cada um desses eventos. Essa classe, tratadora de eventos, deve ser uma classe filha de uma das classes tratadoras de eventos vistas anteriormente (WindowListener, MouseListener, MouseMotionListener, ActionListener ou
KeyListener);

Finalmente, crie objetos que sejam do tipo da classe tratadora de eventos que voc definiu e depois diga para cada componente, qual o objeto que trata seus eventos.

Exemplo
Para exemplificar, vamos criar um tratador de eventos de janela e adicion-lo janela da nossa aplicao:
O primeiro passo criar uma classe que defina o tratador de eventos que queremos. Isso feito atravs da adio de uma nova classe no final do programa fonte da nossa aplicao. Vamos ento criar uma classe chamada de, por exemplo, TratadorDeEventos, e vamos estende-la de WindowAdapter:
class TratadorDeEventos extends WindowAdapter // filha do tratador de eventos de janela

Depois, dentro dela, declare e implemente todos os mtodos que tratam os eventos que voc deseja capturar (neste caso, somente o evento de fechar janela):
{ // abre a classe public void windowClosing(WindowEvent e) // mtodo chamado quando o

{
System.exit(0); } } // Fecha a classe

// usurio clica o boto fechar


// Esse comando faz terminar o programa

Exemplo
Cada evento gerado chama um mtodo diferente (e correspondente) para tratlo. Todos os eventos de fechar janela, por exemplo, chamam o mesmo mtodo: windowClosing(). Isso significa que, para cada evento que voc quer tratar, voc deve descobrir qual o mtodo que o trata e implement-lo. Cada uma das classes-pai (tratadoras de eventos) possui seu conjunto de mtodos especfico. Clique em uma delas a seguir para descobrir quais so os mtodos que elas oferecem e quais eventos cada um deles trata: WindowListener ou WindowAdapter MouseListener ou MouseAdapter MouseMotionListener ou MouseMotionAdapter ActionListener

Obs: A diferena entre um Listener e um Adapter que o primeiro uma interface, e voc deve implementar (implements) todos os seus mtodos. J o segundo uma classe-pai pronta, e voc pode redefinir somente os mtodos para os eventos que lhe interessam

Exemplo
Depois de ter criado um tratador de eventos, falta dizer para o Java que os objetos criados a partir dessa classe que vo tratar os eventos. Para fazer isso, no programa principal crie um objeto do tipo TratadorDeEventos (que a classe definida por ns para tratar eventos de janela) e depois adicione esse tratador de eventos ao objeto janela de sua aplicao (no caso isso feito atravs do mtodo addWindowListener():
public class VImagem2 // Classe que define o programa principal { public static void main(String args[]) { Janela minhaJanela = new Janela();
// cria objeto tratador de eventos:

TratadorDeEventos tratador = new TratadorDeEventos();


// Adiciona o tratador de eventos janela:

minhaJanela.addWindowListener(tratador); minhaJanela.show();
} }

Mtodos de adio de tratadores de eventos


Para cada componente que voc deseja tratar eventos, voc deve criar e adicionar o tratador de eventos correspondente. Cada tipo de adaptador possui o seu mtodo de adio correspondente: addWindowListener(tratador_de_eventos) adiciona um tratador de eventos de janela; addActionListener(tratador_de_eventos) adiciona um tratador de eventos gerados por aes em componentes (geralmente utilizado em botes); addMouseListener(tratador_de_eventos) adiciona um tratador de eventos gerados pelo movimento do mouse; addMouseMotionListener(tratador_de_eventos) adiciona um tratador de eventos gerados por aes do mouse; addKeyListener(tratador_de_eventos) adiciona um tratador de eventos gerados pelo teclado;

Exemplo de fonte de aplicao que trata eventos:


public class Aplicao{ public static void main(String argumentos[]){ Janela jan = new Janela();

TratEventosJan trat = new TratEventosJan(); jan.addWindowListener(TratEventos()); jan.show(); } }

A primeira classe a que define a aplicao

class Janela extends Frame{ public Janela(){ setBackground(Color.blue); add(Center, new Label(Janela da aplicao)); } }

A segunda classe a que define a interface (o tipo de janela) da aplicao

class TratEventosJan extends WindowAdapter{ public void windowClosing(WindowEvent evento){ System.exit(0); } }

A ltima classe a que define o tratador de eventos de janela da aplicao

Exemplo de fonte de aplicao que trata eventos:


public class Aplicao{ public static void main(String argumentos[]){ Janela jan = new Janela();

A primeira classe responsvel por criar a janela da aplicao.

TratEventosJan trat = new TratEventosJan();

jan.addWindowListener(trat); jan.show();
} }

class Janela extends Frame{ public Janela(){ setBackground(Color.blue); add(Center, new Label(Janela da aplicao)); } }

class TratEventosJan extends WindowAdapter{ public void windowClosing(WindowEvent evento){ System.exit(0); }

A janela criada de acordo com a classe de janela definida!

Exemplo de fonte de aplicao que trata eventos:


public class Aplicao{ public static void main(String argumentos[]){ Janela jan = new Janela();

Em seguida, criado o objeto tratador de eventos.

TratEventosJan trat = new TratEventosJan(); jan.addWindowListener(trat); jan.show(); } }

class Janela extends Frame{ public Janela(){ setBackground(Color.blue); add(Center, new Label(Janela da aplicao)); } }

trat
(tratador de eventos)

class TratEventosJan extends WindowAdapter{

public void windowClosing(WindowEvent evento){


System.exit(0); } }

Ele criado de acordo com a classe definida para tratar eventos!

Exemplo de fonte de aplicao que trata eventos:


public class Aplicao{ public static void main(String argumentos[]){ Janela jan = new Janela();

Finalmente, o tratador de eventos adicionado janela:

TratEventosJan trat = new TratEventosJan(); jan.addWindowListener(trat); jan.show(); } }

class Janela extends Frame{ public Janela(){ setBackground(Color.blue); add(Center, new Label(Janela da aplicao)); } }

trat
(tratador de eventos)

class TratEventosJan extends WindowAdapter{

public void windowClosing(WindowEvent evento){


System.exit(0); } }

Assim, todo evento de janela gerado nesta janela capturado e tratado pelo objeto tratador de eventos.

Neste tutorial voc...


Aprendeu quais so os elementos de uma Aplicao: o programa, a janela e os tratadores de evento; Aprendeu quais so os principais tipos de eventos em Java: WindowEvent, MouseEvent, ActionEvent, KeyEvent; Aprendeu a definir classes e objetos que podem ser utilizados nas suas aplicaes a fim de capturar e tratar eventos.
Para ver um exemplo de aplicao que define e utiliza tratadores de eventos clique aqui!