tratamento de eventos - inf.pucrs.brmichael/aulas/algo_progii/index_files/eventos.pdf · capturando...
TRANSCRIPT
![Page 1: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/1.jpg)
1
▐Introdução▐Interfaces (revisão)▐Delegação de eventos▐Tratamento de eventos▐Classes Adaptadoras▐Capturando Eventos nos Componentes Swing
Tratamento de Eventos Profa. Isabel Harb Manssour e Márcia Cristina Moraes(Material adaptado das aulas dos Profs: Luciana Nedel, Bernardo Copstein e Júlio P. Machado)
Introdução▐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 caractere ou movimentar o mouse, por exemplo, ocorre um evento.
![Page 2: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/2.jpg)
2
Introdução▐Neste modelo de programação, uma vez criados os componentes da interface (ex: janela), o sistema operacional se encarrega de monitorar as ações do usuário.▐Não existe a necessidade de prever, na aplicação, um laço aguardando uma entrada via mouse ou teclado. Essa responsabilidade passa a ser do sistema operacional.
Introdução▐Programas baseados em janelas X Programas baseados na console:■ Programa com saída para a console: o usuário dispara a execução e o
próprio código determina a seqüência dos eventos, onde geralmente tudo é pré-determinado.■ Aplicação baseada em janelas (ou uma applet): a operação do programa é conduzida pela GUI; a seleção de botões ou ícones usando o mouse ou o teclado causa ações particulares.
![Page 3: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/3.jpg)
3
Introdução▐Programação dirigida por eventos:
Sistema Operacional
Biblioteca de classes Java
método
teclado, mouse
método métodométodo
Eventos
▐Introdução▐Interfaces (revisão)Interfaces (revisão)▐Delegação de eventos▐Tratamento de eventos▐Classes Adaptadoras▐Capturando Eventos nos Componentes Swing
Tratamento de Eventos Profa. Isabel Harb Manssour(Material adaptado das aulas dos Profs: Luciana Nedel, Bernardo Copstein e Júlio P. Machado)
![Page 4: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/4.jpg)
4
Interfaces (revisão)▐Uma interface é, essencialmente, uma coleção de constantes e métodos abstratos▐Para fazer uso de uma interface■ Implementa-se a mesma em uma classe, isto é,
declara-se que a classe implementa a interface e escreve-se o código para cada um dos métodos declarados na interface
Interfaces (revisão)▐Métodos em uma interface são sempre públicos e abstratos■ public abstract▐Constantes em uma interface são sempre públicas, estáticas e final■ public static final
![Page 5: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/5.jpg)
5
Interfaces (revisão)▐Em suma, uma interface lista um conjunto de métodos que outras classes podem implementar▐Uma classe que implementa uma interface deve implementar TODOS os métodos listados▐Interface não é uma classe abstrata!!▐Não confundir com interface gráfica, ou interface de usuário!
Interfaces (revisão)▐Exemplo
public interface Dirigível {
int MAXTURN = 45; //é public static final por default
//é public abstract por default
void viraEsquerda(int graus);
//é public abstract por default
void viraDireita(int graus);
}
public class Carro implements Dirigível {
//Carro deve obrigatoriamente implementar os
//métodos viraEsquerda e viraDireita
public void viraDireita(int graus){...}
public void viraEsquerda(int graus){...}
}
![Page 6: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/6.jpg)
6
▐Introdução▐Interfaces (revisão)▐Delegação de eventosDelegação de eventos▐Tratamento de eventos▐Classes Adaptadoras▐Capturando Eventos nos Componentes Swing
Tratamento de Eventos Profa. Isabel Harb Manssour(Material adaptado das aulas dos Profs: Luciana Nedel, Bernardo Copstein e Júlio P. Machado)
Delegação de Eventos▐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 7: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/7.jpg)
7
Delegação de Eventos▐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”. ▐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.
Delegação de Eventos▐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 8: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/8.jpg)
8
Delegação de Eventos
OK
Origem do Evento
Listener
Handler
Notificação doEvento
Delegação de Eventos▐Como isso acontece?■ Primeiro
� 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
� Executa o método handler apropriado
![Page 9: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/9.jpg)
9
▐Introdução▐Interfaces (revisão)▐Delegação de eventos▐Tratamento de eventosTratamento de eventos▐Classes Adaptadoras▐Capturando Eventos nos Componentes Swing
Tratamento de Eventos Profa. Isabel Harb Manssour(Material adaptado das aulas dos Profs: Luciana Nedel, Bernardo Copstein e Júlio P. Machado)
Tratamento de Eventos▐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.▐Para saber que métodos são esses e como a classe listener deve implementá-los utilizamos o conceito de interface.
![Page 10: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/10.jpg)
10
Tratamento de Eventos▐Como implementar um listener?■ Um listener deve implementar um interface que 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 e 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.
Tratamento de Eventos▐Exemplo: usuário clica em um botão de uma interface gráfica.■ Origem do evento: botão (evento gerado a partir do clique do
mouse é associado com o objeto JButton )■ Notificação do evento: criação de uma instância de ActionEvent� Objeto que representa e identifica este evento� Contém informações sobre o evento e sua fonte■ Objeto ActionEvent será passado para um objeto listener
(“destino” de um evento) previamente registrado� Pode “escutar” eventos de um objeto particular (um botão, por
exemplo) ou de um grupo de diferentes objetos (itens de um menu)
![Page 11: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/11.jpg)
11
Tratamento de Eventos▐Exemplo
public interface ActionListener{
void actionPerformed( ActionEvent e);}
public class MeuListener implements ActionListener{
public void actionPerfomed(ActionEvent e) {//Aqui vem o código que é executado//quando o botão for pressionado.
}}
Tratamento de Eventos▐Resumindo:■ É possível fazer objetos de qualquer classe “escutar” objetos,
simplesmente fazendo a classe em questão implementar uma interface listener▐
Existe uma variedade de interfaces listener(java.awt.event.* e javax.swing.event.* ):■ ActionListener, ■ WindowListener, ■ MouseListener, ■ MouseMotionListener, ■ KeyListener, ■ ListSelectionListener,■ …
![Page 12: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/12.jpg)
12
Tratamento de Eventos (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.
Tratamento de Eventos▐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 13: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/13.jpg)
13
Tratamento de Eventos▐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
Tratamento de Eventos▐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 14: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/14.jpg)
14
Tratamento de Eventos▐Como registrar um listener?■ Os listeners devem ser registrados com o objeto que gera
o evento.■ Cada tipo de evento tem um método correspondente para adicionar um listener.■ Exemplo: para ActionEvent , o método é addActionListener()
JButton zap = new JButton (“Zap”);MeuListener objlistener = new MeuListener();zap.addActionListener(objlistener);
Tratamento de Eventos
import javax.swing.*;import java.awt.event.*; //Para utilizar eventos
//Esta classe é um listener de eventospublic class TestaEventos
extends JFrame implements implements ActionListenerActionListener{
private JButton but;private JLabel texto;private JPanel painel;private int cont;
…
▐Exemplo:
![Page 15: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/15.jpg)
15
Tratamento de Eventos
…// Construtorpublic TestaEventos() {
//Cria um frame com os componentessuper("TestaEventos");setDefaultCloseOperation(WindowConstants.DISPOSE_ON _CLOSE);cont = 0; //Contador do número de cliques no botãobut = new JButton("Clique aqui");texto = new JLabel("Total de cliques: 0");painel = new JPanel();painel.setLayout(new BoxLayout(painel,BoxLayout.Y_AX IS));painel.add(but);painel.add(texto);//Registra o listener para ações no botãobut. addActionListeneraddActionListener(this);getContentPane().add(painel);pack();
}…
▐Exemplo:
Tratamento de Eventos
…//Método exigido pela interface ActionListenerpublic void actionPerformedactionPerformed ( ActionEventActionEvent e) {
cont++;texto.setText("Total de cliques: "+cont);
}
public static void main(String[] args){JFrame janela = new TestaEventos();janela.setVisible(true);
}}
▐Exemplo:
![Page 16: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/16.jpg)
16
Tratamento de Eventos▐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.■ Podemos usar esses métodos para gerenciar eventos de
mais do que um componente, com o mesmo listener.
Tratamento de Eventos
import javax.swing.*;import java.awt.event.*;public class TestaEventos2 extends JFrame
implements ActionListener {private JButton but1,but2;private 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
}...
}
▐Exemplo:
![Page 17: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/17.jpg)
17
Tratamento de Eventos▐Eventos relacionados a AWT são subclasses de java.awt.AWTEvent▐Objetos AWTEvents tem métodos para■ getSource() - devolver o objeto originador do evento■ getID() - devolver o tipo do evento■ getX(),getY() - devolver a posição de clique do
mouse
Tratamento de Eventos
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: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/18.jpg)
18
Tratamento de Eventos
JButton ActionEvent botão “clicado”JCheckbox ItemEvent item
selecionado/desmarcadoJCheckboxMenuItem ItemEvent item
selecionado/desmarcadoJList ListDataEvent seleção é alteradaJMenuItem ActionEvent item
selecionado/desmarcadoJScrollbar AdjustmentEvent scrollbar
▐Eventos gerados por componentes (resumo)
Tratamento de Eventos
addKeyListener(KeyListener)
keyPressedkeyReleased
keyTyped(KeyEvent)
KeyListenerCapturar teclasdigitadas
addItemListener(ItemListener)
itemStateChanged(ItemEvent)
ItemListenerJCheckBox, JCheckboxMenuItem
Choice, JLabel
addActionListener(ActionListener)
actionPerformed(ActionEvent)
ActionListenerJButton, JLabel, JList, JMenu, JTexField
Método do Componente
MétodosInterfaceCategoria
![Page 19: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/19.jpg)
19
Tratamento de Eventos
addMouseMotionListener
(MouseMotionListener)
mouseDraggedmouseMoved(MouseEvent)
MouseMotionListener
Tratar eventos de movimentação do
mouse
addMouseListener(MouseListener)
mousePressedmouseReleasedmouseEnteredmouseExitedmouseClicked(MouseEvent)
MouseListenerTratar eventos de pressionar o mouse
Método do Componente
MétodosInterfaceCategoria
Tratamento de Eventos
addWindowListener(WindowListener)
windowClosingwindowOpenedwindowIconified
windowDeiconifiedwindowClosed
windowActivatedwindowDeactivated
(WindowEvent)
WindowListenerJFrames
addTextListener(TextListener)
textValueChanged(TextEvent)
TextListenerJTextAreaJTextField
Método do Componente
MétodosInterfaceCategoria
![Page 20: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/20.jpg)
20
▐Introdução▐Interfaces (revisão)▐Delegação de eventos▐Tratamento de eventos▐Classes AdaptadorasClasses Adaptadoras▐Capturando Eventos nos Componentes Swing
Tratamento de Eventos Profa. Isabel Harb Manssour(Material adaptado das aulas dos Profs: Luciana Nedel, Bernardo Copstein e Júlio P. Machado)
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 21: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/21.jpg)
21
Classes Adaptadoras▐Para facilitar a implementação de classes tratadoras de eventos, Java define classes adaptadoras (adapters)▐Classes adaptadoras■ Implementam as interfaces definindo métodos “vazios”
(sem código) para cada um dos seus métodos■ Assim, o programador não precisa implementar toda a interface, mas crias uma subclasse de adapter
redefinindo apenas os métodos que irá utilizar
Classes Adaptadoras▐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: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/22.jpg)
22
Classes Adaptadoras
import java.awt.event.*;
public class TesteAdaptadorMouse extends MouseAdapte r{
public void mousePressed(MouseEvent e){
System.out.println("Botao pressionado");}
public void mouseReleased(MouseEvent e){
System.out.println("Botao liberado");}
}
▐Exemplo:
Classes Adaptadoras▐Uma vez criada a classe que implementa a interface ou define uma subclasse de adapter, esta precisa ser instanciada e o objeto registrado como listener▐Entretanto, é 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 23: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/23.jpg)
23
Classes Adaptadoras▐Classe anônima interna ■ Facilidade de Java (a partir do JDK 1.1)■ São classes definidas dentro de outras classes e que
podem ser criadas para tratamento de eventos■ Neste caso, a classe interna se chama inner class e a classe hospedeira se chama top-level class
Classes Adaptadoras
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
}
} ) ;
▐Exemplos:
![Page 24: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/24.jpg)
24
Classes Adaptadoras
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);
▐Exemplos:
Classes Adaptadoras▐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: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/25.jpg)
25
▐Introdução▐Interfaces (revisão)▐Delegação de eventos▐Tratamento de eventos▐Classes Adaptadoras▐Capturando Eventos nos Componentes SwingCapturando Eventos nos Componentes Swing
Tratamento de Eventos Profa. Isabel Harb Manssour(Material adaptado das aulas dos Profs: Luciana Nedel, Bernardo Copstein e Júlio P. Machado)
Capturando Eventos nos Componentes Swing▐JButton▐JTextField e JTextArea▐JCheckBox▐JRadioButton▐JList
![Page 26: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/26.jpg)
26
JButton▐Construtores:■ JButton ()■ JButton (String) - um botão com texto■ JButton (Icon) - um botão com imagem■ JButton (String, Icon) - um botão com texto e
imagem
JButton
import javax.swing.*; import java.awt.event.*; im port java.awt.*;public class TesteJButton extends JFrame implements A ctionListener
{ private Container c; private JButton b1, b2; private JPanel p;public TesteJButton() {
super("Teste de Eventos de Botões");b1 = new JButton("Botão 1"); b2 = new JButton("Botão 2");b1.addActionListener(this); b2.addActionListener(this);p = new JPanel(new FlowLayout(FlowLayout.LEFT));p.add(b1); p.add(b2);c = this.getContentPane(); c.add(p);
}public void actionPerformed(ActionEvent e){
String str = e.getActionCommand();if(str.equals("Botão 1")) setTitle("Botão 1");
else if(str.equals("Botão 2")) setTitle("Botão 2");}
}
![Page 27: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/27.jpg)
27
JTextField▐JTextField: entrada de uma única linha▐Construtores
� JTextField()� JTextField(int tamanho) - um campo de texto com a
largura especificada� JTextField(String frase) - um campo de texto com
preenchimento padrão� JTextField(String frase, int tamanho) - campo de texto
com texto padrão e largura especificados
JTextArea▐JTextArea: texto de múltiplas linhas▐Construtores:■ JTextArea()■ JTextArea(int linhas, int colunas) - uma área de
texto com o número especificado de linhas e colunas■ JTextArea(String texto) - uma área de texto já preenchida com valor padrão■ JTextArea(String texto, int linhas, int colunas) - uma área de texto com texto padrão, linhas e colunas especificados
![Page 28: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/28.jpg)
28
JTextField e JTextArea
import javax.swing.*;import java.awt.event.*;import java.awt.*;public class TesteJText extends JFrame{
private Container c;private JTextArea ta;private JTextField tf;private JPanel p;private JScrollPane sp;private JButton bt;
JTextField e JTextAreapublic TesteJText() {
super("Teste JTextArea e JTextField");bt = new JButton("Insere linha:");tf = new JTextField(10);p = new JPanel();p.add(bt);bt.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e)
{String f = tf.getText();ta.append(f);
}});p.add(tf);
ta = new JTextArea(8, 40);sp = new JScrollPane(ta);c = getContentPane();c.add(p, "South"); c.add(sp, "Center");
}public static void main(String[] args){
TesteJText janela = new TesteJText();janela.setDefaultCloseOperation(WindowConstants.DIS POSE_ON_CLOSE); janela.pack(); janela.setVisible(true);
}}
![Page 29: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/29.jpg)
29
JCheckBox▐Construtores:■ JCheckBox()■ JCheckBox(String) - um botão de seleção com texto especificado■ JCheckBox(String, boolean) - um botão de seleção com o texto
especificado, selecionado por padrão se argumento for true■ JCheckBox(Icon)■ JCheckBox(Icon, boolean)■ JCheckBox(String, Icon)■ JCheckBox(String, Icon, boolean)▐Para indicar uma opção como escolhida:
� botaoSelecao.setSelected(true);▐Para verificar o estado de um botão de seleção:
� status = botaoSelecao.isSelected();
JRadioButton▐Construtores:■ JRadioButton()■ JRadioButton(String) - um botão de rádio com o
texto especificado■ JRadioButton(String, boolean) - um botão de rádio com o texto especificado, selecionado por padrão se argumento for true■ JRadioButton(Icon)■ JRadioButton(Icon, boolean)■ JRadioButton(String, Icon)■ JRadioButton(String, Icon, boolean)
![Page 30: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/30.jpg)
30
ButtonGroup▐Agrupa os botões de seleção de forma que somente um pode estar selecionado por vez.▐Mais utilizado com os botões de seleção de rádio.▐Uso:
� ButtonGroup() - construtor� add(abstractButton) - adiciona botão de seleção ao
grupo� getSelection() - retorna o botão atualmente selecionado
do grupo
JCheckBox, JRadioButton
import javax.swing.*;import java.awt.event.*;import java.awt.*;public class TesteCheckRadio extends JFrame{
private JCheckBox j1, j2;private JRadioButton r1, r2;private JPanel p; private Container c;private ButtonGroup bg;
public TesteCheckRadio(){ super("Teste Check e Radio");
j1 = new JCheckBox("Valor1", true);j2 = new JCheckBox("Valor2");r1 = new JRadioButton("Radio1");r2 = new JRadioButton("Radio2", true);p = new JPanel();
![Page 31: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/31.jpg)
31
JCheckBox, JRadioButtonp.add(j1);p.add(j2);j1.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e){boolean v = j1.isSelected();if(v) System.out.println("Caixa 1 selecionada!");else System.out.println("Caixa 1 não selecionada!");
}});
j2.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e){boolean v = j2.isSelected();if(v) System.out.println("Caixa 2 selecionada!");else System.out.println("Caixa 2 não selecionada!");
}});bg = new ButtonGroup();
bg.add(r1); bg.add(r2); p.add(r1); p.add(r2);c = getContentPane(); c.add(p);
}}
JList
import javax.swing.*;import javax.swing.event.*;import java.awt.*;public class TesteJList extends JFrame {
private String label[] = {"Segunda", "Terça", "Quart a","Quinta", "Sexta", "Sábado", "Domingo"};
private JList list;private JTextField textf;private JScrollPane pane;private Container c;public TesteJList() {
super("Teste JList");textf = new JTextField(20);list = new JList(label);pane = new JScrollPane(list);getContentPane().setLayout(new FlowLayout());getContentPane().add(pane);getContentPane().add(textf);...
![Page 32: Tratamento de Eventos - inf.pucrs.brmichael/aulas/algo_progII/index_files/eventos.pdf · Capturando Eventos nos Componentes Swing Tratamento de Eventos ... a seleção de botões](https://reader031.vdocuments.site/reader031/viewer/2022021912/5c64084b09d3f29e1d8c1f62/html5/thumbnails/32.jpg)
32
JList
...list.addListSelectionListener(new ListSelectionListe ner(){
public void valueChanged(ListSelectionEvent e) {int i = list.getSelectedIndex();textf.setText(label[i]);
} });
}
public static void main(String[] args){TesteJList janela = new TesteJList();janela.setDefaultCloseOperation(
WindowConstants .DISPOSE_ON_CLOSE); janela.pack();janela.setVisible(true);
} }
Exercício
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.