Cada categoria de evento exige uma interface apropriada que deve ser implementada pela classe tratadora do evento.

Documentos relacionados
INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Manipulando Eventos em Java

Tratamento de Eventos em Programas com GUI - Graphical User Interface. Jorge H. C. Fernandes UFRN Junho de 2001

MANIPULAÇÃO DE EVENTOS

Introdução Interfaces (revisão) Delegação de eventos Tratamento de eventos Classes Adaptadoras Capturando Eventos nos Componentes Swing

Aplicação Linguagem de Programação Orientada a Objeto

Aula 2 Even e to t s d o M ouse

Programação Java. Construção de Interface gráfica. Processo Básico: OO + Eventos. Exemplo

Introdução à Programação Gráfica em Java

TRATAMENTO DE EVENTOS EM JAVA USANDO SWING. George Gomes Cabral

Aula 12 POO 1 Interface Gráfica no Java. Profa. Elaine Faria UFU

JFrame. JLabel : Utilizado como rótulo para exibição de texto e ícones. Interface Gráfica de JAVA - Graphical User Interface (GUI)

Arquivos. Prof. Leonardo Barreto Campos 1

AULA 10 - CCT0024 Linguagem de Programação Objetivos da aula. Janelas para leitura e exibição de textos

Interfaces Gráficas (GUIs) em Java usando Swing Parte I - O básico

Programação Gráfica em Java Alguns Componentes javax.swing

Arquitetura de Tratamento de Eventos em Programas com GUI - Graphical User Interface

Elaborando as Interfaces Aulas 31, 32 e 33

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Exercício 1: Criar um programa que utiliza que desenha uma interface gráfica tal como descrito na Figura 1.1.

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Criando interfaces com o usuário. Continuação

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula de Revisão para AV1

JAVA. Marcio de Carvalho Victorino. Interface Gráfica em Java (GUI)

Elaborando Interfaces. Prof. André Aparecido da Silva Disponível em: Aulas 16, 17, e 18

Swing. Page 1. Swing. Prof. Anderson Augustinho Uniandrade

Programação III. Interface Gráfica - Swing. Interface Gráfica Swing Jocélio Passos joceliodpassos@bol.com.br. Interface Gráfica - Swing

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula de Revisão para AV1

Adding User Interaction

MÓDULO 4 SWING Parte 3

Java AWT Objectos e Eventos. Label Button TextField Checkbox RadioButton Combobox

AWT Versus Swing. Java Deployment Course: Aula 5. por Jorge H C Fernandes (jhcf@di.ufpe.br) CESAR-DI-UFPE Recife, 1999

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Tratamento de Eventos

JCheckbox JRadioButton JComboBox JList JMenu... Alguns componentes já vistos em aula JButton JLabel JTextField

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 4- Tratamento de Eventos em Interfaces Gráficas

Java Foundation Classes Coleção de pacotes para criação de aplicações completas Desktop Interfaces gráficas (GUIs- Graphical User Interface)

Swing Módulo II. Tiago Alves de Oliveira. Tiago Alves de Oliveira 1

JavaBeans. Java Deployment Course: Aula 8. por Jorge H C Fernandes CESAR-DI-UFPE Recife, 1999

Aplicações Gráficas com AWT

Prof. Fernando V. Paulovich 25 de julho de SCC Programação Orientada a Objetos

Componentes Parte 02

Elaborando as Interfaces Aulas 43, 44 e 45

Elaborando as Interfaces dos trabalhos das aulas 28, 29 e 30.

Aula 2 Eventos do Mouse by Pearson Education do Brasil

Processo Básico: OO + Eventos. Java First-Tier: Aplicações. Construção de Interface gráfica. Exemplo. Exemplo. Exemplo. Hierarquia de Composição

8. Interfaces Gráficas de Usuário

Java Avançado com acesso JDBC a Banco de Dados, Arquivos, Swing e Eventos

Componentes Parte 01

Componente JOptionPane Layout Null Tratamento de Eventos. Action Listener

TIC - Programação Visual. Componentes. Prof. Edwar Saliba Júnior Setembro de Unidade 14 Componentes 1

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 1- Interfaces Gráficas com Swing

