SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
GUI
Eventos
Mario Jorge Pereira
mariojp@gmail.com
Eventos
Eventos em Java são objetos
Subclasses de java.util.EventObject
Todo evento tem um objeto que é sua fonte
Object fonte = evento.getSource();
Métodos de ouvintes (listeners) que desejam tratar
eventos, recebem eventos como argumento
public void eventoOcorreu(EventObject evento) {
Object fonte = evento.getSource();
System.out.println("" +evento+ " em " +fonte);
}
Ouvintes precisam ser registrados nas fontes
Quando ocorre um evento, um método de todos os ouvintes
registrados é chamado e evento é passado como argumento
Fontes, Eventos, Ouvintes
Exemplo (1/3)
... (não esqueça dos imports)
public class Janela extends JFrame {
private JButton b1 = new JButton("Ligar");
private JButton b2 = new JButton("Desligar");
public Janela(String nome) {
super(nome);
this.setLayout(new GridLayout(2,1));
this.add(b1);
this.add(b2);
OuvinteBotao ouvinteBotao = new OuvinteBotao();
OuvinteMouse ouvinteMouse = new OuvinteMouse();
b1.addActionListener(ouvinteBotao);
b2.addActionListener(ouvinteBotao);
b2.addMouseListener(ouvinteMouse);
this.setSize(400,350); this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_C
LOSE);
}
... (crie um main para iniciar a janela)
Exemplo (2/3)
public class OuvinteBotao implements ActionListener{
public void actionPerformed(ActionEvent e) {
System.out.println("tarefa do botao");
}
}
Exemplo (3/3)
...
public class OuvinteMouse implements MouseListener {
public void mouseClicked(MouseEvent e) {
System.out.println("clicou o mouse!");
}
public void mousePressed(MouseEvent e) {
System.out.println("pressionou o mouse!");
}
public void mouseReleased(MouseEvent e) {
System.out.println("soltou o mouse!");
}
public void mouseEntered(MouseEvent e) {
System.out.println("mouse sobre a área!");
}
public void mouseExited(MouseEvent e) {
System.out.println("mouse saiu da área!");
}
}
Tipos de Eventos
Herdam da classe java.awt.event.AWTEvent, são
divididos em categorias (java.awt.event) e os
principais são:
ActionEvent (componentes de ação)
MouseEvent (componentes afetados pelo mouse)
ItemEvent (checkboxes radios e outros)
AdjustmentEvent (scrollbars)
TextEvent (componentes de texto)
WindowEvent (janelas)
FocusEvent (componentes em geral)
“...Event”
Listeners
Cada evento tem uma interface Listener correspondente
ActionEvent: ActionListener
MouseEvent: MouseListener e
MouseMotionListener
ItemEvent: ItemListener
AdjustmentEvent: AdjustmentListener
TextEvent: TextListener
WindowEvent: WindowListener
FocusEvent: FocusListener
“...Event”: “...Listener”
Fonte x Listener
Quando ocorre um evento todos os listeners registrados
são notificados
Para registrar um listener na fonte:
fonte.add<Listener>(referência_para_listener);
Exemplo:
JButton button = new JButton("Fonte");
ActionListener ouvinte1 = new OuvinteDoBotao();
MouseListener ouvinte2 = new
OuvinteDeCliques();
button.addActionListener(ouvinte1);
button.addMouseListener(ouvinte2);
Um objeto pode ser fonte e listener ao mesmo tempo
this.addWindowListener(this);
Implementando um Listener
Em uma classe declare implementar os listeners dos
eventos que voce vai escutar
public class MeuListener implements
ActionListener, ItemListener { ... }
Implemente os métodos da interface
public void actionPerformed(ActionEvent e) {...}
public void itemStateChanged(ItemEvent e) {...}
DICAS:
Todos os métodos são public void
Todos recebem o tipo de evento correspondente ao tipo do
listener como argumento
Listeners e métodos
Cada listener possui métodos que você deve implementar:
public void actionPerformed(ActionEvent evt)
Cada evento possui métodos que você pode chamar
dentro do listener para obter as informações desejadas:
String comando = actionEvent.getActionCommand();
Componente (fonte) possui métodos que você pode
chamar para obter informações sobre ele:
Object fonte = evento.getSource();
if (fonte instanceof JButton) {
JButton b = (JButton) fonte;
String label = b.getLabel();
}
Exemplo (1/3)
... (não esqueça dos imports)
public class Janela extends JFrame implements
WindowListener{
private JButton b1 = new JButton("Click!");
public Janela(String nome) {
super(nome);
this.setSize(400,300);
this.setLayout(null);
this.add(b1);
b1.setBounds(10, 100, 150, 50);
OuvinteMouse ouvinteMouse = new OuvinteMouse();
b1.addMouseListener(ouvinteMouse);
this.addWindowListener(this);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_C
LOSE);
this.setVisible(true);
}
Exemplo (2/3)
public void windowOpened(WindowEvent e) {
System.out.println("Janela aberta!"); }
public void windowClosing(WindowEvent e) {
System.out.println("Fechado Janela!"); }
public void windowClosed(WindowEvent e) {
System.out.println("Janela Fechada!"); }
public void windowIconified(WindowEvent e) {
System.out.println("Janela minimizada!"); }
public void windowDeiconified(WindowEvent e) {
System.out.println("Janela Restaurada!"); }
public void windowActivated(WindowEvent e) {
System.out.println("Janela Ativada!"); }
public void windowDeactivated(WindowEvent e) {
System.out.println("Janela Desativada!"); }
... (crie um main para iniciar a janela)
Exemplo (3/3)
...
public class OuvinteMouse implements MouseListener {
...
public void mouseEntered(MouseEvent e) {
System.out.println("mouse sobre o botao!");
Object fonte = e.getSource();
if (fonte instanceof JButton) {
JButton b = (JButton) fonte;
if (b.getLocation().getX() == 10){
b.setLocation(200, 100);
b.setText("Tente novamente!");
}else{
b.setLocation(10, 100);
b.setText("Click!");
}
}
}
...
}
Eventos, Listeners e Métodos
Adapters
Alguns listeners possuem uma classe Adapter
Implementa todos os métodos, sem instruções, ou seja,
implementação vazia: {}
Existem apenas para listeners que têm mais de um método
Úteis quando um Ouvinte precisa implementar apenas um
dentre vários métodos de um Listener
Pode sobrepor a implementação desejada do método do
Adapter e não precisa se preocupar com os outros
Não são úteis em ouvintes que já estendem outras classes
ou quando implementam diferentes listeners
Alguns Adapters:
MouseListener: MouseAdapter
WindowListener: WindowAdapter
“...Listener”: “...Adapter”
Tratamento de eventos com classes internas
É comum utilizar-se classes anônimas no tratamento de
eventos de uma GUI
Uma das grandes vantagens é a possibilidade de enxergar
os componentes que geralmente são atributos private
Exemplo:
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tf.setText(e.getActionCommand());
} } );
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tf.setText(e.getActionCommand());
} } ); ( ... )
Exercício
1. Implemente os eventos para a aplicação
Copiar deve acrescentar o texto do JTextField
noJEditorPane e limpar o JTextField
Limpar deve limpar o JTextField
Sair deve sair do programa
2. Implemente os botões como itens do menu
"Operações"
Use JMenuBar, JMenu e JMenuItem
3. Implemente um JToggleButton "desenhar/escrever"
que troque o JTextPane por um JCanvas e permita
rabiscar com o mouse (use MouseEvent)

