poo. tratamento de eventos n eventos são a forma utilizada por java para adicionar interatividade...

31
POO

Upload: internet

Post on 21-Apr-2015

111 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

POO

Page 2: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Tratamento de Eventos

Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas.

Cada vez que o usuário pressionar um botão, digitar um caracter ou movimentar o mouse, por exemplo, ocorre um evento.

Page 3: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Sempre que o usuário utiliza o mouse, o teclado ou outro dispositivo de entrada qualquer, o sistema operacional se encarrega de converter essas ações em eventos.

Para cada evento que o sistema operacional é capaz de gerar, a aplicação deve prever um tratamento correspondente (“o que deve acontecer em resposta”).

Em Java a ação resposta padrão para qualquer evento é “não fazer nada”.

Page 4: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Para se ter uma ação em resposta, é necessário definir qual ou quais os componentes que serão encarregados de monitorar determinado evento, reagindo ao mesmo quando este ocorrer.

Dizemos que um componente capaz de perceber um evento é um componente capaz de “escutá-lo” ou “captá-lo”.

Em Java, dizemos que para um componente ser capaz de perceber um evento (e tratá-lo) é necessário associar um “listener” (algo como um “ouvinte”) ao componente.

Page 5: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Existem 4 componentes envolvidos no processo de tratamento de eventos:– Origem do evento: é um componente onde o

evento é gerado.• Ex.: um evento de clique do mouse pode ser

originado de um botão

– Evento: é um objeto que representa o evento gerado.

– Listener ou Receptor de Evento: é um objeto responsável por “ouvir” ou “captar” a ocorrência do evento.

– Handler: é um método do Listener responsável por executar as ações decorrentes do evento.

Page 6: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

OK

Origem do Evento

Listener

Handler

Notificação doEvento contendo o objeto que representa o Evento.

Page 7: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Como isso acontece?– Em primeiro lugar

• O listener tem que se registrar no objeto origem do evento, informando que tipo de evento ele está interessado em receber.

– Quando um evento ocorre• O listener é notificado que o evento ocorreu• O objeto origem notifica o listener através da

execução de um método específico, o qual recebe como parâmetro o objeto evento.

– Quando o listener recebe a notificação• Ele executa o método handler apropriado.

Page 8: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Como implementar um listener?– Vimos que o objeto origem de um evento

notifica o listener através da execução de um método específico.

• Cada tipo de evento possui métodos específicos para o seu tratamento.

– Que métodos são esses? Como a minha classe listener sabe quais métodos ela deve implementar?

– Utilizamos o conceito de interface.• Não confundir com interface gráfica, interface

de usuário...!

Page 9: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

– Dessa forma, um listener deve implementar um certa interface.

• Esta interface define os métodos que serão chamados quando os eventos ocorrerem.

– Ex.:• O evento que ocorre quando um botão é clicado

é o evento (objeto) ActionEvent.

• Todos os listeners que estão registrados para um botão, que esperam receber a notificação de um clique do botão, devem implementar o método actionPerformed(), que será chamado pelo botão quando for clicado.

• Este método está definido na interface ActionListener, logo o listener deverá implementar esta interface.

Page 10: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

public interface ActionListener{

void actionPerformed(ActionEvent e );

}

public class AcoesBotao implements ActionListener{

public void actionPerfomed(ActionEvent e){

//Aqui vem o código que é executado

//quando o botão for pressionado.

}

}

Page 11: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Como registrar um listener?– Os listeners devem ser registrados com o

objeto que gera o evento.• Ou seja, devemos indicar quem implementa as

ações para os eventos daquele componente.

– Cada tipo de evento tem um correspondente método para adicionar um listener.

– Ex.: para ActionEvent, o método é addActionListener().

JButton ok = new JButton (“Ok”);

AcoesBotao botaoListener = new AcoesBotao();

ok.addActionListener(botaoListener);

Page 12: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Exemploimport javax.swing.*;

import java.awt.event.*; //Para utilizar eventos

public class TestaEventos extends JFrame implements ActionListener {

//Esta classe é um listener de eventos de ação

JButton but;

JLabel texto;

JPanel painel;

int cont;

public TestaEventos() {

//Cria um frame com os componentes

super("TestaEventos");

cont = 0; //Contador do número de cliques no botão

but = new JButton("Clique aqui");

texto = new JLabel("Total de cliques: 0");

painel = new JPanel();

painel.setLayout(new BoxLayout(painel,BoxLayout.Y_AXIS));

painel.add(but);

painel.add(texto);

//Registra o listener para ações no botão

but.addActionListener(this); // A própria classe implementa as ações

this.getContentPane().add(painel);

}

Page 13: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

//Método exigido pela interface ActionListener

public void actionPerformed(ActionEvent e) {

cont++;

texto.setText("Total de cliques: "+cont);

}

public static void main(String[] args){

JFrame janela = new TestaEventos();

janela.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE);

janela.show();

}

}