Elaborando Interfaces. Prof. André Aparecido da Silva Disponível em: Aulas 19, 20 e 21

Roteiro. Introdução. Uma Introdução à Programação Orientada a Objetos e JAVA usando NetBeans. Objetos. Princípios da Orientação a Objetos

Caso não exista nenhum listener registado no objecto que gera o evento, este não terá qualquer efeito.

Java Standard Edition (JSE)

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II Java Nona aula

Orientação a Objetos

Aula 15 Interface Gáfica. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Interface Gráfica. Disciplina: Desenvolvimento de Sistemas. Professor: Thiago Silva Prates

Orientação a Objetos

Universidade Federal de Uberlândia Faculdade de Computação GGI030 Programação Orientada a Objetos 2o. Semestre de 2017 Prof.

Programação Orientada a Objetos

Desenvolvimento de Aplicações Desktop

. Uma instância da classe JTextField gera uma instância da classe ActionEvent quando o objecto está activo e o utilizador pressiona a tecla ENTER.

Interface gráfica em Java: Swing e SWT

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 5- Tratamento de Eventos de Manipulação de textos

PROGRAMAÇÃO ORIENTADA A OBJETOS -INTERFACES GRÁFICAS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Interfaces Gráficas com Swing. Professor Leonardo Larback

Gerenciamento de Layout

Introdução à Tecnologia Java 02/2012. Java Aula 02 15/08/2012. Celso Olivete Júnior.

Interface Gráfica - Swing

Programação Orientada a Objetos II

Elaborando Interfaces. Prof. André Aparecido da Silva Disponível em: Aulas 16, 17, e 18

Curso Java Starter. 1

Aula Prática Criando Views e Controles

A classe JTextField

Programação Orientada a Objetos

Interfaces Gráficas POO. Prof. Márcio Delamaro

Construção de Interfaces Gráficas

Programação Gráfica em Java.

Curso de Java Módulo II Swing Fábio Mengue Centro de Computação - Unicamp

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Vector Java. Empregado.java

Java - Swing. Raphaela Galhardo raphaela@j2eebrasil.com.br

Manipulação de Eventos

Aplicações de Linguagem de Programação Orientada a Objeto

Encerrando Introdução a Objetos e Classes Redefinição de Métodos (1)

INTERFACE COM O USUÁRIO (em Java) Programação Orientada a Objetos

Elaborando as Interfaces dos trabalhos das aulas 25, 26 e 27.

Componentes GUI A aparência e maneira como um usuário pode interagir com componentes AWT diferem de acordo com a plataforma. Componentes Swing permite

Linguagem de Programação II GUI Interface Gráfica com o Usuário

Como tratar eventos - A interface ActionListener e o método actionperformed

Módulo 7. Interface Gráfica com o Usuário GUI - Introdução. Programação Orientada a Objetos I Java (Rone Ilídio)

Técnicas de Programação II

Prof. Msc. Vladimir Camelo

Fundamentos de GUIs. João Carlos Pinheiro. Última Atualização Junho / 2004 Versão: 3.0

Componentes no Java SE

MODEL-VIEW-CONTROLER. Prof. Fellipe Aleixo

Transcrição:

Modelo de Eventos Em uma GUI, quando o usuário realiza uma ação qualquer, tal como clicar sobre um botão ou preencher uma caixa de texto, um evento é disparado pelo componente com o qual o usuário interagiu. Eventos são objetos que descrevem o que aconteceu na interação entre o usuário e o componente. Os tipos de evento estão definidos nos pacotes java.awt.event e javax.swing.event. Cada componente a partir do qual um evento se originou, deve propagar o evento para uma ou mais classes chamadas ouvidoras (listeners). As classes ouvidoras contêm os tratadores de eventos que recebem e processam o evento. Os objetos tratadores de eventos devem ser registrados aos componentes da interface gráfica que desejam ouvir (e tratar). Quando ocorre um evento em um componente, somente os objetos registrados a este componente recebem a informação de que o evento ocorreu podendo, portanto, tratá-lo adequadamente. Quando um evento ocorre, o componente GUI com o qual o usuário interagiu notifica todos os seus ouvidores registrados, chamando o método de tratamento de evento apropriado de cada ouvidor. ELFS 202