Mais conteúdo relacionado

Mais de Mario Jorge Pereira (20)

Educacao e Inteligencia Artificial Generativa
Educacao e Inteligencia Artificial GenerativaEducacao e Inteligencia Artificial Generativa
Educacao e Inteligencia Artificial Generativa
 
Labs Jogos Java
Labs Jogos JavaLabs Jogos Java
Labs Jogos Java
 
Java www
Java wwwJava www
Java www
 
Html
HtmlHtml
Html
 
HTTP
HTTPHTTP
HTTP
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e Algoritmos
 
Guia rapido java v2
Guia rapido java v2Guia rapido java v2
Guia rapido java v2
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015 Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015
 
Java Nuvem Appengine
Java Nuvem AppengineJava Nuvem Appengine
Java Nuvem Appengine
 
Mini curso Android
Mini curso AndroidMini curso Android
Mini curso Android
 
Java Server Faces
Java Server FacesJava Server Faces
Java Server Faces
 
Minicurso Android
Minicurso AndroidMinicurso Android
Minicurso Android
 
Android, por onde começar?
Android, por onde começar?Android, por onde começar?
Android, por onde começar?
 
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
 
Android e Cloud Computing
Android e Cloud ComputingAndroid e Cloud Computing
Android e Cloud Computing
 
