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

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
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 
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
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxkellyneamaral
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
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
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
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
 
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
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxMauricioOliveira258223
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfHELENO FAVACHO
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
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
 
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
 

Último (20)

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ã
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
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
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docx
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
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
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.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.
 
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
 
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
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptx
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
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
 
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
 

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)