tratamento de eventos - inf.pucrs.brmichael/aulas/algo_progii/index_files/eventos.pdf · capturando...

32
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.

Upload: vongoc

Post on 13-Feb-2019

217 views

Category:

Documents


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.