A maioria dos componentes de GUI pode disparar mais de um tipo de evento. Com as classes ouvidoras de eventos pode-se distribuir o processamento desses eventos, ou seja, podem existir diversas classes para processar os eventos. Para processar um evento ocorrido em uma GUI deve-se: Registrar um ouvidor (listener) de eventos. Listeners são classes que implementam a interface EventListener. Existem subclasses desta classe para cada tipo de componente. Implementar um tratador (handler) de eventos. Associado a cada evento existe uma interface ouvidora apropriada. Esta interface estabelece quais métodos devem ser definidos na classe tratadora do evento (a classe que implementa os métodos apropriados e que encontrase registrada como tratadora do evento). Exemplo: classes que implementam a interface ActionListener devem implementar o método actionperformed(actionevent) e podem ser registradas para tratar ações (um clique sobre um botão, por exemplo) que ocorrem na GUI. ELFS 203

Interfaces para Tratamento de Eventos Cada categoria de evento exige uma interface apropriada que deve ser implementada pela classe tratadora do evento. Hierarquia de Interfaces java.util.eventlistener ActionListener AdjustmentListener ComponentListener ContainerListener FocusListener ItemListener KeyListener MouseListener MouseMotionListener TextListener WindowListener A implementação dessas interfaces implica em implementar seus métodos abstratos. Todos os métodos recebem como parâmetro um objeto de uma subclasse de java.awt.event. Por exemplo: o método actionperformed da interface ActionListener recebe como parâmetro um objeto da classe ActionEvent. ELFS 204

Hierarquia de Eventos java.lang.object java.util.eventobject java.awt.awtevent java.awt.event.actionevent java.awt.event.itemevent java.awt.event.adjustmentevent java.awt.event.textevent java.awt.event.componentevent java.awt.event.inputevent java.awt.event.keyevent java.awt.event.mouseevent java.awt.event.inputevent java.awt.event.keyevent java.awt.event.mouseevent ELFS 205

Alguns Métodos Tratadores de Eventos Evento Interface Métodos Ação ActionListener actionperformed(actionevent) Item ItemListener itemstatechanged(itemevent) Lista ListSelectionListener valuechanged(listselectionevent) Mouse MouseListener mousepressed(mouseevent) mousereleased(mouseevent) mouseentered(mouseevent) mouseexited(mouseevent) mouseclicked(mouseevent) Movimento do Mouse MouseMotionListener mousedragged(mouseevent) mousemoved(mouseevent) Tecla KeyListener keypressed(keyevent) keyreleased(keyevent) keytyped(keyevent) Foco FocusListener focusgained(focusevent) focuslost(focusevent) ELFS 206

Evento Interface Métodos Ajuste AdjustmentListener adjustmentvaluechanged(adjustmentevent) Componente ComponentListener componentmoved(componentevent) componenthiden(componentevent) componentresized(componentevent) componentshown(componentevent) Janela WindowListener windowclosing(windowevent) windowopened(windowevent) windowiconnified(windowevent) windowdeiconified(windowevent) windowclosed(windowevent) windowactivated(windowevent) windowdeactivated(windowevent) Container ContainerListener componentadded(containerevent) componentremoved(containerevent) Texto TextListener textvaluechanged(textevent) ELFS 207

Exemplo 1: Botão com tratador de eventos import java.awt.*; import javax.swing.*; import java.awt.event.*; Exemplo1.java public class Exemplo1 extends JFrame public Exemplo1() JFrame frame = new JFrame("Botão com tratador de eventos"); frame.setdefaultcloseoperation(jframe.dispose_on_close); frame.setsize(320,120); JPanel panel = new JPanel(); JButton botao = new JButton("OK"); panel.add(botao); Container c = frame.getcontentpane(); c.add(panel); // Registrar o tratador de eventos botao.addactionlistener(new TrataEvento()); frame.setvisible(true); Não esquecer do método main(). TrataEvento é a classe tratadora de eventos. Esta classe deve implementar o método actionperformed(actionevent e). Note que o tratador de evento registrado para esse botão é um objeto desta classe tratadora de evento. ELFS 208