Page 14: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Classe ActionEvent:– Método getSource()

• Retorna uma referência ao objeto que gerou o evento.

– Método getActionCommand()• Retorna informações sobre o objeto origem do

evento, por exemplo, se chamado em um botão, por default retornará o string do texto do botão.

• Retorna a string relacionada ao componente que foi atribuída pelo método setActionCommand(string).

– Podemos usar esses métodos para gerenciar eventos de mais do que um componente, com o mesmo listener.

Page 15: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Exemplo2:import javax.swing.*;

import java.awt.event.*;

public class TestaEventos2 extends JFrame implements ActionListener {

JButton but1;

JButton but2;

JPanel painel;

public TestaEventos2() {

...

but1.addActionListener(this);

but2.addActionListener(this);

...

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == but1) setTitle("Botão 1");

else if (e.getSource() == but2) setTitle("Botão 2");

repaint(); //Redesenha a janela após mudanças

}

...

}

Page 16: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

import javax.swing.*;

import java.awt.event.*;

public class TestaEventos2 extends JFrame implements ActionListener {

JButton but1;

JButton but2;

JPanel painel;

public TestaEventos2() {

...

but1.addActionListener(this);

but2.addActionListener(this);

...

}

public void actionPerformed(ActionEvent e) {

if (“Botão 1”.equals(e.getActionCommand())) setTitle("Botão 1");

else if (“Botão 2”.equals(e.getActionCommand())) setTitle("Botão 2");

repaint(); //Redesenha a janela após mudanças

}

...

}

Page 17: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

ActionEvent ActionListener actionPerformed()

FocusEvent FocusListener focusGained()

focusLost()

ItemEvent ItemListener itemStateChanged()

KeyEvent KeyListener keyPressed()

keyReleased()

keyTyped()

MouseEvent MouseListener mouseClicked()

mouseEntered()

mouseExited()

mousePressed()

mouseReleased()

TextEvent TextListener textValueChanged()

Exemplos de eventos, listeners e métodos:

Page 18: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

JButton ActionEvent botão “clicado”

JCheckbox ItemEvent item selecionado/desmarcado

JCheckboxMenuItem ItemEvent idem

JChoice ItemEvent idem

JList ActionEvent duplo-clique sobre o item

ItemEvent item selecionado/desmarcado

JMenuItem ActionEvent item selecionado/desmarcado

JScrollbar AdjustmentEvent scrollbar movimentada

JTextComponent TextEvent texto alterado

JTextField ActionEvent término da edição do texto

Eventos gerados por componentes (resumo):

Page 19: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Classes Adaptadoras:– Algumas das interfaces para a construção

dos listeners possuem mais de um método.

– Ao implementar o listener, precisamos definir todos os métodos, mesmo que só estejamos interessados só em um tipo de evento.

– Ex.:•MouseListener contém 5 métodos, e

devemos implementar todos eles, mesmo que só utilizemos o método mousePressed().

Page 20: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

– Para facilitar a implementação de listeners, Java fornece um conjunto de classes adaptadoras.

– As classes adaptadoras (adapter) são utilizadas para que o usuário tenha que implementar apenas os métodos que ira utilizar.

– Estas classes já implementam a interface de interesse, mas com todos os métodos com corpo vazio (sem código).

– Para programar o listener, herdamos da classe adapter e sobrescrevemos apenas os métodos que desejamos utilizar!

Page 21: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

– Algumas classes adaptadoras:• ComponentAdapter - ComponentListener• ContainerAdapter - ContainerListener• FocusAdapter - FocusListener• KeyAdapter - KeyListener• MouseAdapter - MouseListener• MouseMotionAdapter - MouseMotionListener• WindowAdapter - WindowListener• ActionListener não possui classe adaptadora

pois só possui um método.

Page 22: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

– Ex.: queremos um listener para o MouseListener.

import java.awt.event.*;

public class TestaEventos4Adaptador extends MouseAdapter{

public void mousePressed(MouseEvent e){

System.out.println("Botao pressionado");

}

public void mouseReleased(MouseEvent e){

System.out.println("Botao liberado");

}

}