Threads
ThreadsThreads
Threads
 
RMI (Remote Method Invocation)
RMI (Remote Method Invocation) RMI (Remote Method Invocation)
RMI (Remote Method Invocation)
 
Socket
SocketSocket
Socket
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 

Último

Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaronaldojacademico
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....LuizHenriquedeAlmeid6
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamentalAntônia marta Silvestre da Silva
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
A poesia - Definições e Característicass
A poesia - Definições e CaracterísticassA poesia - Definições e Característicass
A poesia - Definições e CaracterísticassAugusto Costa
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptxPLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptxSamiraMiresVieiradeM
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficasprofcamilamanz
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memorialgrecchi
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdflucassilva721057
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 

Último (20)

Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riqueza
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
A poesia - Definições e Característicass
A poesia - Definições e CaracterísticassA poesia - Definições e Característicass
A poesia - Definições e Característicass
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptxPLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficas
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memoria
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdf
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 

Java eventos e listeners

  • 2. Eventos Eventos em Java são objetos Subclasses de java.util.EventObject Todo evento tem um objeto que é sua fonte Object fonte = evento.getSource(); Métodos de ouvintes (listeners) que desejam tratar eventos, recebem eventos como argumento public void eventoOcorreu(EventObject evento) { Object fonte = evento.getSource(); System.out.println("" +evento+ " em " +fonte); } Ouvintes precisam ser registrados nas fontes Quando ocorre um evento, um método de todos os ouvintes registrados é chamado e evento é passado como argumento
  • 4. Exemplo (1/3) ... (não esqueça dos imports) public class Janela extends JFrame { private JButton b1 = new JButton("Ligar"); private JButton b2 = new JButton("Desligar"); public Janela(String nome) { super(nome); this.setLayout(new GridLayout(2,1)); this.add(b1); this.add(b2); OuvinteBotao ouvinteBotao = new OuvinteBotao(); OuvinteMouse ouvinteMouse = new OuvinteMouse(); b1.addActionListener(ouvinteBotao); b2.addActionListener(ouvinteBotao); b2.addMouseListener(ouvinteMouse); this.setSize(400,350); this.setVisible(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_C LOSE); } ... (crie um main para iniciar a janela)
  • 5. Exemplo (2/3) public class OuvinteBotao implements ActionListener{ public void actionPerformed(ActionEvent e) { System.out.println("tarefa do botao"); } }
  • 6. Exemplo (3/3) ... public class OuvinteMouse implements MouseListener { public void mouseClicked(MouseEvent e) { System.out.println("clicou o mouse!"); } public void mousePressed(MouseEvent e) { System.out.println("pressionou o mouse!"); } public void mouseReleased(MouseEvent e) { System.out.println("soltou o mouse!"); } public void mouseEntered(MouseEvent e) { System.out.println("mouse sobre a área!"); } public void mouseExited(MouseEvent e) { System.out.println("mouse saiu da área!"); } }
  • 7. Tipos de Eventos Herdam da classe java.awt.event.AWTEvent, são divididos em categorias (java.awt.event) e os principais são: ActionEvent (componentes de ação) MouseEvent (componentes afetados pelo mouse) ItemEvent (checkboxes radios e outros) AdjustmentEvent (scrollbars) TextEvent (componentes de texto) WindowEvent (janelas) FocusEvent (componentes em geral) “...Event”
  • 8. Listeners Cada evento tem uma interface Listener correspondente ActionEvent: ActionListener MouseEvent: MouseListener e MouseMotionListener ItemEvent: ItemListener AdjustmentEvent: AdjustmentListener TextEvent: TextListener WindowEvent: WindowListener FocusEvent: FocusListener “...Event”: “...Listener”
  • 9. Fonte x Listener Quando ocorre um evento todos os listeners registrados são notificados Para registrar um listener na fonte: fonte.add<Listener>(referência_para_listener); Exemplo: JButton button = new JButton("Fonte"); ActionListener ouvinte1 = new OuvinteDoBotao(); MouseListener ouvinte2 = new OuvinteDeCliques(); button.addActionListener(ouvinte1); button.addMouseListener(ouvinte2); Um objeto pode ser fonte e listener ao mesmo tempo this.addWindowListener(this);
  • 10. Implementando um Listener Em uma classe declare implementar os listeners dos eventos que voce vai escutar public class MeuListener implements ActionListener, ItemListener { ... } Implemente os métodos da interface public void actionPerformed(ActionEvent e) {...} public void itemStateChanged(ItemEvent e) {...} DICAS: Todos os métodos são public void Todos recebem o tipo de evento correspondente ao tipo do listener como argumento
  • 11. Listeners e métodos Cada listener possui métodos que você deve implementar: public void actionPerformed(ActionEvent evt) Cada evento possui métodos que você pode chamar dentro do listener para obter as informações desejadas: String comando = actionEvent.getActionCommand(); Componente (fonte) possui métodos que você pode chamar para obter informações sobre ele: Object fonte = evento.getSource(); if (fonte instanceof JButton) { JButton b = (JButton) fonte; String label = b.getLabel(); }
  • 12. Exemplo (1/3) ... (não esqueça dos imports) public class Janela extends JFrame implements WindowListener{ private JButton b1 = new JButton("Click!"); public Janela(String nome) { super(nome); this.setSize(400,300); this.setLayout(null); this.add(b1); b1.setBounds(10, 100, 150, 50); OuvinteMouse ouvinteMouse = new OuvinteMouse(); b1.addMouseListener(ouvinteMouse); this.addWindowListener(this); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_C LOSE); this.setVisible(true); }
  • 13. Exemplo (2/3) public void windowOpened(WindowEvent e) { System.out.println("Janela aberta!"); } public void windowClosing(WindowEvent e) { System.out.println("Fechado Janela!"); } public void windowClosed(WindowEvent e) { System.out.println("Janela Fechada!"); } public void windowIconified(WindowEvent e) { System.out.println("Janela minimizada!"); } public void windowDeiconified(WindowEvent e) { System.out.println("Janela Restaurada!"); } public void windowActivated(WindowEvent e) { System.out.println("Janela Ativada!"); } public void windowDeactivated(WindowEvent e) { System.out.println("Janela Desativada!"); } ... (crie um main para iniciar a janela)
  • 14. Exemplo (3/3) ... public class OuvinteMouse implements MouseListener { ... public void mouseEntered(MouseEvent e) { System.out.println("mouse sobre o botao!"); Object fonte = e.getSource(); if (fonte instanceof JButton) { JButton b = (JButton) fonte; if (b.getLocation().getX() == 10){ b.setLocation(200, 100); b.setText("Tente novamente!"); }else{ b.setLocation(10, 100); b.setText("Click!"); } } } ... }
  • 16. Adapters Alguns listeners possuem uma classe Adapter Implementa todos os métodos, sem instruções, ou seja, implementação vazia: {} Existem apenas para listeners que têm mais de um método Úteis quando um Ouvinte precisa implementar apenas um dentre vários métodos de um Listener Pode sobrepor a implementação desejada do método do Adapter e não precisa se preocupar com os outros Não são úteis em ouvintes que já estendem outras classes ou quando implementam diferentes listeners Alguns Adapters: MouseListener: MouseAdapter WindowListener: WindowAdapter “...Listener”: “...Adapter”
  • 17. Tratamento de eventos com classes internas É comum utilizar-se classes anônimas no tratamento de eventos de uma GUI Uma das grandes vantagens é a possibilidade de enxergar os componentes que geralmente são atributos private Exemplo: b1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { tf.setText(e.getActionCommand()); } } ); b2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { tf.setText(e.getActionCommand()); } } ); ( ... )
  • 18. Exercício 1. Implemente os eventos para a aplicação Copiar deve acrescentar o texto do JTextField noJEditorPane e limpar o JTextField Limpar deve limpar o JTextField Sair deve sair do programa 2. Implemente os botões como itens do menu "Operações" Use JMenuBar, JMenu e JMenuItem 3. Implemente um JToggleButton "desenhar/escrever" que troque o JTextPane por um JCanvas e permita rabiscar com o mouse (use MouseEvent)