Classe Tratadora de Eventos import java.awt.event.*; TrataEvento.java public class TrataEvento implements ActionListener public void actionperformed(actionevent e) System.out.println("Voce clicou no botao " + e.getactioncommand()); Reparar que: A classe tratadora de eventos deve implementar a interface ActionListener, ou seja, implementar o método actionperformed(actionevent e). O parâmetro desse método possui diversos métodos que ajudam a identificar qual foi o objeto que gerou o evento. O método getactioncommand() para um botão retorna a legenda (caption) do botão. Mas, e se existissem dois botões com a mesma legenda na interface gráfica? ELFS 209

A própria classe que constrói a interface gráfica pode ser a classe tratadora de eventos: basta que esta classe implemente a interface ActionListener. import java.awt.*; import javax.swing.*; import java.awt.event.*; Exemplo1a.java public class Exemplo1a extends JFrame implements ActionListener public Exemplo1a() JFrame frame = new JFrame("Botão com tratador de eventos"); frame.setdefaultcloseoperation(jframe.dispose_on_close); frame.setsize(320,120); JPanel panel = new JPanel(); JButton botao = new JButton("OK"); panel.add(botao); Container c = frame.getcontentpane(); c.add(panel); // Registrar o tratador de eventos botao.addactionlistener(this); frame.setvisible(true); Note que, desta forma, o tratador de evento registrado para esse botão é um objeto desta própria classe (this). ELFS 210

public void actionperformed(actionevent e) System.out.println("Voce clicou no botao " + e.getactioncommand()); public static void main(string[] args) Exemplo1a e = new Exemplo1a(); e.addwindowlistener(new WindowAdapter() public void windowclosing(windowevent e) System.exit(0); ); Note que a classe Exemplo1a, além de construir a interface gráfica, implementa a interface ActionListener, ou seja, é também uma classe tratadora de eventos de ação. A implementação desta interface consiste em implementar o método actionperformed(). ELFS 211

Exemplo 2: Vários botões com mesma legenda import java.awt.*; import javax.swing.*; import java.awt.event.*; Exemplo2.java public class Exemplo2 extends JFrame public Exemplo2() JFrame frame = new JFrame("Botões com mesma legenda"); frame.setdefaultcloseoperation(jframe.dispose_on_close); frame.setsize(320,120); JPanel panel = new JPanel(); JButton b1 = new JButton("OK"); b1.setname("botão1"); JButton b2 = new JButton("OK"); b2.setname("botão2"); panel.add(b1); panel.add(b2); Container c = frame.getcontentpane(); c.add(panel); // Registrar o tratador de eventos b1.addactionlistener(new TrataEvento2()); b2.addactionlistener(new TrataEvento2()); frame.setvisible(true); Precisa ainda lembrar de incluir o método main()? Notar que os dois botões tem o mesmo caption, mas os nomes dos objetos são diferentes. Assim será possível dar um tratamento diferente para cada botão. ELFS 212

Nova Classe Tratadora de Eventos import javax.swing.*; import java.awt.event.*; TrataEvento2.java public class TrataEvento2 implements ActionListener public void actionperformed(actionevent e) JButton b = (JButton)e.getSource(); String nome = b.getname(); if (nome.equals("botão1")) System.out.println("Voce clicou no Botão 1"); if (nome.equals("botão2")) System.out.println("Voce clicou no Botão 2"); O método getsource() retorna o objeto que deu origem ao evento (no caso, um botão). Portanto, não é preciso construir uma classe tratadora de eventos para cada componente da GUI. Uma única classe pode tratar os eventos originados por qualquer desses componentes. ELFS 213

Exemplo 3: Tratamento de eventos na própria classe da aplicação import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Exemplo3 extends JFrame implements ActionListener public Exemplo3() JFrame frame = new JFrame("Tratamento na própria classe"); frame.setdefaultcloseoperation(jframe.dispose_on_close); frame.setsize(320,120); JPanel panel = new JPanel(); JButton b1 = new JButton("OK"); b1.setname("botão1"); JButton b2 = new JButton("OK"); b2.setname("botão2"); panel.add(b1); panel.add(b2); Container c = frame.getcontentpane(); c.add(panel); b1.addactionlistener(this); b2.addactionlistener(this); frame.setvisible(true); Exemplo3.java Para ser uma classe tratadora de eventos, deve implementar a interface ActionListener. Notar que o objeto tratador de eventos é um objeto da própria classe (this). ELFS 214

