A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Eventos Marco Antonio, Arquiteto de Software – TJDF Novembro/2005

Apresentações semelhantes


Apresentação em tema: "Eventos Marco Antonio, Arquiteto de Software – TJDF Novembro/2005"— Transcrição da apresentação:

1 Eventos Marco Antonio, Arquiteto de Software – TJDF Novembro/2005
Java Básico Eventos Marco Antonio, Arquiteto de Software – TJDF Novembro/2005

2 Eventos Toda vez que um usuário clica num botão ou digita um caracter, acontece um evento. Todos os componentes de uma tela podem ser notificados sobre um evento. Existem classes especiais que tratam dos eventos. Essas classes usam um mecanismo parecido com herança, chamado de interface. Podemos dizer que uma classe é subclasse de outra. No caso de interface, a classe implementa uma interface. Por ora, basta saber que toda classe que implementa uma interface deve também implementar alguns métodos específicos.

3 Notificação de eventos
Por padrão, os componentes não respondem a eventos. Quando o programadador deseja essa funcionalidade, deve usar uma classe que 'ouve' os eventos do usuário. Além disso, deve fazer a ligação entre o componente e o evento. Um componente pode 'ouvir' um evento. Isso deve ser programado. Se esse componente deve 'ouvir' vários eventos, todos esses eventos devem ser programados.

4 Alguns eventos e suas interfaces
Usuário clica num botão – ActionListener Componente recebe o foco – FocusListener Usuário fecha uma tela - WindowListener

5 Métodos que recuperam o evento
Toda classe que implementa ActionListener DEVE ter o método: public void actionPerformed(ActionEvent e) { //o código da operação fica aqui } Quando o usuário clicar em algum componente que 'ouça' esse evento, esse método será executado, logo, coloque aqui o bloco de código que trata essa ação.

6 Manipulação de eventos
O objetivo é mostrar algumas possibilidades para tratamento de eventos, e não todas as possibilidades. O protótipo de tela e as regras de usabilidade devem estar prontas antes da implementação do código. Você irá implementar os eventos previstos nessas regras, nada além disso. Procure os eventos necessários para uma funcionalidade específica. Existe uma vasta documentação sobre o assunto. Você não precisará usar todos os eventos em uma tela.

7 Um pequeno exemplo – primeiro passo
package com.javabasico.eventos; import java.awt.event.*; import javax.swing.*; public class ExemploDeActionListener extends JFrame //JFrame transforma a classe numa tela implements ActionListener {//indica que essa classe 'ouve' o evento clique do mouse JButton btnGravar = new JButton("Gravar"); public ExemploDeActionListener() { getContentPane().add(btnGravar); Nesse bloco, dizemos que a classe pode 'ouvir' eventos do clique do mouse. Essa classe só 'ouve' cliques do mouse (ActionListener).

8 Segundo passo /** * addActionListener: indica que esse componente (btnGravar) responde a eventos do usuário * no parâmetro, diga qual a classe que trata esse evento * this: representa essa classe * ou seja, quem responde ao clique do botão gravar é a classe: ExemploDeActionListener * obs: poderia ser qualquer outra classe * */ btnGravar.addActionListener(this); setVisible(true); pack(); } Com isso, fazemos o botão btnGravar responder a eventos do clique do mouse. Obs: até aqui, apenas o btnGravar responde aos eventos.

9 Método onde o evento é tratado – terceiro passo
/** * Esse é o método executado quando algum usuário clica em qualquer componente desta tela. */ public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Alguém clicou no botão."); } Esse é o método (obrigatório) para tratar o evento de clique do mouse. Existem outros métodos para tratar outros eventos.

