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

PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
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
 
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
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 
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
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelGilber Rubim Rangel
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESEduardaReis50
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorEdvanirCosta
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
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
 
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
 
"É 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
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇJaineCarolaineLima
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 

Último (20)

PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
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...
 
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
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
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.
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim Rangel
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de Professor
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
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 ...
 
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...
 
"É 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...
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 

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)