A classe, portanto, deve implementar o método actionperformed... public void actionperformed(actionevent e) JButton b = (JButton)e.getSource(); String nome = b.getname(); if (nome.equals("botão1")) System.out.println("Voce clicou no Botao 1"); if (nome.equals("botão2")) System.out.println("Voce clicou no Botão 2"); public static void main(string[] args) Exemplo3 e = new Exemplo3(); e.addwindowlistener(new WindowAdapter() public void windowclosing(windowevent we) System.exit(0); ); ELFS 215

Exemplo 4: Múltiplos tratadores de eventos A estrutura de eventos de Java permite que diversos ouvidores sejam definidos para um único componente. Se um evento for gerado pelo componente todos os tratadores registrados serão chamados. import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Exemplo4 extends JFrame implements MouseListener, MouseMotionListener public Exemplo4() JFrame frame = new JFrame("Diversos tratadores de eventos"); frame.setdefaultcloseoperation(jframe.dispose_on_close); frame.setsize(320,120); JLabel label = new JLabel("Este frame tem dois ouvidores"); Container c = frame.getcontentpane(); c.add(label); // Registrar os tratadores para o frame frame.addmouselistener(this); frame.addmousemotionlistener(this); frame.setvisible(true); Exemplo4.java A classe implementa duas interfaces. Todos os métodos dessas 2 interfaces devem ser implementados. Note que existem dois tratadores registrados para o objeto frame. ELFS 216

// Métodos da interface MouseListener public void mousepressed(mouseevent e) public void mousereleased(mouseevent e) public void mouseentered(mouseevent e) System.out.println("O mouse está na janela!"); public void mouseexited(mouseevent e) System.out.println("O mouse saiu da janela!"); public void mouseclicked(mouseevent e) System.out.println("O mouse foi clicado!"); Note que todos os métodos das interfaces precisam ser implementados, mesmo que não usados. // Métodos da interface MouseMotionListener public void mousedragged(mouseevent e) System.out.println("Movendo: X=" + e.getx() + " Y=" + e.gety()); public void mousemoved(mouseevent e) public static void main(string[] args) Exemplo4 janela = new Exemplo4(); janela.addwindowlistener(new WindowAdapter() public void windowclosing(windowevent e) System.exit(0); ); ELFS 217

Exemplo 5: Alguns componentes Swing e seus eventos import java.awt.*; import javax.swing.*; import java.awt.event.*; Exemplo5.java public class Exemplo5 extends JFrame public Exemplo5() JFrame frame = new JFrame("Componentes Swing"); frame.setdefaultcloseoperation(jframe.exit_on_close); Container c = frame.getcontentpane(); c.setlayout(new GridLayout(3,2)); c.add(montarpainellabels()); c.add(montarpainelcaixas()); c.add(montarpainelareas()); c.add(montarpainelbotoes()); c.add(montarpainellistacombobox()); c.add(montarpainelcheckradio()); Os métodos montarpainelxxxx retornam um painel, que será incluído na área de conteúdo do frame. frame.setsize(800,400); frame.setvisible(true); ELFS 218

private JPanel montarpainellabels() JPanel p = new JPanel(); p.setbackground(color.white); JLabel lab1 = new JLabel("Label contendo apenas texto (posicione o mouse)"); lab1.settooltiptext("sou um JLabel"); UIManager.put("ToolTip.background", new Color(255,255,213)); Icon micro = new ImageIcon("micro.gif"); JLabel lab2 = new JLabel("Aqui, o label contém texto azul com um ícone à esquerda", micro, SwingConstants.LEFT); lab2.setforeground(color.blue); JLabel lab3 = new JLabel(); lab3.settext("ícone com texto embaixo"); lab3.seticon(micro); lab3.sethorizontaltextposition(swingconstants.center); lab3.setverticaltextposition(swingconstants.bottom); p.add(lab1); p.add(lab2); p.add(lab3); return p; O método settooltiptext especifica a dica exibida quando o usuário posiciona o mouse sobre o componente GUI. A classe UIManager permite alterar a cor de fundo da dica, de azul (o padrão) para uma cor qualquer. A classe ImageIcon aceita dois formatos de imagem: GIF (Graphics Interchange Format) e JPEG ou JPG (Joint Photographic Experts Group) ELFS 219