Page 23: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Classes Anônimas Internas:– Uma vez criada a classe que implementa a

interface ou define uma subclasse de uma classe adaptadora, esta precisa ser instanciada e o objeto registrado como listener.

– É possível implementar e registrar o listener em um passo só.

– Basta implementar o listener como uma classe anônima (sem nome) interna (uma classe definida dentro de outra classe.

Page 24: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

– Observe que se forem utilizadas classes internas anônimas, não será possível tratar múltiplos componentes.

– Deveremos implementar uma classe anônima para cada componente.

– Não aconselhável para código de tratamento que seja muito longo.

Page 25: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Exemplo:

but.addActionListener(

new ActionListener() {

public void actionPerformed(ActionEvent e) {

cont++;

texto.setText("Total de cliques: "+cont);

}

});

janela.addWindowListener(

//código para executar quando a janela é fechada

new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0); // fecha e sai do programa

}

});

Page 26: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Exemplo Menu:

JMenu mFile = new JMenu("File");

JMenuItem miOpen = new JMenuItem("Open");

miOpen.addActionListener(

new ActionListener() {

public void actionPerformed(ActionEvent e) {

campo.setText(e.getActionCommand());

}

});

mFile.add(miOpen);

Page 27: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

– Algumas interfaces (java.awt.event.*):• ActionListener - eventos de ação, que são gerados por um

usuário agindo sobre um componente, como um clique em um botão.

• FocusListener - eventos de foco de teclado, que são gerados quando um componente, como um campo de texto, ganha ou perde o foco.

• ItemListener - eventos de item, que são gerados quando um item, como uma caixa de seleção, foi alterado.

• KeyListener - eventos de teclado, que ocorrem quando uma tecla é pressionada.

• MouseListener - eventos de mouse, que são gerados por cliques do mouse, um mouse entrando ou deixando uma área de um componente.

• MouseMotionListener - eventos de movimento de mouse, usados para controlar a movimentação do mouse sobre um componente.

• WindowListener - eventos de janela, que são gerados por uma janela ao ser maximizada, minimizada, movida ou fechada.

Page 28: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

WindowListener:– windowOpened(WindowEvent e) - Chamado a primeira vez que a

janela é aberta.– windowClosing(WindowEvent e) - Chamado quando o ícone de

fecha janela é selecionado.– windowClosed(WindowEvent e) - Chamado quando do fechamento

de uma janela.– windowActivated(WindowEvent e) - Chamado quando uma janela é

ativada (clicando sobre a mesma, por exemplo).– windowDeactivated(WindowEvent e) - Chamado quando uma janela

é desativada (clicando sobre uma outra janela, por exemplo).– windowIconified(WindowEvent e) - Chamado quando uma janela é

minimizada.– windowDeiconified(WindowEvent e) - Chamado quando uma janela

é restaurada a partir de um ícone.

Page 29: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

ActionListener:– actionPerformed - Chamado quando uma ação ocorre.

MouseListener:– mouseClicked(MouseEvent e) - Chamado quando o botão do

mouse é clicado (e solto) sobre um componente.– mousePressed(MouseEvent e) - Chamado quando o botão do

mouse é clicado sobre um componente.– mouseReleased(MouseEvent e) - Chamado quando o botão

do mouse é solto sobre um componente.– mouseEntered(MouseEvent e) - Chamado quando o mouse

“entra” na área de um componente.– mouseExited(MouseEvent e) - Chamado quando o mouse

deixa a área de um componente.

Page 30: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

MouseMotionListener:– mouseMoved(MouseEvent e) - Chamado quando o mouse

se movimenta com um componente (drag)– mouseDragged(MouseEvent e) - Chamado quando o

mouse se movimenta com um componente (drag) enquanto o botão do mouse está pressionado

KeyListener:– keyTyped(KeyEvent e) - Chamado quando uma tecla do

teclado é pressionada e solta– keyPressed(KeyEvent e) - Chamado quando uma tecla do

teclado é pressionada– keyReleased(KeyEvent e) - Chamado quando uma tecla do

teclado é solta

Page 31: POO. Tratamento de Eventos n Eventos são a forma utilizada por Java para adicionar interatividade em interfaces gráficas. n Cada vez que o usuário pressionar

Exercícios

1) Escreva um programa em Java que implemente uma calculadora simples (com operações de adição, subtração e multiplicação) para números inteiros.