10 Mesmo evento, mais de um componente
package com.javabasico.eventos; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ExemploDeActionListener extends JFrame implements ActionListener { JButton btnGravar = new JButton("Gravar"); JButton btnFechar = new Jbutton("Fechar"); //nosso novo botão public ExemploDeActionListener() { setLayout(new FlowLayout()); //esse é nosso layout oficial para botões!!! getContentPane().add(btnGravar); getContentPane().add(btnFechar); //adiciona na tela btnGravar.addActionListener(this); setVisible(true); pack(); } public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Alguém clicou no botão. Qual deles?");

11 Registre o listener, sempre
Clique no botão 'Fechar'. Não aconteceu nada? Por que não? Lembre-se: existem 3 passos a seguir quando se deseja capturar eventos de um componente. A tela tem que implementar o ActionListener (ou qualquer outro listener, ou vários listeners, não importa). Você deve dizer ao componente que ele vai responder a eventos (addActionListener) e em qual classe estará esse gerenciamento. Implemente o método actionPerformed(ActionEvent e). Nesse método você pode colocar o tratamento do evento. Tente de novo. Por que não funcionou? Porque não registramos o listener para o novo botão: btnFechar.addActionListener(this);

12 Um evento, vários componentes
O mesmo evento pode atender a vários componentes. Você pode clicar com o mouse sobre vários botões diferentes, com ações diferentes. Mas o evento é o mesmo: clique de um mouse. Veja a assinatura do método abaixo: public void actionPerformed(ActionEvent e)‏ O parâmetro 'e' representa o evento em si, ou seja, o próprio clique do mouse sobre um componente. Um dos métodos desse parâmetro – getSource() - informa qual dos componentes da tela iniciou o evento. Veja a sintaxe: e.getSource() == btnGravar. Esse bloco retorna verdadeiro se o usuário clicou no botão gravar.

13 Outras possibilidades - getActionCommand()‏
Outra maneira de tratar essa situação é através do getActionCommand(). Esse método retorna a palavra associada ao componente. Exemplo: e.getActionCommand().equals("Fechar") retorna verdadeiro quando o usuário clica no botão fechar.

14 Eventos do teclado Outro evento muito comum é o tratamento dos caracteres digitados pelo usuário. A interface que trata desse evento é KeyListener. O KeyListener tem três métodos: digitação do caracter pressionamento de tecla usuário solta essa tecla. Cada um desses métodos é executado quando acontece uma ação específica.

15 Passos para usar o KeyListener
Para o tratamento de qualquer evento, os passos são sempre os mesmos. Tenha isso em mente. Primeiro passo: a classe deve implementar a interface que trata do evento. Segundo passo: informe ao componente que ele responde a um (ou vários) eventos e indique qual a classe que faz esse gerenciamento. Terceiro passo: implemente TODOS os métodos para esse evento. Essas informações estão na documentação do evento e seguem sempre o mesmo princípio, mudando apenas os nomes dos métodos.

16 Exemplo – primeiro passo
package com.javabasico.eventos; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ExemploDeActionListener extends JFrame //JFrame transforma a classe numa tela implements ActionListener //indica que essa classe 'ouve' o evento clique do mouse , KeyListener { //agora, essa classe também 'ouve' eventos do teclado JButton btnGravar = new JButton("Gravar"); JButton btnFechar = new JButton("Fechar"); JTextField txtNome = new JTextField(null, 20); public ExemploDeActionListener() { setLayout(new FlowLayout()); //esse é nosso layout oficial para botões!!! getContentPane().add(txtNome); getContentPane().add(btnGravar); getContentPane().add(btnFechar);

17 Segundo passo /** * addKeyListener: indica que esse componente (txtNome) responde a eventos do usuário * */ btnGravar.addActionListener(this); btnFechar.addActionListener(this); txtNome.addKeyListener(this); setVisible(true); pack(); } public void actionPerformed(ActionEvent e) { if (e.getSource() == btnGravar) { JOptionPane.showMessageDialog(null, "Alguém clicou no botão Gravar"); } else if (e.getSource() == btnFechar) { JOptionPane.showMessageDialog(null, "Alguém clicou no botão Fechar");

18 Terceiro passo /** * Os três métodos abaixo se referem ao keyListener
* keyTyped: o usuário digitou no teclado um caracter * keyPressed: quando o usuário pressiona uma tecla * keyReleased: quando o usuário solta aquela tecla */ public void keyTyped(KeyEvent e) { System.out.println("O usuário digitou: " + e.getKeyChar()); //esse é o caracter digitado pelo usuário } public void keyPressed(KeyEvent e) { System.out.println("O usuário pressionou: " + e.getKeyChar()); public void keyReleased(KeyEvent e) { System.out.println("O usuário soltou a tecla: " + e.getKeyChar());

19 Exercícios Crie os eventos de clique do mouse nos botões da tela de cadastro de aviões (finalidade, modelo, quantidade de assentos, autonomia). Crie os eventos de clique do mouse nos botões da tela para cadastro de médico (nome, especialidade, número do crm).

20 Um desafio: FocusListener
Pesquise o evento de troca de foco (FocusListener) no site da Sun. Crie uma classe TrocaFoco.java que tenha apenas um label, uma caixa de texto e um botão. Implemente o FocusListener e todos os métodos necessários para sua utilização. Para cada ação de troca de foco, imprima na tela que o foco mudou de componente. Pesquise mais um pouco e imprima também qual componente tem o foco atualmente. Dica: lembre-se que todos os eventos funcionam da mesma forma, seguem o mesmo princípio. Tenha em mente antes


Carregar ppt "Eventos Marco Antonio, Arquiteto de Software – TJDF Novembro/2005"

Apresentações semelhantes


Anúncios Google