private JPanel montarpainelcaixas() JPanel p = new JPanel(); JTextField tf1 = new JTextField(10); JTextField tf2 = new JTextField("Texto não editável", 30); tf2.seteditable(false); JPasswordField pf = new JPasswordField("Uma senha"); p.add(tf1); p.add(tf2); p.add(pf); Mesmo um campo não editável pode ter um tratador de evento. return p; ELFS 220

private JPanel montarpainelareas() JPanel p = new JPanel(); String s = "Selecione algum texto daqui " + "e clique no botão Copia.\nO texto selecionado " + "será copiado na área da direita."; JTextArea areaesq = new JTextArea(s,5,10); JTextArea areadir = new JTextArea(5,10); areaesq.setwrapstyleword(true); areadir.seteditable(false); JButton copia = new JButton("Copia >"); p.add(new JScrollPane(areaEsq)); p.add(copia); p.add(new JScrollPane(areaDir)); A classe JTextArea não fornece barras de rolagem, que precisam portanto ser anexadas. A classe JScrollPane fornece tanto rolagem vertical quanto horizontal. Note que para incluir uma barra de rolagem a um componente, este componente deve ser passado como parâmetro do construtor de ScrollPane. Para fornecer a funcionalidade de mudança automática de linha para um JTextArea, invoque o método setlinewrap(true). return p; Constantes da classe JScrollPane: VERTICAL_SCROLLBAR_ALWAYS, HORIZONTAL_SCROLLBAR_ALWAYS, VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED, VERTICAL_SCROLLBAR_NEVER, HORIZONTAL_SCROLLBAR_NEVER ELFS 221

private JPanel montarpainelbotoes() JPanel p = new JPanel(); p.setbackground(color.white); JButton b1 = new JButton("Um botão bem simples"); Icon img1 = new ImageIcon("micro.gif"); Icon img2 = new ImageIcon("borrao.gif"); JButton b2 = new JButton("Botão com imagem (passe o mouse)",img1); b2.setrollovericon(img2); p.add(b1); p.add(b2); Um botão pode incluir uma imagem e uma imagem rollover (exibida quando o mouse é posicionado sobre o botão). return p; ELFS 222

private JPanel montarpainellistacombobox() JPanel p = new JPanel(); p.setbackground(color.white); Em uma lista, pode-se selecionar apenas um item (SINGLE_SELECTION) ou, pressionando Ctrl, vários itens (MULTIPLE_INTERVAL_SELECTION). String itens[] = "Amarelo","Azul","Branco","Cinza"; Color cores[] = Color.yellow,Color.blue,Color.white,Color.lightGray; JList lista = new JList(itens); lista.setvisiblerowcount(3); lista.setselectionmode(listselectionmodel.single_selection); String nomes[] = "borrao.gif","cadeado.gif","engrenagem.gif", "escreve.gif","micro.gif","pasta.gif","rede.gif","servidor.gif"; ImageIcon imagens[] = new ImageIcon[nomes.length]; for (int i = 0; i < nomes.length; i++) imagens[i] = new ImageIcon(nomes[i]); JComboBox combo = new JComboBox(nomes); combo.setmaximumrowcount(3); JLabel mostra = new JLabel(imagens[0]); p.add(new JScrollPane(lista)); p.add(combo); p.add(mostra); O método setmaximumrowcount estabelece o número máximo de itens exibidos pelo ComboBox. Note que, para o caso acima, como o ComboBox acima possui 8 itens, uma barra de rolagem será fornecida automaticamente pelo objeto ComboBox. Note que isso não ocorre automaticamente no caso de listas. return p; ELFS 223

private JPanel montarpainelcheckradio() JPanel p = new JPanel(); Caixas de seleção (checkbox) e botões de rádio (radiobutton) são semelhantes no sentido de que possuem apenas dois estados: selecionado (SELECTED) ou não-selecionado (DESELECTED). JCheckBox cb1 = new JCheckBox("Negrito",false); JCheckBox cb2 = new JCheckBox("Itálico",false); JRadioButton rb1 = new JRadioButton("Nada",false); JRadioButton rb2 = new JRadioButton("Negrito",false); JRadioButton rb3 = new JRadioButton("Itálico",false); JRadioButton rb4 = new JRadioButton("Ambos",false); ButtonGroup bg = new ButtonGroup(); bg.add(rb1); bg.add(rb2); bg.add(rb3); bg.add(rb4); JPanel grupo = new JPanel(); grupo.add(rb1); grupo.add(rb2); grupo.add(rb3); grupo.add(rb4); p.add(cb1); p.add(cb2); p.add(grupo); Note que os botões de rádio precisam ser agrupados para se tornarem mutuamente exclusivos. Um objeto ButtonGroup não é um componente GUI e portanto, não pode ser acrescentado a um container. return p; ELFS 224

public static void main(string[] args) Exemplo5 janela = new Exemplo5(); janela.addwindowlistener(new WindowAdapter() public void windowclosing(windowevent e) System.exit(0); ); ELFS 225

Vamos implementar tratamento para os seguintes eventos: O clique no botão com imagem deve exibir os conteúdos das caixas (de texto e de senha); O clique no botão Copia deve copiar o texto selecionado na área da esquerda para a área da direita; A seleção de um item da lista deve alterar a cor de fundo do painel; A seleção de um item do ComboBox deve exibir a imagem correspondente a este item; A escolha de um dos botões de rádio deve deixar as caixas de verificação em um estado consistente. Vamos imaginar que a própria classe Exemplo5 irá tratar os eventos. Para isso, a classe deverá implementar as seguintes interfaces: ActionListener: método actionperformed ItemListener: método itemstatechanged ListSelectionListener: método valuechanged Exercício: Incluir na classe Exemplo5 os ouvidores de eventos necessários e identificar todos os objetos que deverão ser declarados como atributos da classe. ELFS 226

Métodos tratadores de eventos // Tratadores de eventos public void actionperformed(actionevent e) if (e.getsource() == b2) JOptionPane.showMessageDialog(null, "Caixa de texto contém: " + tf1.gettext() + "\ncaixa de senha contém: " + String.copyValueOf(pf.getPassword())); if (e.getsource() == copia) areadir.settext(areaesq.getselectedtext()); public void valuechanged(listselectionevent e) if (e.getsource() == lista) pcor.setbackground(cores[lista.getselectedindex()]); ELFS 227

public void itemstatechanged(itemevent e) if (e.getsource() == combo) mostra.seticon(imagens[combo.getselectedindex()]); if (e.getsource() == rb1) cb1.setselected(false); cb2.setselected(false); if (e.getsource() == rb2) cb1.setselected(true); cb2.setselected(false); if (e.getsource() == rb3) cb1.setselected(false); cb2.setselected(true); if (e.getsource() == rb4) cb1.setselected(true); cb2.setselected(true); ELFS 228

Exercícios 1. Implementar as funcionalidades da GUI Calculadora da aula passada. 2. Implementar as funcionalidades das aplicações a seguir: O usuário deverá fornecer os valores do espaço inicial, velocidade inicial e aceleração nas caixas correspondentes. O valor de tempo deverá ser gerado aleatoriamente como um inteiro do intervalo [1, 20] quando o usuário clicar no botão Gerar Tempo. O valor gerado deverá ser escrito na caixa correspondente no painel inferior. Use o método Math.random(), que gera um valor aleatório (do tipo double) no intervalo [0.0, 1.0). O espaço percorrido deve ser calculado quando o usuário clicar no primeiro botão da barra de ferramentas. O clique no segundo botão deve limpar todas as caixas de texto. ELFS 229

O botão Limpa deverá limpar as caixas de texto e o painel que contém o gráfico. Para limpar um painel p basta pintar o painel com sua cor de fundo, com os métodos: g.setcolor(color.white); g.fillrect(0, 0, p.getwidth(), p.getheight()); onde g é o contexto gráfico do painel p. Para o desenho do gráfico, utilize a função g.filloval(x, y, 3, 3), onde: g é o contexto gráfico do painel p, obtido pela instrução: Graphics g = p.getgraphics(); x é um valor inteiro que deve variar de 0 a p.getwidth() de 1 em 1; y é um valor inteiro calculado por: ELFS 230