mariateixeira-livro java-como programar.deitel.capítulo 11.slides

87
1 1 2005 by Pearson Education do Brasil 11 11 Componentes GUI: Parte 1 2 2005 by Pearson Education do Brasil OBJETIVOS Neste capítulo, você aprenderá: Os princípios do projeto de interfaces gráficas com o usuário (graphical user interfaces – GUIs). Como construir GUIs e tratar eventos gerados por interações de usuário com GUIs. Como entender os pacotes que contêm componentes GUI, interfaces e classes de tratamento de evento. Como criar e manipular botões, rótulos, listas, campos de texto e painéis. Como tratar eventos de mouse e eventos de teclado. Como utilizar gerenciadores de layout para organizar componentes GUI.

Upload: gaiato13

Post on 19-Jan-2016

74 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

1

1

2005 by Pearson Education do Brasil

1111

Componentes GUI: Parte 1

2

2005 by Pearson Education do Brasil

OBJETIVOS� Neste capítulo, você aprenderá:

� Os princípios do projeto de interfaces gráficas com o usuário (graphical user interfaces – GUIs).

� Como construir GUIs e tratar eventos gerados por interações de usuário com GUIs.

� Como entender os pacotes que contêm componentes GUI, interfaces e classes de tratamento de evento.

� Como criar e manipular botões, rótulos, listas, campos de texto e painéis.

� Como tratar eventos de mouse e eventos de teclado.

� Como utilizar gerenciadores de layout para organizar componentes GUI.

Page 2: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

2

3

2005 by Pearson Education do Brasil

11.1 Introdução

11.2 Entrada/saída baseada em GUI simples com JOptionPaneJOptionPaneJOptionPaneJOptionPane

11.3 Visão geral de componentes Swing

11.4 Exibição de texto e imagens em uma janela

11.5 Campos de texto e uma introdução ao tratamento de eventos com classes aninhadas

11.6 Tipos comuns de eventos GUI e interfaces ouvintes

11.7 Como o tratamento de evento funciona

11.8 JButtonJButtonJButtonJButton

11.9 Botões que mantêm o estado

11.9.1 JCheckBoxJCheckBoxJCheckBoxJCheckBox

11.9.2 JRadioButtonJRadioButtonJRadioButtonJRadioButton

11.10 JComboBoxJComboBoxJComboBoxJComboBox e utilização de uma classe interna anônima para tratamento de eventos

4

2005 by Pearson Education do Brasil

11.11 JListJListJListJList

11.12 Listas de seleção múltipla

11.13 Tratamento de evento de mouse

11.14 Classes adaptadoras

11.15 Subclasse JPanelJPanelJPanelJPanel para desenhar com o mouse

11.16 Tratamento de eventos de teclado

11.17 Gerenciadores de layout

11.17.1 FlowLayoutFlowLayoutFlowLayoutFlowLayout

11.17.2 BorderLayoutBorderLayoutBorderLayoutBorderLayout

11.17.3 GridLayoutGridLayoutGridLayoutGridLayout

11.18 Utilizando painéis para gerenciar layouts mais complexos

11.19 JTextAreaJTextAreaJTextAreaJTextArea

11.20 Conclusão

Page 3: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

3

5

2005 by Pearson Education do Brasil

11.1 Introdução

• Interface Gráfica com o Usuário (Graphical User

Interface – GUI):

– Apresenta um mecanismo amigável ao usuário para interagir com uma aplicação;

– Sendo consistente permite que o usuário se familiarize mais rapidamente com ela e portanto possa utiliza-la mais produtivamente;

– Frequentemente contém barra de título, barra de menus que contém menus, botões e caixas de combinação;

– É construída a partir de componentes GUI.

6

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.1

Interfaces com o usuário consistentes permitem que o usuário aprenda mais rápido novos aplicativos.

Page 4: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

4

7

2005 by Pearson Education do Brasil

Figura 11.1 | Janela do Internet Explorer com componentes GUI.

botão menus barra de título barra de menus caixa de combinação

barras

de rolagem

8

2005 by Pearson Education do Brasil

11.2 Entrada/saída baseada em GUI simples com JOptionPane

• Caixas de diálogo:

– Utilizadas pelas aplicações para interagir com o usuário.

– Fornecidas pela classe JOptionPane do Java (pacote javax.swingjavax.swingjavax.swingjavax.swing).

• Contém diálogos de entrada e diálogos de mensagem.

Page 5: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

5

9

2005 by Pearson Education do Brasil

Resumo

Addition.javaAddition.javaAddition.javaAddition.java

(1 de 2)

1 // Fig. 11.2: Addition.java// Fig. 11.2: Addition.java// Fig. 11.2: Addition.java// Fig. 11.2: Addition.java 2 // // // // Programa de adição que utiliza JOptionPane para entrada e saídaPrograma de adição que utiliza JOptionPane para entrada e saídaPrograma de adição que utiliza JOptionPane para entrada e saídaPrograma de adição que utiliza JOptionPane para entrada e saída.... 3 importimportimportimport javax.swing.JOptionPane; javax.swing.JOptionPane; javax.swing.JOptionPane; javax.swing.JOptionPane; // program// program// program// programaaaa u u u uttttilizailizailizailiza JOptionPane JOptionPane JOptionPane JOptionPane 4 5 public classpublic classpublic classpublic class Addition Addition Addition Addition

6 {{{{

7 public static voidpublic static voidpublic static voidpublic static void main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 {{{{

9 // // // // obtém a entrada de usuário a partir dos diálogos de entrada JOptionPaneobtém a entrada de usuário a partir dos diálogos de entrada JOptionPaneobtém a entrada de usuário a partir dos diálogos de entrada JOptionPaneobtém a entrada de usuário a partir dos diálogos de entrada JOptionPane

10 String firstNumber =String firstNumber =String firstNumber =String firstNumber =

11 JOptionPane.showInputDialog( JOptionPane.showInputDialog( JOptionPane.showInputDialog( JOptionPane.showInputDialog( "Enter first integer""Enter first integer""Enter first integer""Enter first integer" ); ); ); );

12 String secondNumber =String secondNumber =String secondNumber =String secondNumber =

13 JOptionPane.showInputDialog( JOptionPane.showInputDialog( JOptionPane.showInputDialog( JOptionPane.showInputDialog( "Enter second integer""Enter second integer""Enter second integer""Enter second integer" ); ); ); );

14 15 // // // // converte String em valores int para utilização em um cálculoconverte String em valores int para utilização em um cálculoconverte String em valores int para utilização em um cálculoconverte String em valores int para utilização em um cálculo

16 intintintint number1 = Integer.parseInt( firstNumber ); number1 = Integer.parseInt( firstNumber ); number1 = Integer.parseInt( firstNumber ); number1 = Integer.parseInt( firstNumber );

17 intintintint number2 = Integer.parseInt( secondNumber ); number2 = Integer.parseInt( secondNumber ); number2 = Integer.parseInt( secondNumber ); number2 = Integer.parseInt( secondNumber );

18 19 intintintint sum = number1 + number2; sum = number1 + number2; sum = number1 + number2; sum = number1 + number2; // // // // aaaadicionadicionadicionadiciona n n n núúúúmerosmerosmerosmeros 20 21 // // // // exibe o resultado em um diálogo de mensagem JOptionPaneexibe o resultado em um diálogo de mensagem JOptionPaneexibe o resultado em um diálogo de mensagem JOptionPaneexibe o resultado em um diálogo de mensagem JOptionPane 22 JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( nullnullnullnull, , , , "T"T"T"The sum is "he sum is "he sum is "he sum is " + sum, + sum, + sum, + sum,

23 "Sum of Two Integers""Sum of Two Integers""Sum of Two Integers""Sum of Two Integers", , , , JOptionPane.PLAIN_MESSAGEJOptionPane.PLAIN_MESSAGEJOptionPane.PLAIN_MESSAGEJOptionPane.PLAIN_MESSAGE ); ); ); );

24 } } } } // // // // fim do métodofim do métodofim do métodofim do método main main main main 25 } } } } // // // // fim da classefim da classefim da classefim da classe AdditionAdditionAdditionAddition

Mostra o diálogo de entrada para receber o primeiro inteiro

Mostra o diálogo de entrada para receber o segundo inteiro

Mostra o diálogo de mensagem para gerar a saída com o resultado

da soma para o usuário

10

2005 by Pearson Education do Brasil

Resumo

Addition.javaAddition.javaAddition.javaAddition.java

(2 de 2)

Diálogo de entrada exibido nas linhas 10–11

Diálogo de entrada exibido nas linhas 12–13

Diálogo de entrada exibido nas linhas 22–23

Campo de texto em que

o usuário digita umvalor

Prompt para o

usuário

Quando o usuário

clica em OK,showInputDialogshowInputDialogshowInputDialogshowInputDialogretorna ao programa o

100 digitado pelo

usuário como uma StringStringStringString. O programa

deve converter a StringStringStringString em um intintintint

barra de

título

Quando o usuário clique em

OK, o diálogo demensagem é fechado (é

removido da tela)

Page 6: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

6

11

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.2

O prompt em um diálogo de entrada emprega maiúsculas e minúsculas no estilo de frases —um estilo que emprega a maiúscula inicial apenas na primeira palavra da frase a menos que a palavra seja um nome próprio (por exemplo, Deitel).

12

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.3

Em geral, a barra de título de uma janela adota o uso de letras maiúsculas e minúsculas de título de livro — um estilo que emprega a inicial maiúscula em cada palavra significativa no texto e não termina com pontuação (por exemplo, Uso de Letras Maiúsculas e Minúsculas no Título de um Livro).

Page 7: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

7

13

2005 by Pearson Education do Brasil

Figura 11.3 | Constantes JOptionPaneJOptionPaneJOptionPaneJOptionPane staticstaticstaticstatic para diálogos de mensagem.

Tipo de diálogo de mensagem Ícone Descrição

ERROR_MESSAGEERROR_MESSAGEERROR_MESSAGEERROR_MESSAGE

Um diálogo que indica um erro para o usuário.

INFORMATION_MESSAGEINFORMATION_MESSAGEINFORMATION_MESSAGEINFORMATION_MESSAGE

Um diálogo com uma mensagem informativa para o usuário.

WARWARWARWARNING_MESSAGENING_MESSAGENING_MESSAGENING_MESSAGE

Um diálogo que adverte o usuário de um problema potencial.

QUESTION_MESSAGEQUESTION_MESSAGEQUESTION_MESSAGEQUESTION_MESSAGE

Um diálogo que impõe uma pergunta ao usuário. Normalmente, esse diálogo exige uma resposta, como clicar em um botão YesYesYesYes ou NoNoNoNo.

PLAIN_MESSAGEPLAIN_MESSAGEPLAIN_MESSAGEPLAIN_MESSAGE Nenhum ícone

Um diálogo que contém uma mensagem, mas nenhum ícone..

14

2005 by Pearson Education do Brasil

11.3 Visão geral de componentes Swing

• Boa parte dos aplicativos exigem interfaces maiselaboradas do que o oferecido por JOptionPane;

• Componentes Swing GUI:

– Declarado no pacote javax.swing.

– A maioria dos componentes Swing são componentes Java puros — escritos, manipulados e exibidos em Java.

– Fazem parte das Java Foundation Classes (JFC) —bibliotecas do Java para desenvolvimento de GUI para múltiplas plataformas.

Page 8: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

8

15

2005 by Pearson Education do Brasil

Figura 11.4 | Alguns componentes GUI básicos.

Componente Descrição

JLabelJLabelJLabelJLabel Exibe texto não-editável ou ícones.

JTextFieldJTextFieldJTextFieldJTextField Permite ao usuário inserir dados do teclado. Também pode ser utilizado para exibir texto editável ou não editável.

JButtonJButtonJButtonJButton Desencadeia um evento quando o usuário clicar nele com o mouse.

JCheckBoxJCheckBoxJCheckBoxJCheckBox Especifica uma opção que pode ser ou não selecionada.

JComboBoxJComboBoxJComboBoxJComboBox Fornece uma lista drop-down de itens a partir da qual o usuário pode fazer uma seleção clicando em um item ou possivelmente digitando na caixa.

JListJListJListJList Fornece uma lista de itens a partir da qual o usuário pode fazer uma seleção clicando em qualquer item na lista. Múltiplos elementos podem ser selecionados.

JPanelJPanelJPanelJPanel Fornece uma área em que os componentes podem ser colocados e organizados. Também pode ser utilizado como uma área de desenho para imagens gráficas.

16

2005 by Pearson Education do Brasil

Swing versus AWT

• Há dois conjuntos de componentes GUI: AWT e SWING.

• Abstract Window Toolkit (AWT):

– Precursor do Swing.

– Declarado no pacote java.awt.

– Não fornece aparência e comportamento consistentes para diversas plataformas, isto é, o mesmo aplicativopode ter diferentes layouts em diferentes plataformas.

• Componentes Swing GUI permitem trabalhar com aparência e comportamento independente de plataforma, personalizado em cada plataforma ou até mesmoconfigurável pelo usuário.

Page 9: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

9

17

2005 by Pearson Education do Brasil

Dica de portabilidade 11.1

Os componentes Swing são implementados no Java; desse modo, eles são mais portáveis e flexíveis do que os componentes Java GUI originais de pacotes java.awtjava.awtjava.awtjava.awt, que foram baseados nos componentes GUI da plataforma subjacente. Por essa razão, os componentes Swing GUI geralmente são preferidos.

18

2005 by Pearson Education do Brasil

Componentes GUI leves versuspesados

• Componentes leves:

– Não associados diretamente a componentes GUI suportados pela plataforma subjacente.

• Componentes pesados:

– Associados diretamente à plataforma local.

– Contam com o sistema de janela da plataforma local para determinar a aparência e o comportamento do aplicativo.

– Componentes AWT.

– Alguns componentes Swing.

Page 10: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

10

19

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.4

A aparência e o comportamento de uma GUI definida com componentes GUI pesados no pacote java.awtjava.awtjava.awtjava.awt podem variar entre plataformas. Como os componentes pesados são acoplados à GUI da plataforma local, a aparência e o comportamento variam entre plataformas.

20

2005 by Pearson Education do Brasil

Superclasses de componentes GUI leves do Swing

• Classe Component (pacote java.awt):– Subclasse de Object e superclasse de vários componentes.

– Declara muitos comportamentos e atributos comuns a componentes GUI (tanto AWT quanto SWING).

• Classe Container (pacote java.awt):– Subclasse de Component.

– Componentes são anexados a Containers (como janelas), parapoderem ser organizados e exibidos na tela.

• Classe JComponent (pacote javax.swing):– Subclasse de Container.

– Superclasse de todos os componentes Swing leves.

Page 11: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

11

21

2005 by Pearson Education do Brasil

Observação de engenharia de software 11.1

Estude os atributos e comportamentos das classes na hierarquia de classe da Figura 11.5. Essas classes declaram os recursos que são comuns àmaioria dos componentes Swing.

22

2005 by Pearson Education do Brasil

Figura 11.5 | Superclasses comuns de muitos dos componentes leves do Swing.

Page 12: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

12

23

2005 by Pearson Education do Brasil

Superclasses de componentes GUI leves do Swing

• Recursos dos componentes leves comuns:– Aparência e comportamento plugáveis para personalizar a

aparência dos componentes.

– Teclas de atalho (chamadas mnemônicas).

– Capacidades comuns de tratamento de eventos.

– Breves descrições do propósito de um componente GUI (chamadas dicas de ferramenta).

– Suporte para localização de interface com o usuário(personalização do ambiente).

– Suporte a deficientes físicos.

24

2005 by Pearson Education do Brasil

11.4 Exibição de texto e imagens em uma janela

• Classe JFrame:

– A maioria das janelas é uma instância ou subclasse dessa classe.

– Fornece a barra de título.

– Fornece botões para minimizar, maximizar e fechar a aplicação.

Page 13: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

13

25

2005 by Pearson Education do Brasil

Rotulando componentes GUI

• Rótulo:

– Fornece instruções de texto ou informações que declaram o propósito de cada componente, visto queuma GUI pode conter muitos componentes.

– Criadas com a classe JLabel:• Subclasse de JComponent.

• Parte do pacote javax.swing.

• Exibe uma única linha de texto de leitura, uma imagem ouambos;

• Raramente são alterados, após criados.

26

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.5

Normalmente, o texto em um JLabelJLabelJLabelJLabelemprega maiúsculas e minúsculas no estilo de frases.

Page 14: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

14

27

2005 by Pearson Education do Brasil

Especificando o layout

• Cada componente deve ser anexado a um contêiner, como uma janelaJFrame.

• Organização dos contêineres:

– Determina onde os componentes são posicionados no contêiner(especifica o layout).

– É feita no Java com gerenciadores de layout.

• O Java disponibiliza vários gerenciadores, um dos quais é a classeFlowLayout (os componentes são posicionados da esquerda para a direita, a medida que são adicionados, até a próxima linha. Se o contêiner for redimensionado, o mesmo ocorrerá com os componentes).

– Há IDEs que permitem que o posicionamento e tamanho dos componentes ocorra com auxílio do mouse.

– O método setLayout() da classe JFrame recebe como argumento um objeto que implementa a interface LayoutManager.

28

2005 by Pearson Education do Brasil

Resumo

LabelFrame.javaLabelFrame.javaLabelFrame.javaLabelFrame.java

(1 de 2)

Demonstra váriosrecursos de JLabel e apresenta umaframework comum.

É declarado 1 label paracada tratamento de JLabel.

O construtornormalmenteconstrói a GUI que éexibida.O exemploinicia disparando o construtor dasuperclasse, onde o argumento passadoserá o título daFrame

1 // Fig. 11.6: LabelFrame.java// Fig. 11.6: LabelFrame.java// Fig. 11.6: LabelFrame.java// Fig. 11.6: LabelFrame.java 2 // // // // Demonstrando a classe JLabelDemonstrando a classe JLabelDemonstrando a classe JLabelDemonstrando a classe JLabel.... 3 importimportimportimport java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout; // // // // especifica como os componentes são organizadosespecifica como os componentes são organizadosespecifica como os componentes são organizadosespecifica como os componentes são organizados

4 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; // // // // fornece recursos básicos de janelafornece recursos básicos de janelafornece recursos básicos de janelafornece recursos básicos de janela

5 importimportimportimport javax.swing.JLabel; javax.swing.JLabel; javax.swing.JLabel; javax.swing.JLabel; // // // // eeeexibe texto e imagensxibe texto e imagensxibe texto e imagensxibe texto e imagens

6 importimportimportimport javax.swing.SwingConstants; javax.swing.SwingConstants; javax.swing.SwingConstants; javax.swing.SwingConstants; // // // // constantes comuns utilizadas com Swingconstantes comuns utilizadas com Swingconstantes comuns utilizadas com Swingconstantes comuns utilizadas com Swing

7 importimportimportimport javax.swing.Icon; javax.swing.Icon; javax.swing.Icon; javax.swing.Icon; // // // // interface utilizada para manipular imagensinterface utilizada para manipular imagensinterface utilizada para manipular imagensinterface utilizada para manipular imagens

8 importimportimportimport javax.swing.ImageIcon; javax.swing.ImageIcon; javax.swing.ImageIcon; javax.swing.ImageIcon; // // // // carregacarregacarregacarrega image image image imagennnnssss 9 10 publicpublicpublicpublic classclassclassclass Lab Lab Lab LabelFrame elFrame elFrame elFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

11 {{{{

12 privateprivateprivateprivate JLabel label1; JLabel label1; JLabel label1; JLabel label1; // JLabel // JLabel // JLabel // JLabel apenas com textoapenas com textoapenas com textoapenas com texto 13 privateprivateprivateprivate JLabel label2; JLabel label2; JLabel label2; JLabel label2; // JLabel // JLabel // JLabel // JLabel construído com texto e íconeconstruído com texto e íconeconstruído com texto e íconeconstruído com texto e ícone

14 privateprivateprivateprivate JLabel label3; JLabel label3; JLabel label3; JLabel label3; // JLabel // JLabel // JLabel // JLabel com texto e ícone adicionadoscom texto e ícone adicionadoscom texto e ícone adicionadoscom texto e ícone adicionados 15 16 // // // // Construtor LConstrutor LConstrutor LConstrutor LabelFrame abelFrame abelFrame abelFrame adicionaadicionaadicionaadiciona JLabels JLabels JLabels JLabels aaaa JFrame JFrame JFrame JFrame 17 publicpublicpublicpublic LabelFrame() LabelFrame() LabelFrame() LabelFrame()

18 { { { {

19 supersupersupersuper( ( ( ( "Testing JLabel""Testing JLabel""Testing JLabel""Testing JLabel" ); ); ); );

20 setLayout( setLayout( setLayout( setLayout( newnewnewnew FlowLayout() ); FlowLayout() ); FlowLayout() ); FlowLayout() ); // // // // configura o layout de frameconfigura o layout de frameconfigura o layout de frameconfigura o layout de frame

21 22 // // // // Construtor JLabel com um arConstrutor JLabel com um arConstrutor JLabel com um arConstrutor JLabel com um argumento de stringgumento de stringgumento de stringgumento de string

23 label1 = label1 = label1 = label1 = newnewnewnew JLabel( JLabel( JLabel( JLabel( "Label with text""Label with text""Label with text""Label with text" ); ); ); );

24 label1.setToolTipText( label1.setToolTipText( label1.setToolTipText( label1.setToolTipText( "This is label1""This is label1""This is label1""This is label1" ); ); ); );

25 add( label1 ); add( label1 ); add( label1 ); add( label1 ); // // // // adicionaadicionaadicionaadiciona label1 label1 label1 label1 aaaa JFrame JFrame JFrame JFrame 26

Page 15: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

15

29

2005 by Pearson Education do Brasil

Resumo

LabelFrame.javaLabelFrame.javaLabelFrame.javaLabelFrame.java

(2 de 2)

getClass() retorna umareferência ao objetoClasse querepresenta a declaração da classeLabelFrame.

getResource() retorna a localização daimagem como um URL, que é entãoutilizado peloconstrutor de ImagemIcon paralocalizar a imagem e a carregar para a memória. Da forma que está o arquivodeve estararmazenado no mesmo local que o arquivo .class

27 // // // // construtor JLabel com string, Icon e argumentos de alinhamentoconstrutor JLabel com string, Icon e argumentos de alinhamentoconstrutor JLabel com string, Icon e argumentos de alinhamentoconstrutor JLabel com string, Icon e argumentos de alinhamento 28 Icon bug = Icon bug = Icon bug = Icon bug = newnewnewnew ImageIcon( getClass().getResource( ImageIcon( getClass().getResource( ImageIcon( getClass().getResource( ImageIcon( getClass().getResource( "bug1.gif""bug1.gif""bug1.gif""bug1.gif" ) ); ) ); ) ); ) );

29 label2 = label2 = label2 = label2 = newnewnewnew JLabel( JLabel( JLabel( JLabel( "Label with text and icon""Label with text and icon""Label with text and icon""Label with text and icon", bug, , bug, , bug, , bug,

30 SwingConsSwingConsSwingConsSwingConstants.LEFTtants.LEFTtants.LEFTtants.LEFT ); ); ); );

31 label2.setToolTipText( label2.setToolTipText( label2.setToolTipText( label2.setToolTipText( "This is label2""This is label2""This is label2""This is label2" ); ); ); );

32 add( label2 ); add( label2 ); add( label2 ); add( label2 ); // ad// ad// ad// adiiiicionacionacionaciona label2 label2 label2 label2 aaaa JFrame JFrame JFrame JFrame 33 34 label3 = label3 = label3 = label3 = newnewnewnew JLabel(); JLabel(); JLabel(); JLabel(); // // // // construtor construtor construtor construtor JLabel JLabel JLabel JLabel sem argumentossem argumentossem argumentossem argumentos 35 label3.setText( label3.setText( label3.setText( label3.setText( "Label with icon and text at bottom""Label with icon and text at bottom""Label with icon and text at bottom""Label with icon and text at bottom" ); ); ); );

36 label3.setIcon( bug ); label3.setIcon( bug ); label3.setIcon( bug ); label3.setIcon( bug ); // ad// ad// ad// adiciona iciona iciona iciona ícone aícone aícone aícone a JLabel JLabel JLabel JLabel 37 label3.setHorizontalTextPosition( label3.setHorizontalTextPosition( label3.setHorizontalTextPosition( label3.setHorizontalTextPosition( SwingConstants.CENTERSwingConstants.CENTERSwingConstants.CENTERSwingConstants.CENTER ); ); ); );

38 label3.setVerticalTextPosition( label3.setVerticalTextPosition( label3.setVerticalTextPosition( label3.setVerticalTextPosition( SwingConstants.BOTTOMSwingConstants.BOTTOMSwingConstants.BOTTOMSwingConstants.BOTTOM ); ); ); );

39 label3.setToolTipText( label3.setToolTipText( label3.setToolTipText( label3.setToolTipText( "This is label3""This is label3""This is label3""This is label3" ); ); ); );

40 add( label3 ); add( label3 ); add( label3 ); add( label3 ); // ad// ad// ad// adiiiicionacionacionaciona label3 label3 label3 label3 aaaa JFrame JFrame JFrame JFrame 41 } } } } // // // // ffffim do construtor im do construtor im do construtor im do construtor LabelFrameLabelFrameLabelFrameLabelFrame 42 } } } } // // // // ffffim da im da im da im da cccclasslasslasslasseeee LabelFrame LabelFrame LabelFrame LabelFrame

30

2005 by Pearson Education do Brasil

Resumo

LabelTest.javaLabelTest.javaLabelTest.javaLabelTest.java

1 // Fig. 11.7: LabelTest.java// Fig. 11.7: LabelTest.java// Fig. 11.7: LabelTest.java// Fig. 11.7: LabelTest.java 2 // Test// Test// Test// Testandoandoandoando LabelFrame. LabelFrame. LabelFrame. LabelFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass LabelTest LabelTest LabelTest LabelTest

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 LabelFrame labelFrame = LabelFrame labelFrame = LabelFrame labelFrame = LabelFrame labelFrame = newnewnewnew LabelFrame(); LabelFrame(); LabelFrame(); LabelFrame(); // cr// cr// cr// criaiaiaia LabelFram LabelFram LabelFram LabelFrameeee 10 labelFrame.setDefaultCloseOperation( labelFrame.setDefaultCloseOperation( labelFrame.setDefaultCloseOperation( labelFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 labelFrame.setSize( labelFrame.setSize( labelFrame.setSize( labelFrame.setSize( 275275275275, , , , 180180180180 ); ); ); ); // // // // configura tamanho doconfigura tamanho doconfigura tamanho doconfigura tamanho do frame frame frame frame 12 labelFrame.setVisible( labelFrame.setVisible( labelFrame.setVisible( labelFrame.setVisible( truetruetruetrue ); ); ); ); // // // // exibe exibe exibe exibe frameframeframeframe 13 } } } } // // // // fim de fim de fim de fim de mainmainmainmain 14 } } } } // // // // fim da classe fim da classe fim da classe fim da classe LabLabLabLabelTestelTestelTestelTest

Page 16: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

16

31

2005 by Pearson Education do Brasil

Criando e anexando label1

• Um objeto da classe JLabel pode ser criadopassando uma String como argumento para seuconstrutor (será o texto a ser exibido no label).

• Método setToolTipText() da classeJcomponent:– Especifica a dica de ferramenta, sendo exibida quando o

usuário posiciona o cursor do mouse sobre o label na GUI.

• Método add() da classe Container:– Adiciona um componente, passado como argumento, a um

contêiner.

32

2005 by Pearson Education do Brasil

Erro comum de programação 11.1

Se você não adicionar explicitamente um componente GUI a um contêiner, o componente GUI não será exibido quando o contêiner aparecer na tela.

Page 17: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

17

33

2005 by Pearson Education do Brasil

Observação sobre a aparência e comportamento 11.6

Utilize as dicas de ferramenta para adicionar texto descritivo aos componentes GUI. Esse texto ajuda o usuário a determinar o propósito do componente GUI na interface com o usuário.

34

2005 by Pearson Education do Brasil

Criando e anexando label2

• Ícones são comumente utilizados para aprimorar a aparência de um aplicativo.

• Interface Icon (javax.swing):

– Pode ser adicionado a uma JLabel através do método setIcon(), querecebe como argumento um Icon (qualquer objeto que implemente a interface Icon), ou através do próprio construtor de JLabel, que deve recebero mesmo argumento.

– Implementado pela classe ImageIcon (javax.swing). Suporta váriosformatos de imagem, como GIF, PNG e JPEG.

• Interface SwingConstants:

– Declara um conjunto de constantes inteiras comuns, como as utilizadas para configurar o alinhamento dos componentes.

– Pode ser utilizada com os métodos setHorizontalAlignment() e setVerticalAlignment() (como os de JLabel), onde cada um recebecomo argumento a identificação do alinhamento a ser realizado.

Page 18: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

18

35

2005 by Pearson Education do Brasil

Criando e anexando label3

• Outros métodos JLabel, que podem ser usados para alterar a aparência de um rótulo:

– Construtor sem argumento (inicia sem texto e/ou imagem).

– getText() e setText()

• Para configurar e recuperar o texto de um rótulo.

• Retorno/argumento são Strings.

– getIcon() e setIcon()

• Para configurar e recuperar o ícone exibido no rótulo.

• Retorno/argumento são Icon.

– setVerticalTextPosition() e setHorizontalTextPosition()

• Para configurar as posições vertical e horizontal do texto exibido no rótulo.

• As constantes de posição horizontal em SwingConstants são LEFT, CENTER e RIGHT. Já as de posição vertical são TOP, CENTER e BOTTOM.

36

2005 by Pearson Education do Brasil

Figura 11.8 | Alguns componentes GUI básicos.

Constante

Descrição

Constantes de posição horizontal

SwingConstants.LEFTSwingConstants.LEFTSwingConstants.LEFTSwingConstants.LEFT Coloca o texto à esquerda. SwingConstants.CENTERSwingConstants.CENTERSwingConstants.CENTERSwingConstants.CENTER Coloca o texto no centro. SwingConstants.RIGHTSwingConstants.RIGHTSwingConstants.RIGHTSwingConstants.RIGHT Coloca o texto à direita.

Constantes de posição vertical

SwingConstants.TOPSwingConstants.TOPSwingConstants.TOPSwingConstants.TOP Coloca o texto na parte superior. SwingConstants.CENTERSwingConstants.CENTERSwingConstants.CENTERSwingConstants.CENTER Coloca o texto no centro. SwingConstants.BOTTOMSwingConstants.BOTTOMSwingConstants.BOTTOMSwingConstants.BOTTOM Coloca o texto na parte inferior.

Page 19: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

19

37

2005 by Pearson Education do Brasil

Criando e exibindo uma janela LabelFrame

• Outros métodos Jframe:

– setDefaultCloseOperation()

• Por padrão fechar uma janela só a oculta.

• O método acima determina como a aplicação reage quando o usuário clica no botão de fechar, isto é, especifica a operação de fechamento padrão da janela. , através de seu argumento (porexemplo JFrame.EXIT_ON_CLOSE para indicar que o programadeve terminar quando a janela fechar)

– setSize()

• Especifica a largura e altura da janela, através de seus argumentos.

– setVisible()

• Determina se a janela é exibida (true) ou não (false), através de seu argumento.

38

2005 by Pearson Education do Brasil

11.5 Campos de texto e uma introdução ao tratamento de eventos com classes aninhadas

• Um usuário interage com uma GUI para indicar as tarefas que o aplicativo deve realizar.

• GUIs são baseadas em evento:

– Uma interação com o usuário cria um evento, que guia o programa para realizar uma tarefa.

• Eventos comuns são clicar em um botão, digitar em um campo de texto, selecionar um item em um menu, fechar uma janela e mover o mouse.

– O evento causa uma chamada a um método que chamou um handler de evento.

• Handler de evento = código que realiza uma tarefa em resposta a um evento.

• O processo total de responder a eventos é conhecido comotratamento de evento.

Page 20: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

20

39

2005 by Pearson Education do Brasil

11.5 Campos de texto e uma introdução ao tratamento de eventos com classes aninhadas. (Continuação)

• Classe JTextComponent (javax.swing.text):

– Superclasse de JTextField (javax.swing) – fornecerecursos comuns a componentes baseados em texto.

• Superclasse de JPasswordField (javax.swing) – adicionamétodos específicos para processamento de senhas.

– Adiciona o caractere de eco para ocultar a entrada de texto no componente.

– Permite que o usuário insira texto no componente quando o componente tem o foco da aplicação. Um componente podereceber o foco com um click do usuário nele.

– Depois que o texto for digitado no componente, e Enter for pressionado, um evento ocorre, relacionado ao componente emquestão.

40

2005 by Pearson Education do Brasil

Resumo

TextFieldFrameTextFieldFrameTextFieldFrameTextFieldFrame.java.java.java.java

(1 de 3)

1 // Fig. 11.9: TextFieldFrame.java// Fig. 11.9: TextFieldFrame.java// Fig. 11.9: TextFieldFrame.java// Fig. 11.9: TextFieldFrame.java 2 // Demonstra// Demonstra// Demonstra// Demonstrando a classendo a classendo a classendo a classe JTextField. JTextField. JTextField. JTextField. 3 importimportimportimport java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout;

4 importimportimportimport java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener;

5 importimportimportimport java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent;

6 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

7 importimportimportimport javax.swing.JTextField; javax.swing.JTextField; javax.swing.JTextField; javax.swing.JTextField;

8 importimportimportimport javax.swing.JPasswordField; javax.swing.JPasswordField; javax.swing.JPasswordField; javax.swing.JPasswordField;

9 importimportimportimport javax.swing.JOptionPane; javax.swing.JOptionPane; javax.swing.JOptionPane; javax.swing.JOptionPane;

10 11 publicpublicpublicpublic classclassclassclass TextFieldFrame TextFieldFrame TextFieldFrame TextFieldFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

12 {{{{

13 privateprivateprivateprivate JTextField textField1; JTextField textField1; JTextField textField1; JTextField textField1; // // // // campo de texto com tamanho configuradocampo de texto com tamanho configuradocampo de texto com tamanho configuradocampo de texto com tamanho configurado

14 privateprivateprivateprivate JTextField textField2 JTextField textField2 JTextField textField2 JTextField textField2; ; ; ; // // // // campo de texto construído com textocampo de texto construído com textocampo de texto construído com textocampo de texto construído com texto

15 privateprivateprivateprivate JTextField textField3; JTextField textField3; JTextField textField3; JTextField textField3; // // // // campo de texto com texto e tamanhocampo de texto com texto e tamanhocampo de texto com texto e tamanhocampo de texto com texto e tamanho

16 privateprivateprivateprivate JPasswordField passwordField; JPasswordField passwordField; JPasswordField passwordField; JPasswordField passwordField; // // // // campo de senha com textocampo de senha com textocampo de senha com textocampo de senha com texto

17 18 // // // // Construtor Construtor Construtor Construtor TextFieldFrame TextFieldFrame TextFieldFrame TextFieldFrame adicionaadicionaadicionaadiciona JTextFields JTextFields JTextFields JTextFields aaaa JFrame JFrame JFrame JFrame 19 publicpublicpublicpublic TextFieldFrame() TextFieldFrame() TextFieldFrame() TextFieldFrame()

20 { { { {

21 supersupersupersuper( ( ( ( "Testing JTextField and JPasswordField""Testing JTextField and JPasswordField""Testing JTextField and JPasswordField""Testing JTextField and JPasswordField" ); ); ); );

22 setLayout( setLayout( setLayout( setLayout( newnewnewnew FlowLayout() ); FlowLayout() ); FlowLayout() ); FlowLayout() ); // // // // configuraconfiguraconfiguraconfigura layout layout layout layout de frame de frame de frame de frame 23 24 // // // // constrói textfield com 10 colunasconstrói textfield com 10 colunasconstrói textfield com 10 colunasconstrói textfield com 10 colunas

25 textFieltextFieltextFieltextField1 = d1 = d1 = d1 = newnewnewnew JTextField( JTextField( JTextField( JTextField( 10101010 ); ); ); );

26 add( textField1 ); add( textField1 ); add( textField1 ); add( textField1 ); // ad// ad// ad// adicionaicionaicionaiciona textField1 textField1 textField1 textField1 aaaa JFrame JFrame JFrame JFrame 27

Cria um novo JTextField, indicando um tamanho de 10

colunas. Se o texto a ser digitadofor maior do que 10 caracteres ele

ficará parcialmente escondido, podendo ser visualizados pelas

teclas de seta

Seta o título da frame, peloconstrutor da superclasse

Page 21: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

21

41

2005 by Pearson Education do Brasil

Resumo

TextFieldFrameTextFieldFrameTextFieldFrameTextFieldFrame.java.java.java.java

(2 de 3)

28 // // // // constrói campo de texto com texto padrãoconstrói campo de texto com texto padrãoconstrói campo de texto com texto padrãoconstrói campo de texto com texto padrão 29 textField2 = textField2 = textField2 = textField2 = newnewnewnew JTextField( JTextField( JTextField( JTextField( "Enter text here""Enter text here""Enter text here""Enter text here" ); ); ); );

30 add( textField2 ); add( textField2 ); add( textField2 ); add( textField2 ); // ad// ad// ad// adicionaicionaicionaiciona textField2 textField2 textField2 textField2 aaaa JFrame JFrame JFrame JFrame 31 32 // constr// constr// constr// constróióióiói textfield textfield textfield textfield com texto padrãocom texto padrãocom texto padrãocom texto padrão eeee 21 colun 21 colun 21 colun 21 colunaaaassss 33 textField3 = textField3 = textField3 = textField3 = newnewnewnew JTextField( JTextField( JTextField( JTextField( "Uneditable text field""Uneditable text field""Uneditable text field""Uneditable text field", , , , 21212121 ); ); ); );

34 textField3.setEditable( textField3.setEditable( textField3.setEditable( textField3.setEditable( falsefalsefalsefalse ); ); ); ); // // // // desativa a ediçãodesativa a ediçãodesativa a ediçãodesativa a edição 35 add( textField3 ); add( textField3 ); add( textField3 ); add( textField3 ); // ad// ad// ad// adicionaicionaicionaiciona textField3 textField3 textField3 textField3 aoaoaoao JFrame JFrame JFrame JFrame 36 37 // // // // constrói passwordfield comconstrói passwordfield comconstrói passwordfield comconstrói passwordfield com o texto padrão o texto padrão o texto padrão o texto padrão

38 passwordField = passwordField = passwordField = passwordField = newnewnewnew JPasswordField( JPasswordField( JPasswordField( JPasswordField( "Hidden text""Hidden text""Hidden text""Hidden text" ); ); ); );

39 add( passwordField ); add( passwordField ); add( passwordField ); add( passwordField ); // ad// ad// ad// adicionaicionaicionaiciona passwordField passwordField passwordField passwordField aaaa JFrame JFrame JFrame JFrame 40 41 // // // // registra handlers de evento registra handlers de evento registra handlers de evento registra handlers de evento

42 TextFieldHandler handler = TextFieldHandler handler = TextFieldHandler handler = TextFieldHandler handler = newnewnewnew TextFieldHandler( TextFieldHandler( TextFieldHandler( TextFieldHandler(););););

43 textField1.addActionListener( handler );textField1.addActionListener( handler );textField1.addActionListener( handler );textField1.addActionListener( handler );

44 textField2.addActionListener( handler );textField2.addActionListener( handler );textField2.addActionListener( handler );textField2.addActionListener( handler );

45 textField3.addActionListener( handler );textField3.addActionListener( handler );textField3.addActionListener( handler );textField3.addActionListener( handler );

46 passwordField.addActionListener( handler );passwordField.addActionListener( handler );passwordField.addActionListener( handler );passwordField.addActionListener( handler );

47 } } } } // // // // fim do construtorfim do construtorfim do construtorfim do construtor TextFieldFrame TextFieldFrame TextFieldFrame TextFieldFrame 48 49 // // // // classe interna private para tratamento de eventoclasse interna private para tratamento de eventoclasse interna private para tratamento de eventoclasse interna private para tratamento de evento

50 privateprivateprivateprivate classclassclassclass TextFieldHandler TextFieldHandler TextFieldHandler TextFieldHandler implementsimplementsimplementsimplements ActionListener ActionListener ActionListener ActionListener

51 { { { {

52 // process // process // process // processaaaa eventos de campo de textoeventos de campo de textoeventos de campo de textoeventos de campo de texto

53 publicpublicpublicpublic voidvoidvoidvoid a a a actionPerformed( ActionEvent event )ctionPerformed( ActionEvent event )ctionPerformed( ActionEvent event )ctionPerformed( ActionEvent event )

54 { { { {

55 String string = String string = String string = String string = """"""""; ; ; ; // // // // declara string a ser exibidadeclara string a ser exibidadeclara string a ser exibidadeclara string a ser exibida

56

Cria um novo JTextField, inicializando-o com um texto

Cria um novo JTextFieldnão editável (dispara

setEditable()), com textoinicial e 21 colunas de

tamanho

Cria um novo JPasswordField, com texto inicial (a largura do campo é a largura de tal texto)

Cria um handler de evento

Registra o handler de evento, paracada um dos componentes

Cria uma classe de handler de evento implementando a interface

ActionListener

Declara o método actionPerformed()

42

2005 by Pearson Education do Brasil

Resumo

TextFieldFrameTextFieldFrameTextFieldFrameTextFieldFrame.java.java.java.java

(3 de 3)

57 // // // // usuário pressionou Enter no JTextField textField1usuário pressionou Enter no JTextField textField1usuário pressionou Enter no JTextField textField1usuário pressionou Enter no JTextField textField1

58 ifififif ( ( ( ( event.getSource() == textField1event.getSource() == textField1event.getSource() == textField1event.getSource() == textField1 ) ) ) )

59 string = String.format( string = String.format( string = String.format( string = String.format( "textField1: %s""textField1: %s""textField1: %s""textField1: %s",,,,

60 event.getActionCommand()event.getActionCommand()event.getActionCommand()event.getActionCommand() ); ); ); );

61 62 // // // // usuáriousuáriousuáriousuário pressionou Enter no JTextField textField2 pressionou Enter no JTextField textField2 pressionou Enter no JTextField textField2 pressionou Enter no JTextField textField2

63 elseelseelseelse ifififif ( ( ( ( event.getSource() == textField2event.getSource() == textField2event.getSource() == textField2event.getSource() == textField2 ) ) ) )

64 string = String.format( string = String.format( string = String.format( string = String.format( "textField2: %s""textField2: %s""textField2: %s""textField2: %s",,,,

65 event.getActionCommand()event.getActionCommand()event.getActionCommand()event.getActionCommand() ); ); ); );

66 67 // // // // usuário pressionou Enter usuário pressionou Enter usuário pressionou Enter usuário pressionou Enter no no no no JTextField textField3JTextField textField3JTextField textField3JTextField textField3 68 elseelseelseelse ifififif ( ( ( ( event.getSource() == textField3event.getSource() == textField3event.getSource() == textField3event.getSource() == textField3 ) ) ) )

69 string = String.format( string = String.format( string = String.format( string = String.format( "textField3: %s""textField3: %s""textField3: %s""textField3: %s", , , ,

70 event.getActionCommand()event.getActionCommand()event.getActionCommand()event.getActionCommand() ); ); ); );

71 72 // // // // usuário pressionou Enter no usuário pressionou Enter no usuário pressionou Enter no usuário pressionou Enter no JTextField pasJTextField pasJTextField pasJTextField passwordFieldswordFieldswordFieldswordField 73 elseelseelseelse ifififif ( ( ( ( event.getSource() == passwordFieldevent.getSource() == passwordFieldevent.getSource() == passwordFieldevent.getSource() == passwordField ) ) ) )

74 string = String.format( string = String.format( string = String.format( string = String.format( "passwordField: %s""passwordField: %s""passwordField: %s""passwordField: %s", , , ,

75 newnewnewnew String( String( String( String( passwordField.getPassword()passwordField.getPassword()passwordField.getPassword()passwordField.getPassword() ) ); ) ); ) ); ) );

76 77 // // // // exibe conteúdo do exibe conteúdo do exibe conteúdo do exibe conteúdo do JTextFieldJTextFieldJTextFieldJTextField 78 JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( nullnullnullnull, string ); , string ); , string ); , string );

79 } } } } // // // // fim do métodofim do métodofim do métodofim do método actionPerformed actionPerformed actionPerformed actionPerformed 80 } } } } // // // // fim da classefim da classefim da classefim da classe TextFieldHandler TextFieldHandler TextFieldHandler TextFieldHandler interna interna interna interna private private private private 81 } } } } // // // // fim da classe fim da classe fim da classe fim da classe TextFieldFrameTextFieldFrameTextFieldFrameTextFieldFrame

Testa se a origem do evento é o primeiro campo de texto

Obtém texto a partir do campo de texto

Obtém texto a partir do campo de texto

Obtém texto a partir do campo de texto

Obtém senha a partir do campo de senha, através do método getPassword()

Testa se a origem do evento é o segundo campo de texto

Testa se a origem do evento é o terceiro campo de texto

Testa se a origem do evento é o campo de senha

Page 22: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

22

43

2005 by Pearson Education do Brasil

Resumo

TextFieldTestTextFieldTestTextFieldTestTextFieldTest.java.java.java.java

(1 de 2)

1 // Fig. 11.10: TextFieldTest.java// Fig. 11.10: TextFieldTest.java// Fig. 11.10: TextFieldTest.java// Fig. 11.10: TextFieldTest.java 2 // Test// Test// Test// Testando ando ando ando TextFieldFrame.TextFieldFrame.TextFieldFrame.TextFieldFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass TextFieldTest TextFieldTest TextFieldTest TextFieldTest

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 TextFieldFrame textFieldFrame = TextFieldFrame textFieldFrame = TextFieldFrame textFieldFrame = TextFieldFrame textFieldFrame = newnewnewnew TextFieldF TextFieldF TextFieldF TextFieldFrame();rame();rame();rame();

10 textFieldFrame.setDefaultCloseOperation( textFieldFrame.setDefaultCloseOperation( textFieldFrame.setDefaultCloseOperation( textFieldFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 textFieldFrame.setSize( textFieldFrame.setSize( textFieldFrame.setSize( textFieldFrame.setSize( 325325325325, , , , 100100100100 ); ); ); ); // // // // configuraconfiguraconfiguraconfigura tamanho dtamanho dtamanho dtamanho do frameo frameo frameo frame 12 textFieldFrame.setVisible( textFieldFrame.setVisible( textFieldFrame.setVisible( textFieldFrame.setVisible( truetruetruetrue ); ); ); ); // // // // exibe o exibe o exibe o exibe o frameframeframeframe 13 } } } } // // // // fim defim defim defim de main main main main 14 } } } } // // // // fim da classe fim da classe fim da classe fim da classe TextFieldTestTextFieldTestTextFieldTestTextFieldTest

Aparência inicial

O que ocorre apóso enter no 1º. Campo de texto

44

2005 by Pearson Education do Brasil

Resumo

TextFieldTestTextFieldTestTextFieldTestTextFieldTest.java.java.java.java

(2 de 2)

Page 23: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

23

45

2005 by Pearson Education do Brasil

Passos necessários para configurar o tratamento de evento de um componente GUI

• Vários passos de codificação são requeridos para que uma aplicação responda a eventos:

– Criar uma classe para representar o handler de evento.

– Implementar uma interface ouvinte de evento apropriada, na classe que representa o handler.

– Registrar o handler de evento (indicar que um objeto do 1º. Passo deve ser notificado quando o evento ocorrer).

46

2005 by Pearson Education do Brasil

Utilizando uma classe aninhada para implementar um handler de evento

• Classe de primeiro nível:

– Não declarada dentro de uma outra classe.

• Classes aninhadas:

– Declaradas dentro de uma outra classe.

– Podem ser static ou não-static.

– Classes aninhadas não-static são chamadas classes internas.

• Freqüentemente utilizadas para tratamento de eventos, sendoque costuma ser criada uma classe para cada evento a ser tratado.

Page 24: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

24

47

2005 by Pearson Education do Brasil

Observação de engenharia de software 11.2

Uma classe interna tem permissão de acessar diretamente variáveis e métodos de sua classe de primeiro nível, mesmo se eles forem privateprivateprivateprivate.

48

2005 by Pearson Education do Brasil

Utilizando uma classe aninhada para implementar um handler de evento (Cont.)

• JTextField e JPasswordField:

– Pressionar Enter dentro de um desses campos causa um ActionEvent (java.awt.event).

• Um evento assim é processado pelos objetos que implementam a interface ActionListener(java.awt.event). Tal interface declara o métodoactionPerformed(), que deve ser implementado nas classeque forem se servir de tal interface. Esse método especifica as tarefas a serem realizadas quando ocorrer um ActionEvent, sendo disparada automaticamente quando tal evento ocorrer.

Page 25: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

25

49

2005 by Pearson Education do Brasil

Registrando o handler de evento para cada campo de texto

• Para que um handler de evento possa ser disparado quando um evento ocorrer é necessário associá-lo ao componente que contém o evento em questão.

• Registrando um handler de evento:

– Chama o método addActionListener() do componente pararegistrar um objeto que implementa ActionListener (que seráargumento do método).

– O objeto ActionListener ouve eventos no objeto ao qual foiregistrado. Se um ouvinte não for registrado então o evento éconsumido (ignorado pelo aplicativo).

– No caso do componente ser não editável, mesmo assim o eventopode ser disparado, caso o componente em questão venha a receberfoco durante a execução do aplicativo.

50

2005 by Pearson Education do Brasil

Observação de engenharia de software 11.3

O ouvinte de evento para um evento deve implementar a interface apropriada para o evento.

Page 26: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

26

51

2005 by Pearson Education do Brasil

Erro comum de programação 11.2

Esquecer de registrar um objeto tratador de eventos para um tipo de evento de um componente GUI particular faz com que o tipo seja ignorado.

52

2005 by Pearson Education do Brasil

Detalhes do método actionPerformed() da classe TextFieldHandler

• Origem do evento:

– Componente a partir do qual o evento se origina, isto é, com o qual o usuário interage.

– Quando um evento ocorre o sistema cria um objeto ActionEventúnico que contém informações sobre o evento que acabou de ocorrer, como a origem do evento. O sistema passa esse objeto em umachamada do método actionPerformed() do ouvinte de eventos.

– Pode ser determinado utilizando o método getSource(), de ActionEvent (pois este retorna uma referência ao objeto origemdo evento).

– O texto digitado pelo usuário em um JTextField pode ser adquirido utilizando getActionCommand() de ActionEvent.

– O texto em um JPasswordField pode ser adquirido utilizando o método getPassword() dela, e retorna um array de caracteres.

Page 27: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

27

53

2005 by Pearson Education do Brasil

11.6 Tipos comuns de eventos GUI e interfaces ouvintes

• Há muitos tipos de eventos que podem ocorrer quandoum usuário interage com uma GUI.

• As informações sobre qualquer evento GUI que ocorresão armazenadas em um objeto de uma classe queestende AWTEvent.

• Assim, os Tipos de eventos que podem ocorrer:

– Todos são subclasses de AWTEvent.

– Alguns são declarados no pacote java.awt.event.

– Aqueles específicos a componentes Swing sãodeclarados no pacote javax.swing.event.

54

2005 by Pearson Education do Brasil

11.6 Tipos comuns de eventos GUI e interfaces ouvintes (Continuação)

• O mecanismo de tratamento de evento se divide em três partes (conhecidocomo Modelo de Delegação de Evento):

– A origem do evento é o componente com o qual o usuário interage.

– O objeto do evento é criado e contém as informações sobre o evento que aconteceu, como uma referência à sua origem.

– O ouvinte de evento é notificado pela origem do evento quando um evento acontece e um de seus métodos executa uma resposta ao evento, recebendo como argumento o objeto do evento, que é utilizadojustamente para responder ao evento.

• Para cada tipo de objeto de evento, há em geral uma interface ouvinte de eventos correspondente. Um ouvinte de evento é um objeto que implementaa(s) interface(s) ouvintes de evento dos pacotes event.event.event.event. Cada uma dessasinterfaces especifica um ou mais métodos de tratamento de evento quedevem ser declarados na classe que implementa a interface.

• Quando um evento ocorre o componente GUI notifica seus ouvintesregistrados chamando o método de traamento apropriado de cada ouvinte.

Page 28: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

28

55

2005 by Pearson Education do Brasil

Figura 11.11 | Algumas classes de evento do pacote java.awt.eventjava.awt.eventjava.awt.eventjava.awt.event.

56

2005 by Pearson Education do Brasil

Figura 11.12 | Algumas interfaces ouvintes de eventos comuns do pacote java.awt.eventjava.awt.eventjava.awt.eventjava.awt.event.

Page 29: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

29

57

2005 by Pearson Education do Brasil

11.7 Como o tratamento de evento funciona

• Perguntas remanescentes:

– Como o handler de evento ficou registrado?• A associação ocorre através da chamada àaddActionListeneraddActionListeneraddActionListeneraddActionListener()()()() do componente origem do evento, tendo como argumento o ouvinte de evento.

– Como o componente GUI sabe chamar actionPerformed() em vez de algum outro método de tratamento de evento?

• Através do tipo de evento ao qual foi associado.

58

2005 by Pearson Education do Brasil

Registrando eventos

• Cada JComponent tem uma variável de instância listenerList (um array de ouvintes):

– Referencia um objeto do tipo EventListenerList (javax.swing.event).

– Mantém referências a todos os seus ouvintes registrados, para tratar os eventos do seucomponente . A associação é feita justamente atravésdo método addActionListeneraddActionListeneraddActionListeneraddActionListener(), (), (), (), ou outrosimilar, de acordo com o tipo de evento....

Page 30: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

30

59

2005 by Pearson Education do Brasil

Figura 11.13 | Registro de evento para JTextField textField1JTextField textField1JTextField textField1JTextField textField1 .

60

2005 by Pearson Education do Brasil

Invocação de handler de evento

• Quando um evento ocorre é despachado somente aos ouvintes dos eventos que correspondem ao tipo de evento.

– O despacho é o processo pelo qual o componente GUI chama o método de tratamento de evento apropriado.

– Eventos têm um ID de evento único que especifica o tipo de evento, e com isso o ouvinte e o método a serem chamados.

• Cada tipo de evento tem uma ou mais interfaces ouvintes de eventoscorrespondentes. Exemplo:

– ActionEvents são tratados por ActionListeners

– MouseEvents são tratados por MouseListeners e MouseMotionsListeners.

– KeyEvents são tratados por KeyListeners.

• Assim, tudo que precisa ser feito é registrar um handler de evento para o tipo particular de evento que o aplicativo exige e o componente GUI assegurará que o método apropriado do handler do evento é chamadoquando o evento ocorre.

Page 31: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

31

61

2005 by Pearson Education do Brasil

11.8 JButton

• Botão:

– Componente em que o usuário clica para acionaruma ação específica.

– Pode ser botão de comando, caixa de seleção, botão de alternância ou botão de opção.

– Os tipos de botões são subclasses da classe AbstractButton (javax.swing).

62

2005 by Pearson Education do Brasil

Figura 11.14 | Hierarquia do botão Swing.

Page 32: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

32

63

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.7

Em geral, os botões utilizam letras maiúsculas e minúsculas no estilo de título de livro.

64

2005 by Pearson Education do Brasil

11.8 JButton (Continuação)

• Botão de comando:

– Gera um ActionEvent quando é clicado.

– Criado com a classe JButton.

– O texto na face do botão é chamado rótulo do botão.

– Uma GUI pode ter muitos JButton, mas, emgeral, cada rótulo de botão deve ser único naparte da GUI em que é atualmente exibido.

Page 33: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

33

65

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.8

Ter mais de um JButtonJButtonJButtonJButton com o mesmo rótulo torna os JButtonJButtonJButtonJButtons ambíguos para o usuário.Forneça um rótulo único para cada botão.

66

2005 by Pearson Education do Brasil

Resumo

ButtonFrameButtonFrameButtonFrameButtonFrame.javajavajavajava

(1 de 2)

1 // Fig. 11.15: ButtonFrame.java// Fig. 11.15: ButtonFrame.java// Fig. 11.15: ButtonFrame.java// Fig. 11.15: ButtonFrame.java 2 // Cr// Cr// Cr// Criiiiando ando ando ando JButtons.JButtons.JButtons.JButtons. 3 importimportimportimport java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout;

4 importimportimportimport java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener;

5 importimportimportimport java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent;

6 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

7 importimportimportimport javax.swing.JButton; javax.swing.JButton; javax.swing.JButton; javax.swing.JButton;

8 importimportimportimport javax.sw javax.sw javax.sw javax.swing.Icon;ing.Icon;ing.Icon;ing.Icon;

9 importimportimportimport javax.swing.ImageIcon; javax.swing.ImageIcon; javax.swing.ImageIcon; javax.swing.ImageIcon;

10 importimportimportimport javax.swing.JOptionPane; javax.swing.JOptionPane; javax.swing.JOptionPane; javax.swing.JOptionPane;

11 12 publicpublicpublicpublic classclassclassclass ButtonFrame ButtonFrame ButtonFrame ButtonFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

13 {{{{

14 privateprivateprivateprivate JButton plainJButton; JButton plainJButton; JButton plainJButton; JButton plainJButton; // b// b// b// boooottttão apenas com textoão apenas com textoão apenas com textoão apenas com texto 15 privateprivateprivateprivate JButton fancyJButton; JButton fancyJButton; JButton fancyJButton; JButton fancyJButton; // b// b// b// boooottttão com ão com ão com ão com íconesíconesíconesícones 16 17 // ButtonFrame ad // ButtonFrame ad // ButtonFrame ad // ButtonFrame adiiiicionacionacionaciona JButtons JButtons JButtons JButtons aaaaoooo JFrame JFrame JFrame JFrame 18 publicpublicpublicpublic ButtonFrame() ButtonFrame() ButtonFrame() ButtonFrame()

19 { { { {

20 supersupersupersuper( ( ( ( "Testing Buttons""Testing Buttons""Testing Buttons""Testing Buttons" ); ); ); );

21 setLayout( new FlowLayout() ); setLayout( new FlowLayout() ); setLayout( new FlowLayout() ); setLayout( new FlowLayout() ); // // // // cccconfigura o onfigura o onfigura o onfigura o llllayoutayoutayoutayout do frame do frame do frame do frame 22 23 plainJButton = plainJButton = plainJButton = plainJButton = newnewnewnew JButton( JButton( JButton( JButton( "Plain B"Plain B"Plain B"Plain Button"utton"utton"utton" ); ); ); ); // b// b// b// boooottttão com textoão com textoão com textoão com texto 24 add( plainJButton ); add( plainJButton ); add( plainJButton ); add( plainJButton ); // a// a// a// addddicionaicionaicionaiciona plainJButton plainJButton plainJButton plainJButton aaaaoooo JFrame JFrame JFrame JFrame 25 26 Icon bug1 = Icon bug1 = Icon bug1 = Icon bug1 = newnewnewnew ImageIcon( getClass().getResource( ImageIcon( getClass().getResource( ImageIcon( getClass().getResource( ImageIcon( getClass().getResource( "bug1.gif""bug1.gif""bug1.gif""bug1.gif" ) ); ) ); ) ); ) );

27 Icon bug2 = Icon bug2 = Icon bug2 = Icon bug2 = newnewnewnew ImageIcon( getClass().getResource( ImageIcon( getClass().getResource( ImageIcon( getClass().getResource( ImageIcon( getClass().getResource( "bug2.gif""bug2.gif""bug2.gif""bug2.gif" ) ); ) ); ) ); ) );

28 fancyJButton = fancyJButton = fancyJButton = fancyJButton = newnewnewnew JButton( JButton( JButton( JButton( "Fancy Button""Fancy Button""Fancy Button""Fancy Button", bug1 ); , bug1 ); , bug1 ); , bug1 ); // // // // ccccononononfigurafigurafigurafigura imag imag imag imagemememem 29 fancyJButton.setRolloverIcon( bug2 ); fancyJButton.setRolloverIcon( bug2 ); fancyJButton.setRolloverIcon( bug2 ); fancyJButton.setRolloverIcon( bug2 ); // // // // cccconfigura imagem deonfigura imagem deonfigura imagem deonfigura imagem de rollover rollover rollover rollover

30 add( fancyJButton ); add( fancyJButton ); add( fancyJButton ); add( fancyJButton ); // // // // aaaadicionadicionadicionadiciona fancyJButton fancyJButton fancyJButton fancyJButton aaaaoooo JFrame JFrame JFrame JFrame

Declara duas variáveis de instância JButton

Cria um novo JButton, com texto

Cria dois ImageIcons

Cria um novo JButton, com imagem

Configura o ícone de rollover para JButton

Page 34: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

34

67

2005 by Pearson Education do Brasil

Resumo

BbuttonFrameBbuttonFrameBbuttonFrameBbuttonFrame.javajavajavajava

(2 de 2)

31 32 // cr// cr// cr// cria novoia novoia novoia novo ButtonHandler ButtonHandler ButtonHandler ButtonHandler para tratamento de evento de botpara tratamento de evento de botpara tratamento de evento de botpara tratamento de evento de botãoãoãoão 33 ButtonHandler handler = ButtonHandler handler = ButtonHandler handler = ButtonHandler handler = newnewnewnew ButtonHandler(); ButtonHandler(); ButtonHandler(); ButtonHandler();

34 fancyJButton.addActionListener( handler );fancyJButton.addActionListener( handler );fancyJButton.addActionListener( handler );fancyJButton.addActionListener( handler );

35 plainJButton.addActionListener( handlplainJButton.addActionListener( handlplainJButton.addActionListener( handlplainJButton.addActionListener( handler );er );er );er );

36 } } } } // // // // fim do construtor fim do construtor fim do construtor fim do construtor ButtonFrameButtonFrameButtonFrameButtonFrame 37 38 // // // // classe interna para tratamento de evento de botãoclasse interna para tratamento de evento de botãoclasse interna para tratamento de evento de botãoclasse interna para tratamento de evento de botão

39 privateprivateprivateprivate classclassclassclass ButtonHandler ButtonHandler ButtonHandler ButtonHandler implementsimplementsimplementsimplements ActionListener ActionListener ActionListener ActionListener

40 { { { {

41 // // // // trata evento de botãotrata evento de botãotrata evento de botãotrata evento de botão

42 publicpublicpublicpublic vovovovoidididid actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event )

43 { { { {

44 JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( ButtonFrame.ButtonFrame.ButtonFrame.ButtonFrame.thisthisthisthis, String.format(, String.format(, String.format(, String.format(

45 "You pressed: %s""You pressed: %s""You pressed: %s""You pressed: %s", , , , event.getActionCommand()event.getActionCommand()event.getActionCommand()event.getActionCommand() ) ); ) ); ) ); ) );

46 } } } } // // // // fim do método fim do método fim do método fim do método actionPerformedactionPerformedactionPerformedactionPerformed 47 } } } } // // // // fim da classefim da classefim da classefim da classe ButtonHandler ButtonHandler ButtonHandler ButtonHandler interna p interna p interna p interna privaterivaterivaterivate 48 }}}} // // // // fim da classe fim da classe fim da classe fim da classe ButtonFrameButtonFrameButtonFrameButtonFrame

Cria um handler para botões

Registra um handler de evento para cadabotão

A classe interna implementa ActionListener

Acessa a instância da classe externa utilizando essa referência, a partir daqual a caixa de diálogo será centralizada

Obtém o texto do JButtonpressionado

Notar que a referência this foi associada a classe ButtonFrame, indicando que é a classe mais externa, e não a mais interna, que deve ser utilizada como GUI-pai do diálogo.

68

2005 by Pearson Education do Brasil

Resumo

ButtonTest.javaButtonTest.javaButtonTest.javaButtonTest.java

(1 de 2)

1 // Fig. 11.16: ButtonTest.java// Fig. 11.16: ButtonTest.java// Fig. 11.16: ButtonTest.java// Fig. 11.16: ButtonTest.java 2 // Tes// Tes// Tes// Testandotandotandotando ButtonFrame. ButtonFrame. ButtonFrame. ButtonFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass ButtonTest ButtonTest ButtonTest ButtonTest

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 ButtonFrame buttonFrame = ButtonFrame buttonFrame = ButtonFrame buttonFrame = ButtonFrame buttonFrame = newnewnewnew ButtonFrame(); ButtonFrame(); ButtonFrame(); ButtonFrame(); // cr// cr// cr// criaiaiaia B B B ButtonFrameuttonFrameuttonFrameuttonFrame 10 buttonFrame.setDefaultCloseOperation( buttonFrame.setDefaultCloseOperation( buttonFrame.setDefaultCloseOperation( buttonFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 buttonFrame.setSize( buttonFrame.setSize( buttonFrame.setSize( buttonFrame.setSize( 275275275275, , , , 110110110110 ); ); ); ); // // // // configura tamanho do configura tamanho do configura tamanho do configura tamanho do frameframeframeframe 12 buttonFrame.setVisible( buttonFrame.setVisible( buttonFrame.setVisible( buttonFrame.setVisible( truetruetruetrue ); ); ); ); // // // // exibe o fexibe o fexibe o fexibe o framerameramerame 13 } } } } // // // // fim defim defim defim de main main main main 14 } } } } // // // // fimfimfimfim da classe da classe da classe da classe ButtonTestButtonTestButtonTestButtonTest

Page 35: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

35

69

2005 by Pearson Education do Brasil

Resumo

ButtonTest.javaButtonTest.javaButtonTest.javaButtonTest.java

(2 de 2)

70

2005 by Pearson Education do Brasil

11.8 JButton (Continuação)

• JButtons podem ter um ícone de rollover.

– Um ícone de rollover aparece quando o mouse éposicionado sobre um botão. Assim, o ícone se altera quando o mouse está dentro/fora do botão.

– Adicionado a um JButton com o método setRolloverIcon(), tendo como argumentoo ícone para rollover.

Page 36: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

36

71

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.9

Como a classe AbstractButtonAbstractButtonAbstractButtonAbstractButton suporta exibição de texto e imagens em um botão, todas as subclasses de AbstractButtonAbstractButtonAbstractButtonAbstractButton também suportam exibição de texto e imagens.

72

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.10

Utilizar ícones rollover para JButtonJButtonJButtonJButtons fornece aos usuários um feedback visual que indica que, quando eles clicam no mouse enquanto o cursor está posicionado sobre o botão, uma ação ocorrerá.

Page 37: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

37

73

2005 by Pearson Education do Brasil

Observação de engenharia de software 11.4

Quando utilizada em uma classe interna, a palavra-chave thisthisthisthis referencia o objeto de classe interna atual sendo manipulado. Um método de classe interna pode utilizar thisthisthisthisdo seu objeto de classe externa precedendo thisthisthisthis com o nome de classe externa e um ponto, como em ButtonFrame.thisButtonFrame.thisButtonFrame.thisButtonFrame.this.

74

2005 by Pearson Education do Brasil

11.9 Botões que mantêm o estado

• Botões de estado:

– O Swing contém três tipos de botões de estado, que tem valores ativado / desativado ouverdadeiro / falso:

• JToggleButton, JCheckBox e JRadioButton.

• JCheckBox e JRadioButton são subclasses de JToggleButton.

Page 38: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

38

75

2005 by Pearson Education do Brasil

11.9.1 JCheckBox• JCheckBox (caixa de seleção):

– Contém um rótulo de caixa de seleção que aparece à direita da caixa de seleção por padrão. O rótulo é informado através do construtor da classe.

– Gera um ItemEvent quando é clicado.

• ItemEvents são tratados por um objeto da interface ItemListener.

• Passado para o método itemStateChanged() da interface e queportanto deve ser implementado pelo ouvinte do evento. Este é o métodoque será disparado quando ocorre um clique no checkBox.

– A associação do ouvinte ao objeto do evento ocorre através do métodoaddItemListener().

– O método isSelected() retorna se uma caixa de seleção estáselecionada (true) ou não (false).

– Um aplicativo pode ter vários checkBox atuando em conjunto.

76

2005 by Pearson Education do Brasil

Resumo

CheckBoxFrameCheckBoxFrameCheckBoxFrameCheckBoxFrame.java.java.java.java

(1 de 3)

Tal exemplo utiliza 2 CheckBox paraselecionar o estilodesejado de fontedo texto exibidoem um JTextField.

1 // Fig. 11.17: CheckBoxFrame.java// Fig. 11.17: CheckBoxFrame.java// Fig. 11.17: CheckBoxFrame.java// Fig. 11.17: CheckBoxFrame.java 2 // Cr// Cr// Cr// Criando botõesiando botõesiando botõesiando botões JCheckBox. JCheckBox. JCheckBox. JCheckBox. 3 importimportimportimport java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout;

4 importimportimportimport java.awt.Font; java.awt.Font; java.awt.Font; java.awt.Font;

5 importimportimportimport java.awt.event.ItemListener; java.awt.event.ItemListener; java.awt.event.ItemListener; java.awt.event.ItemListener;

6 importimportimportimport java.awt.event.ItemEvent; java.awt.event.ItemEvent; java.awt.event.ItemEvent; java.awt.event.ItemEvent;

7 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

8 importimportimportimport javax.swi javax.swi javax.swi javax.swing.JTextField;ng.JTextField;ng.JTextField;ng.JTextField;

9 importimportimportimport javax.swing.JCheckBox; javax.swing.JCheckBox; javax.swing.JCheckBox; javax.swing.JCheckBox;

10 11 publicpublicpublicpublic classclassclassclass CheckBoxFrame CheckBoxFrame CheckBoxFrame CheckBoxFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

12 {{{{

13 privateprivateprivateprivate JTextField textField; JTextField textField; JTextField textField; JTextField textField; // // // // exibe o texto na alteração de fontesexibe o texto na alteração de fontesexibe o texto na alteração de fontesexibe o texto na alteração de fontes

14 privateprivateprivateprivate JCheckBox boldJCheckBox; JCheckBox boldJCheckBox; JCheckBox boldJCheckBox; JCheckBox boldJCheckBox; // // // // pppparaaraaraara aplicaraplicaraplicaraplicar////remover selremover selremover selremover seleçãoeçãoeçãoeção de negritode negritode negritode negrito

15 privateprivateprivateprivate JCheckBox italicJCheckBox; JCheckBox italicJCheckBox; JCheckBox italicJCheckBox; JCheckBox italicJCheckBox; // // // // para aplicarpara aplicarpara aplicarpara aplicar////removerremoverremoverremover seleção seleção seleção seleção de de de de ititititáááálilililicocococo 16 17 // // // // construtor construtor construtor construtor CheckBoxFrame CheckBoxFrame CheckBoxFrame CheckBoxFrame adicionaadicionaadicionaadiciona JCheckBoxes JCheckBoxes JCheckBoxes JCheckBoxes aaaa JFrame JFrame JFrame JFrame 18 publicpublicpublicpublic CheckBoxFrame() CheckBoxFrame() CheckBoxFrame() CheckBoxFrame()

19 { { { {

20 supersupersupersuper( ( ( ( "JCheckBox Test""JCheckBox Test""JCheckBox Test""JCheckBox Test" ); ); ); );

21 setLayout( setLayout( setLayout( setLayout( newnewnewnew FlowLayout() ); FlowLayout() ); FlowLayout() ); FlowLayout() ); // // // // configura oconfigura oconfigura oconfigura o layout layout layout layout do frame do frame do frame do frame 22 23 // // // // configura JTextField e sua fonteconfigura JTextField e sua fonteconfigura JTextField e sua fonteconfigura JTextField e sua fonte

24 textField = textField = textField = textField = newnewnewnew JTextField( JTextField( JTextField( JTextField( "Watch the font style change""Watch the font style change""Watch the font style change""Watch the font style change", , , , 20202020 ); ); ); );

25 textField.setFont( textField.setFont( textField.setFont( textField.setFont( newnewnewnew Font( Font( Font( Font( "Serif""Serif""Serif""Serif", , , , FontFontFontFont.PLAIN.PLAIN.PLAIN.PLAIN, , , , 14141414 ) ); ) ); ) ); ) );

26 add( textField ); add( textField ); add( textField ); add( textField ); // ad// ad// ad// adicionaicionaicionaiciona textField textField textField textField aaaa JFrame JFrame JFrame JFrame 27

Declara duas variáveis de instância JCheckBox

Configura a origem do campo de texto, através de um objeto Font.

Seus argumentos são: tipo, formato e tamanho da fonte.

Page 39: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

39

77

2005 by Pearson Education do Brasil

Resumo

CheckBoxFrameCheckBoxFrameCheckBoxFrameCheckBoxFrame.java.java.java.java

(2 de 3)

28 boldJCheckBox = boldJCheckBox = boldJCheckBox = boldJCheckBox = newnewnewnew JCheckBox( JCheckBox( JCheckBox( JCheckBox( "Bold""Bold""Bold""Bold" ); ); ); ); // // // // cria caixa de seleção de negritocria caixa de seleção de negritocria caixa de seleção de negritocria caixa de seleção de negrito

29 italicJCheckBox = italicJCheckBox = italicJCheckBox = italicJCheckBox = newnewnewnew JCheckBox( JCheckBox( JCheckBox( JCheckBox( "Italic""Italic""Italic""Italic" ); ); ); ); // cr// cr// cr// criaiaiaia it it it itáááállllicoicoicoico 30 add( boldJCheckBox ); add( boldJCheckBox ); add( boldJCheckBox ); add( boldJCheckBox ); // ad // ad // ad // adicionaicionaicionaiciona caixa de seleçcaixa de seleçcaixa de seleçcaixa de seleção para negrito aão para negrito aão para negrito aão para negrito a JFrame JFrame JFrame JFrame 31 add( italicJCheckBox ); add( italicJCheckBox ); add( italicJCheckBox ); add( italicJCheckBox ); // ad// ad// ad// adicionaicionaicionaiciona caixa de seleção para negrito caixa de seleção para negrito caixa de seleção para negrito caixa de seleção para negrito aaaa JFrame JFrame JFrame JFrame 32 33 // regist// regist// regist// registrararara listenerslistenerslistenerslisteners para para para para JCheckBoxes JCheckBoxes JCheckBoxes JCheckBoxes 34 CheckBoxHandler handler = CheckBoxHandler handler = CheckBoxHandler handler = CheckBoxHandler handler = newnewnewnew CheckBoxHandler(); CheckBoxHandler(); CheckBoxHandler(); CheckBoxHandler();

35 boldJCheckBox.addItemListener( handler );boldJCheckBox.addItemListener( handler );boldJCheckBox.addItemListener( handler );boldJCheckBox.addItemListener( handler );

36 italicJCheckBox.addItemListener( handler );italicJCheckBox.addItemListener( handler );italicJCheckBox.addItemListener( handler );italicJCheckBox.addItemListener( handler );

37 } } } } // // // // fim do construtorfim do construtorfim do construtorfim do construtor CheckBoxFrame CheckBoxFrame CheckBoxFrame CheckBoxFrame 38 39 // // // // classe interna private para tratamento de evento ItemListenerclasse interna private para tratamento de evento ItemListenerclasse interna private para tratamento de evento ItemListenerclasse interna private para tratamento de evento ItemListener

40 privateprivateprivateprivate classclassclassclass CheckBoxHandler CheckBoxHandler CheckBoxHandler CheckBoxHandler implementsimplementsimplementsimplements ItemListener ItemListener ItemListener ItemListener

41 { { { {

42 privateprivateprivateprivate intintintint valBold = valBold = valBold = valBold = Font.PLAINFont.PLAINFont.PLAINFont.PLAIN; ; ; ; // // // // controla o estilo de fonte negritocontrola o estilo de fonte negritocontrola o estilo de fonte negritocontrola o estilo de fonte negrito

43 privateprivateprivateprivate intintintint valItalic = valItalic = valItalic = valItalic = Font.PLAINFont.PLAINFont.PLAINFont.PLAIN; ; ; ; // // // // controla o estilo de fonte controla o estilo de fonte controla o estilo de fonte controla o estilo de fonte itálicoitálicoitálicoitálico

44 45 // respond// respond// respond// responde aos eventos de caixa de seleçãoe aos eventos de caixa de seleçãoe aos eventos de caixa de seleçãoe aos eventos de caixa de seleção 46 publicpublicpublicpublic voidvoidvoidvoid itemStateChanged( ItemEvent event ) itemStateChanged( ItemEvent event ) itemStateChanged( ItemEvent event ) itemStateChanged( ItemEvent event )

47 { { { {

48 // process // process // process // processa a a a aos aos aos aos eventos de caixa de seleçeventos de caixa de seleçeventos de caixa de seleçeventos de caixa de seleção de negritoão de negritoão de negritoão de negrito 49 ifififif ( ( ( ( event.getSource() == boldJCheckBoxevent.getSource() == boldJCheckBoxevent.getSource() == boldJCheckBoxevent.getSource() == boldJCheckBox ) ) ) )

50 valBold = valBold = valBold = valBold =

51 boldJCheckBoboldJCheckBoboldJCheckBoboldJCheckBox.isSelected()x.isSelected()x.isSelected()x.isSelected() ? ? ? ? Font.BOLDFont.BOLDFont.BOLDFont.BOLD : : : : Font.PLAINFont.PLAINFont.PLAINFont.PLAIN;;;;

52

Cria dois JCheckBoxes

Cria um handler de evento

Registra um handler de evento com JCheckBoxes criados

A classe interna implementa ItemListener

O método itemStateChanged() échamado quando uma JCheckBox é clicada

Testa se JCheckBox está selecionada. Se estiver o estilo de fonte é setado com negrito, caso contrário com normal

78

2005 by Pearson Education do Brasil

Resumo

CheckBoxFrameCheckBoxFrameCheckBoxFrameCheckBoxFrame.java.java.java.java

(3 de 3)

53 // process // process // process // processa eventos de caixa de seleça eventos de caixa de seleça eventos de caixa de seleça eventos de caixa de seleção de ão de ão de ão de ititititááááliclicliclicoooo 54 ifififif ( ( ( ( event.getSource() == italicJCheckBoxevent.getSource() == italicJCheckBoxevent.getSource() == italicJCheckBoxevent.getSource() == italicJCheckBox ) ) ) )

55 valItalic = valItalic = valItalic = valItalic =

56 italicJCheckBox.isSelected()italicJCheckBox.isSelected()italicJCheckBox.isSelected()italicJCheckBox.isSelected() ? ? ? ? Font.ITALICFont.ITALICFont.ITALICFont.ITALIC : : : : Font.PLAINFont.PLAINFont.PLAINFont.PLAIN;;;;

57 58 // // // // cccconfigura onfigura onfigura onfigura fonte do fonte do fonte do fonte do campo de textocampo de textocampo de textocampo de texto 59 textField.setFont( textField.setFont( textField.setFont( textField.setFont(

60 newnewnewnew Font( Font( Font( Font( "Serif""Serif""Serif""Serif", valBold + valItalic, , valBold + valItalic, , valBold + valItalic, , valBold + valItalic, 14141414 ) ); ) ); ) ); ) );

61 } } } } // // // // fim do métodofim do métodofim do métodofim do método itemStateChangeditemStateChangeditemStateChangeditemStateChanged 62 } } } } // // // // ffffim da classeim da classeim da classeim da classe CheckBoxHandler CheckBoxHandler CheckBoxHandler CheckBoxHandler interna private interna private interna private interna private 63 } } } } // // // // fim da classefim da classefim da classefim da classe CheckBoxFrameCheckBoxFrameCheckBoxFrameCheckBoxFrame

Testa a origem do evento (qualcomponente foi clicado)

O método isSelected()retorna se JCheckBox estáselecionada

Tratamento de Fontes:• O método setFont() é herdado de Component. É utilizado para configurar a fonte do componente como um novo objeto da classe Font (java.awt).• O construtor da classe Font contém os argumentos: nome da fonte (String), estilo da fonte (constantes da classe Font. Como: Font.PLAIN, Font.BOLD, Font.ITALIC) e tamanho da fonte. No caso da fonte, quando mais de um estilo for ser considerado deve-se passar como argumento a soma de tais estilos (constantes).

Relacionamento entre uma classe interna e sua classe de primeiro nível:• Uma classe interna tem um relacionamento especial com sua classe de primeiro nível. A classe interna tem permissão de acessar diretamente todas as variáveis de instância e métodos da classe de primeiro nível.

Page 40: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

40

79

2005 by Pearson Education do Brasil

Resumo

CheckBoxTestCheckBoxTestCheckBoxTestCheckBoxTest.java.java.java.java

1 // Fig. 11.18: CheckBoxTest.java// Fig. 11.18: CheckBoxTest.java// Fig. 11.18: CheckBoxTest.java// Fig. 11.18: CheckBoxTest.java 2 // Test// Test// Test// Testandoandoandoando CheckBoxFrame. CheckBoxFrame. CheckBoxFrame. CheckBoxFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass CheckBoxTest CheckBoxTest CheckBoxTest CheckBoxTest

6 {{{{

7 public static voidpublic static voidpublic static voidpublic static void main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 CheckBoxFrame checkBoxFrame = CheckBoxFrame checkBoxFrame = CheckBoxFrame checkBoxFrame = CheckBoxFrame checkBoxFrame = newnewnewnew CheckBoxFrame() CheckBoxFrame() CheckBoxFrame() CheckBoxFrame(); ; ; ;

10 checkBoxFrame.setDefaultCloseOperation( checkBoxFrame.setDefaultCloseOperation( checkBoxFrame.setDefaultCloseOperation( checkBoxFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 checkBoxFrame.setSize( checkBoxFrame.setSize( checkBoxFrame.setSize( checkBoxFrame.setSize( 275275275275, , , , 100100100100 ); ); ); ); // // // // configura o tamanho do configura o tamanho do configura o tamanho do configura o tamanho do frameframeframeframe 12 checkBoxFrame.setVisible( checkBoxFrame.setVisible( checkBoxFrame.setVisible( checkBoxFrame.setVisible( truetruetruetrue ); ); ); ); // // // // exibe o exibe o exibe o exibe o frameframeframeframe 13 } } } } // // // // fim de mfim de mfim de mfim de mainainainain 14 } } } } // // // // fimfimfimfim da classe da classe da classe da classe CheckBoxTest CheckBoxTest CheckBoxTest CheckBoxTest

80

2005 by Pearson Education do Brasil

11.9.2 JRadioButton• JRadioButton (opção):

– Tem dois estados – selecionado e não selecionado.

– Normalmente aparece em um grupo no qual somente um botão de opção pode ser selecionado de cada vez.

• Grupo mantido por um objeto ButtonGroup (javax.swing).

– Serve para organizar um grupo de botões (estabelecer um relacionamento lógico) e ele mesmo não é exibido em uma GUI, apenas os radioButtons que o compõe.

– Declara o método add() para adicionar um JRadioButton ao grupo.

– Tais botões de opção normalmente, representam opções mutuamente exclusivas.

– Gera um itemEventitemEventitemEventitemEvent quando é clicado. Tendo tratamento similar ao JCheckBoxJCheckBoxJCheckBoxJCheckBox.

Page 41: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

41

81

2005 by Pearson Education do Brasil

Erro comum de programação 11.3

Adicionar um objeto ButtonGroupButtonGroupButtonGroupButtonGroup (ou um objeto de nenhuma outra classe que não deriva de ComponentComponentComponentComponent) a um contêiner resulta em um erro de compilação.

82

2005 by Pearson Education do Brasil

ResumoRadioButtonFrameRadioButtonFrameRadioButtonFrameRadioButtonFrame

.java.java.java.java

(1 de 3)

Novamente um exemplo paraalterar fonte de um textField

1 // Fig. 11.19: RadioButtonFrame.java// Fig. 11.19: RadioButtonFrame.java// Fig. 11.19: RadioButtonFrame.java// Fig. 11.19: RadioButtonFrame.java 2 // // // // Criando botões de opção utilizando ButtonGroup e JRadioButtonCriando botões de opção utilizando ButtonGroup e JRadioButtonCriando botões de opção utilizando ButtonGroup e JRadioButtonCriando botões de opção utilizando ButtonGroup e JRadioButton.... 3 importimportimportimport java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout;

4 importimportimportimport java.awt.Font; java.awt.Font; java.awt.Font; java.awt.Font;

5 importimportimportimport java.awt.event.ItemListener; java.awt.event.ItemListener; java.awt.event.ItemListener; java.awt.event.ItemListener;

6 importimportimportimport java.awt.event.ItemEvent; java.awt.event.ItemEvent; java.awt.event.ItemEvent; java.awt.event.ItemEvent;

7 importimportimportimport javax.swing.JFrame;javax.swing.JFrame;javax.swing.JFrame;javax.swing.JFrame;

8 importimportimportimport javax.swing.JTextField; javax.swing.JTextField; javax.swing.JTextField; javax.swing.JTextField;

9 importimportimportimport javax.swing.JRadioButton; javax.swing.JRadioButton; javax.swing.JRadioButton; javax.swing.JRadioButton;

10 importimportimportimport javax.swing.ButtonGroup; javax.swing.ButtonGroup; javax.swing.ButtonGroup; javax.swing.ButtonGroup;

11 12 publicpublicpublicpublic classclassclassclass RadioButtonFrame RadioButtonFrame RadioButtonFrame RadioButtonFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

13 {{{{

14 privateprivateprivateprivate JTextField textField; JTextField textField; JTextField textField; JTextField textField; // us// us// us// usado para exibir alteado para exibir alteado para exibir alteado para exibir alterações de fonterações de fonterações de fonterações de fonte 15 privateprivateprivateprivate Font plainFont; Font plainFont; Font plainFont; Font plainFont; // font// font// font// fonte para texto simplese para texto simplese para texto simplese para texto simples 16 privateprivateprivateprivate Font boldFont; Font boldFont; Font boldFont; Font boldFont; // font// font// font// fonte para texto e para texto e para texto e para texto negritonegritonegritonegrito 17 privateprivateprivateprivate Font italicFont; Font italicFont; Font italicFont; Font italicFont; // font // font // font // fonte para texto itálicoe para texto itálicoe para texto itálicoe para texto itálico 18 privateprivateprivateprivate Font boldItalicFont; Font boldItalicFont; Font boldItalicFont; Font boldItalicFont; // font// font// font// fonteeee para texto negpara texto negpara texto negpara texto negrito e irito e irito e irito e itálicotálicotálicotálico 19 privateprivateprivateprivate JRadioButton plainJRadioButton; JRadioButton plainJRadioButton; JRadioButton plainJRadioButton; JRadioButton plainJRadioButton; // selec// selec// selec// seleciona texto simplesiona texto simplesiona texto simplesiona texto simples 20 privateprivateprivateprivate JRadioButton boldJRadioButton; JRadioButton boldJRadioButton; JRadioButton boldJRadioButton; JRadioButton boldJRadioButton; // sele// sele// sele// seleciona texto negritociona texto negritociona texto negritociona texto negrito 21 privateprivateprivateprivate JRadioButton italicJRadioButton; JRadioButton italicJRadioButton; JRadioButton italicJRadioButton; JRadioButton italicJRadioButton; // selec// selec// selec// seleciona texto itálicoiona texto itálicoiona texto itálicoiona texto itálico 22 privateprivateprivateprivate JRadioButton boldItalicJRadioButton; JRadioButton boldItalicJRadioButton; JRadioButton boldItalicJRadioButton; JRadioButton boldItalicJRadioButton; // // // // negrito e itáliconegrito e itáliconegrito e itáliconegrito e itálico 23 privateprivateprivateprivate ButtonGroup radioGroup; ButtonGroup radioGroup; ButtonGroup radioGroup; ButtonGroup radioGroup; // // // // buttongroup para armazenar botões de opçãobuttongroup para armazenar botões de opçãobuttongroup para armazenar botões de opçãobuttongroup para armazenar botões de opção

24 25 // // // // construtor construtor construtor construtor RadioButtonFrame adRadioButtonFrame adRadioButtonFrame adRadioButtonFrame adicionaicionaicionaiciona JRadioButtons JRadioButtons JRadioButtons JRadioButtons aoaoaoao JFrame JFrame JFrame JFrame 26 publicpublicpublicpublic RadioButtonFrame() RadioButtonFrame() RadioButtonFrame() RadioButtonFrame()

27 { { { {

28 supersupersupersuper( ( ( ( "RadioButton Test""RadioButton Test""RadioButton Test""RadioButton Test" ); ); ); );

29 setLayout( setLayout( setLayout( setLayout( newnewnewnew FlowLayout() ); FlowLayout() ); FlowLayout() ); FlowLayout() ); // // // // configura layout doconfigura layout doconfigura layout doconfigura layout do frame frame frame frame 30

Declara quatro JRadioButtonse um ButtonGroup para

gerenciá-los

Page 42: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

42

83

2005 by Pearson Education do Brasil

Resumo

RadioButtonFrameRadioButtonFrameRadioButtonFrameRadioButtonFrame.java.java.java.java

(2 de 3)

31 textField = textField = textField = textField = newnewnewnew JTextField( JTextField( JTextField( JTextField( "Watch the font style change""Watch the font style change""Watch the font style change""Watch the font style change", , , , 25252525 ); ); ); );

32 add( textField ); add( textField ); add( textField ); add( textField ); // ad// ad// ad// adicionaicionaicionaiciona textField textField textField textField aoaoaoao JFrame JFrame JFrame JFrame 33 34 // cr // cr // cr // cria botões de opçãia botões de opçãia botões de opçãia botões de opçãoooo 35 plainJRadioButton = plainJRadioButton = plainJRadioButton = plainJRadioButton = newnewnewnew JRadioButton( JRadioButton( JRadioButton( JRadioButton( "Plain""Plain""Plain""Plain", , , , truetruetruetrue ); ); ); );

36 boldJRadioButton = boldJRadioButton = boldJRadioButton = boldJRadioButton = newnewnewnew JRadioButton( JRadioButton( JRadioButton( JRadioButton( "Bold""Bold""Bold""Bold", , , , falsefalsefalsefalse ); ); ); );

37 italicJRadioButton = italicJRadioButton = italicJRadioButton = italicJRadioButton = newnewnewnew JRadioButton( JRadioButton( JRadioButton( JRadioButton( "Italic""Italic""Italic""Italic", , , , falsefalsefalsefalse ); ); ); );

38 boldItalicJRadioButton = boldItalicJRadioButton = boldItalicJRadioButton = boldItalicJRadioButton = newnewnewnew JRadioButton( JRadioButton( JRadioButton( JRadioButton( "Bold/Italic""Bold/Italic""Bold/Italic""Bold/Italic", , , , falsefalsefalsefalse ); ); ); );

39 add( plainJR add( plainJR add( plainJR add( plainJRadioButton ); adioButton ); adioButton ); adioButton ); // ad// ad// ad// adiciona botão simples aoiciona botão simples aoiciona botão simples aoiciona botão simples ao JFrame JFrame JFrame JFrame 40 add( boldJRadioButton ); add( boldJRadioButton ); add( boldJRadioButton ); add( boldJRadioButton ); // // // // adiciona botão de negrito ao JFrameadiciona botão de negrito ao JFrameadiciona botão de negrito ao JFrameadiciona botão de negrito ao JFrame

41 add( italicJRadioButton ); add( italicJRadioButton ); add( italicJRadioButton ); add( italicJRadioButton ); // // // // adiciona botão adiciona botão adiciona botão adiciona botão de de de de ititititááááliclicliclico o o o aoaoaoao JFrame JFrame JFrame JFrame 42 add( boldItalicJRadioButton ); add( boldItalicJRadioButton ); add( boldItalicJRadioButton ); add( boldItalicJRadioButton ); // ad// ad// ad// adiciona iciona iciona iciona botão de itálico e nebotão de itálico e nebotão de itálico e nebotão de itálico e negritogritogritogrito 43 44 // // // // cria relacionamento lógico entre JRadioButtonscria relacionamento lógico entre JRadioButtonscria relacionamento lógico entre JRadioButtonscria relacionamento lógico entre JRadioButtons 45 radioGroup = radioGroup = radioGroup = radioGroup = newnewnewnew ButtonGroup(); ButtonGroup(); ButtonGroup(); ButtonGroup(); // cr// cr// cr// criiiiaaaa ButtonGroupButtonGroupButtonGroupButtonGroup 46 radioGroup.add( plainJRadioButton ); radioGroup.add( plainJRadioButton ); radioGroup.add( plainJRadioButton ); radioGroup.add( plainJRadioButton ); // ad// ad// ad// adiiiicionacionacionaciona ssssimples aoimples aoimples aoimples ao gr gr gr gruuuupopopopo 47 radioGroup.add( boldJRadioButton ); radioGroup.add( boldJRadioButton ); radioGroup.add( boldJRadioButton ); radioGroup.add( boldJRadioButton ); // ad// ad// ad// adiiiiciona negritociona negritociona negritociona negrito ao ao ao ao ggggrrrrupoupoupoupo 48 radioGroup.add( italicJRadioButton ); radioGroup.add( italicJRadioButton ); radioGroup.add( italicJRadioButton ); radioGroup.add( italicJRadioButton ); // // // // adadadadiiiicionacionacionaciona ititititááááliclicliclico aoo aoo aoo ao g g g grrrrupoupoupoupo 49 radioGroup.add( boldItalicJRadioButton ); radioGroup.add( boldItalicJRadioButton ); radioGroup.add( boldItalicJRadioButton ); radioGroup.add( boldItalicJRadioButton ); // ad// ad// ad// adiiiiciona negrito e itciona negrito e itciona negrito e itciona negrito e itálicoálicoálicoálico 50 51 // cr // cr // cr // cria objetos de fonteia objetos de fonteia objetos de fonteia objetos de fonte 52 plainFont = plainFont = plainFont = plainFont = newnewnewnew Font( Font( Font( Font( "Serif""Serif""Serif""Serif", , , , Font.PLAINFont.PLAINFont.PLAINFont.PLAIN, , , , 14141414 ); ); ); );

53 boldFont = boldFont = boldFont = boldFont = newnewnewnew Font( Font( Font( Font( "Serif""Serif""Serif""Serif", , , , Font.BOLDFont.BOLDFont.BOLDFont.BOLD, , , , 14141414 ); ); ); );

54 italicFont = italicFont = italicFont = italicFont = newnewnewnew Font( Font( Font( Font( "Serif""Serif""Serif""Serif", , , , Font.ITALICFont.ITALICFont.ITALICFont.ITALIC, , , , 14141414 ); ); ); );

55 boldItalicFont = boldItalicFont = boldItalicFont = boldItalicFont = newnewnewnew Font( Font( Font( Font( "Serif""Serif""Serif""Serif", , , , Font.BOLDFont.BOLDFont.BOLDFont.BOLD + + + + FoFoFoFont.ITALICnt.ITALICnt.ITALICnt.ITALIC, , , , 14141414 ); ); ); );

56 textField.setFont( plainFont ); textField.setFont( plainFont ); textField.setFont( plainFont ); textField.setFont( plainFont ); // // // // cccconfigura fonfigura fonfigura fonfigura foooonte nte nte nte iniiniiniiniccccial ial ial ial àààà ssssimplesimplesimplesimples 57

Cria os quatro JRadioButtons. O construtor tem como argumentos o rótulo e true/false para indicar se o

radionButton está selecionado

Cria o ButtonGroup

Adiciona cada JRadioButton ao ButtonGroup

Cria os objetos de Font, e inicializa a fonte do

textFiled

84

2005 by Pearson Education do Brasil

Resumo

RadioButtonFrameRadioButtonFrameRadioButtonFrameRadioButtonFrame.java.java.java.java

(3 de 3)

58 // // // // registra eventos para JRadioButtonsregistra eventos para JRadioButtonsregistra eventos para JRadioButtonsregistra eventos para JRadioButtons 59 plainJRadioButton.addItemListener(plainJRadioButton.addItemListener(plainJRadioButton.addItemListener(plainJRadioButton.addItemListener(

60 newnewnewnew RadioButtonHandler( plainFont ) ); RadioButtonHandler( plainFont ) ); RadioButtonHandler( plainFont ) ); RadioButtonHandler( plainFont ) );

61 boldJRadioButton.addItemListener(boldJRadioButton.addItemListener(boldJRadioButton.addItemListener(boldJRadioButton.addItemListener(

62 newnewnewnew Radio Radio Radio RadioButtonHandler( boldFont ) );ButtonHandler( boldFont ) );ButtonHandler( boldFont ) );ButtonHandler( boldFont ) );

63 italicJRadioButton.addItemListener(italicJRadioButton.addItemListener(italicJRadioButton.addItemListener(italicJRadioButton.addItemListener(

64 newnewnewnew RadioButtonHandler( italicFont ) ); RadioButtonHandler( italicFont ) ); RadioButtonHandler( italicFont ) ); RadioButtonHandler( italicFont ) );

65 boldItalicJRadioButton.addItemListener(boldItalicJRadioButton.addItemListener(boldItalicJRadioButton.addItemListener(boldItalicJRadioButton.addItemListener(

66 newnewnewnew RadioButtonHandler( boldItali RadioButtonHandler( boldItali RadioButtonHandler( boldItali RadioButtonHandler( boldItalicFont ) );cFont ) );cFont ) );cFont ) );

67 } } } } // // // // fim do construtor fim do construtor fim do construtor fim do construtor RadioButtonFrame RadioButtonFrame RadioButtonFrame RadioButtonFrame 68 69 // // // // classe interna private para tratar eventos de botão de opçãoclasse interna private para tratar eventos de botão de opçãoclasse interna private para tratar eventos de botão de opçãoclasse interna private para tratar eventos de botão de opção

70 privateprivateprivateprivate classclassclassclass RadioButtonHandler RadioButtonHandler RadioButtonHandler RadioButtonHandler implementsimplementsimplementsimplements ItemListener ItemListener ItemListener ItemListener

71 { { { {

72 privateprivateprivateprivate Font font; Font font; Font font; Font font; // // // // fonte assfonte assfonte assfonte associada com esse listenerociada com esse listenerociada com esse listenerociada com esse listener

73 74 publicpublicpublicpublic RadioButtonHandler( Font f ) RadioButtonHandler( Font f ) RadioButtonHandler( Font f ) RadioButtonHandler( Font f )

75 { { { {

76 font = f; font = f; font = f; font = f; // // // // configura a fonte desse listenerconfigura a fonte desse listenerconfigura a fonte desse listenerconfigura a fonte desse listener

77 } } } } // // // // fim dofim dofim dofim do construtor RadioButtonHandler construtor RadioButtonHandler construtor RadioButtonHandler construtor RadioButtonHandler 78

79 // // // // trata eventos de botãtrata eventos de botãtrata eventos de botãtrata eventos de botão de opçãoo de opçãoo de opçãoo de opção 80 publicpublicpublicpublic voidvoidvoidvoid itemStateChanged( ItemEvent event ) itemStateChanged( ItemEvent event ) itemStateChanged( ItemEvent event ) itemStateChanged( ItemEvent event )

81 { { { {

82 textField.setFont( font ); textField.setFont( font ); textField.setFont( font ); textField.setFont( font ); // // // // configuraconfiguraconfiguraconfigura font font font fonteeee dededede textField textField textField textField 83 } } } } // // // // fim do método fim do método fim do método fim do método itemStateChangeditemStateChangeditemStateChangeditemStateChanged 84 } } } } // // // // fim da classefim da classefim da classefim da classe RadioButtonHandler RadioButtonHandler RadioButtonHandler RadioButtonHandler interna interna interna interna pr pr pr privateivateivateivate 85 } } } } // // // // fim da classe fim da classe fim da classe fim da classe RadioButtonFrame RadioButtonFrame RadioButtonFrame RadioButtonFrame

Registra um handler de evento diferente com cada JRadioButton, associando a cada um, um handler com objetoFont diferente.

A classe interna do handler de evento implementa ItemListener

Quando o botão de opção é selecionado, a fonte do campo de texto é configurada com o valor passado para o construtor

Page 43: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

43

85

2005 by Pearson Education do Brasil

Resumo

RadioButtonTestRadioButtonTestRadioButtonTestRadioButtonTest.java.java.java.java

1 // Fig. 11.20: RadioButtonTest.java// Fig. 11.20: RadioButtonTest.java// Fig. 11.20: RadioButtonTest.java// Fig. 11.20: RadioButtonTest.java 2 // Test// Test// Test// Testaaaandondondondo RadioButtonFrame. RadioButtonFrame. RadioButtonFrame. RadioButtonFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass RadioButtonTest RadioButtonTest RadioButtonTest RadioButtonTest

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 RadioButtonFrame radioButtonFrame = RadioButtonFrame radioButtonFrame = RadioButtonFrame radioButtonFrame = RadioButtonFrame radioButtonFrame = newnewnewnew RadioButtonFrame();RadioButtonFrame();RadioButtonFrame();RadioButtonFrame();

10 radioButtonFrame.setDefaultCloseOperation( radioButtonFrame.setDefaultCloseOperation( radioButtonFrame.setDefaultCloseOperation( radioButtonFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 radioButtonFrame.setSize( radioButtonFrame.setSize( radioButtonFrame.setSize( radioButtonFrame.setSize( 300300300300, , , , 100100100100 ); ); ); ); // // // // cccconfigura tamanho doonfigura tamanho doonfigura tamanho doonfigura tamanho do frame frame frame frame 12 radioButtonFrame.setVisible( radioButtonFrame.setVisible( radioButtonFrame.setVisible( radioButtonFrame.setVisible( truetruetruetrue ); ); ); ); // // // // eeeexibe o xibe o xibe o xibe o frameframeframeframe 13 } } } } // // // // ffffim de im de im de im de mainmainmainmain 14 } } } } // // // // fim da classefim da classefim da classefim da classe RadioButtonTest RadioButtonTest RadioButtonTest RadioButtonTest

86

2005 by Pearson Education do Brasil

11.10 JComboBox e utilização de uma classe interna anônima para tratamento de eventos

• Caixa de combinação (ou lista drop-down)

– Fornece uma lista de itens a partir da qual o usuário pode fazer uma únicaseleção.

– Implementada pela classe JComboBox (subclasse de JComponent).

– Gera itemEventitemEventitemEventitemEvent, assim como JCheckBoxJCheckBoxJCheckBoxJCheckBox e JRadioButtonJRadioButtonJRadioButtonJRadioButton.

– O construtor de um JComboBoxJComboBoxJComboBoxJComboBox recebe como argumento um array de Strings com os elementos da lista que deve ser exibida. O primeiro item da lista é o item inicialmente exibido no comboBox.

– Cada item na lista tem um índice, iniciando com 0 (zero).

– O método setMaximumRowCount() configura o número máximo de linhas mostradas de cada vez.

– Para selecionar um item da lista clica-se no comboBox, que se expande em umalista a partir da qual o usuário pode fazer uma seleção.

– JComboBox fornece uma barra de rolagem e setas para cima e para baixo para percorrer a lista, quando há mais itens do que o máximo exibido por vez.

Page 44: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

44

87

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.11

Configure a contagem máxima de linha para uma JComboBoxJComboBoxJComboBoxJComboBox com um número de linhas que impede a lista de expandir-se para fora dos limites da janela em que ela é utilizada.

Essa configuração irá assegurar que a lista seja exibida corretamente quando for expandida pelo usuário.

88

2005 by Pearson Education do Brasil

Utilizando uma classe interna anônima para tratamento de evento

• Classe interna anônima:

– Forma especial de classe interna, declarada sem nome.

– Em geral, aparece dentro de uma chamada de método, sendo um argumento de tal método.

– Como com outras classes internas, uma classe internaanônima pode acessar os membros de sua classe de primeiro nível. No entanto, tem acesso limitado a variáveis locais do método em que é declarada.

– Deve-se criar um objeto da classe interna anônima no ponto em que a classe é declarada.

Page 45: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

45

89

2005 by Pearson Education do Brasil

Resumo

ComboBoxFrameComboBoxFrameComboBoxFrameComboBoxFrame.java.java.java.java

(1 de 2)

Aplicativo que utilizaum JComboBoxpara fornecer umalista de 4 nomesde arquivo de imagem a partirda qual o usuáriopode fazer a seleção de umaimagem que elequer exibir.

1 // Fig. 11.21: ComboBoxFrame.java// Fig. 11.21: ComboBoxFrame.java// Fig. 11.21: ComboBoxFrame.java// Fig. 11.21: ComboBoxFrame.java 2 // Us// Us// Us// Usandoandoandoando a JComboBox a JComboBox a JComboBox a JComboBox para para para para selecselecselecselecionarionarionarionar umaumaumauma image image image image para exibiçãopara exibiçãopara exibiçãopara exibição.... 3 importimportimportimport java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout;

4 importimportimportimport java.awt.event.ItemListener; java.awt.event.ItemListener; java.awt.event.ItemListener; java.awt.event.ItemListener;

5 importimportimportimport java.awt.event.ItemEvent; java.awt.event.ItemEvent; java.awt.event.ItemEvent; java.awt.event.ItemEvent;

6 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

7 importimportimportimport j j j javax.swing.JLabel;avax.swing.JLabel;avax.swing.JLabel;avax.swing.JLabel;

8 importimportimportimport javax.swing.JComboBox; javax.swing.JComboBox; javax.swing.JComboBox; javax.swing.JComboBox;

9 importimportimportimport javax.swing.Icon; javax.swing.Icon; javax.swing.Icon; javax.swing.Icon;

10 importimportimportimport javax.swing.ImageIcon; javax.swing.ImageIcon; javax.swing.ImageIcon; javax.swing.ImageIcon;

11 12 publicpublicpublicpublic classclassclassclass ComboBoxFrame ComboBoxFrame ComboBoxFrame ComboBoxFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

13 {{{{

14 privateprivateprivateprivate JComboBox imagesJComboBox; JComboBox imagesJComboBox; JComboBox imagesJComboBox; JComboBox imagesJComboBox; // // // // caixa de combinação p/ armazenarcaixa de combinação p/ armazenarcaixa de combinação p/ armazenarcaixa de combinação p/ armazenar nomes de ícones nomes de ícones nomes de ícones nomes de ícones

15 privateprivateprivateprivate JLabel label; JLabel label; JLabel label; JLabel label; // // // // rótulo para exibir ícone selecionadorótulo para exibir ícone selecionadorótulo para exibir ícone selecionadorótulo para exibir ícone selecionado 16 17 privateprivateprivateprivate String names[] = String names[] = String names[] = String names[] =

18 { { { { "bug1.gif""bug1.gif""bug1.gif""bug1.gif", , , , "bug2.gif""bug2.gif""bug2.gif""bug2.gif", , , , "travelbug.gif""travelbug.gif""travelbug.gif""travelbug.gif", , , , "buganim.gif""buganim.gif""buganim.gif""buganim.gif" }; }; }; };

19 privateprivateprivateprivate Icon icons[] = { Icon icons[] = { Icon icons[] = { Icon icons[] = {

20 newnewnewnew ImageIco ImageIco ImageIco ImageIcon( getClass().getResource( names[ n( getClass().getResource( names[ n( getClass().getResource( names[ n( getClass().getResource( names[ 0000 ] ) ), ] ) ), ] ) ), ] ) ),

21 newnewnewnew ImageIcon( getClass().getResource( names[ ImageIcon( getClass().getResource( names[ ImageIcon( getClass().getResource( names[ ImageIcon( getClass().getResource( names[ 1111 ] ) ), ] ) ), ] ) ), ] ) ),

22 newnewnewnew ImageIcon( getClass().getResource( names[ ImageIcon( getClass().getResource( names[ ImageIcon( getClass().getResource( names[ ImageIcon( getClass().getResource( names[ 2222 ] ) ), ] ) ), ] ) ), ] ) ),

23 newnewnewnew ImageIcon( getClass().getResource( names[ ImageIcon( getClass().getResource( names[ ImageIcon( getClass().getResource( names[ ImageIcon( getClass().getResource( names[ 3333 ] ) ) }; ] ) ) }; ] ) ) }; ] ) ) };

24 25 // // // // construtor construtor construtor construtor ComboBoxFrame adComboBoxFrame adComboBoxFrame adComboBoxFrame adicionaicionaicionaiciona JComboBox JComboBox JComboBox JComboBox aoaoaoao JFrame JFrame JFrame JFrame 26 publicpublicpublicpublic ComboBoxFrame() ComboBoxFrame() ComboBoxFrame() ComboBoxFrame()

27 { { { {

28 supersupersupersuper( ( ( ( "Testing JComboBox" "Testing JComboBox" "Testing JComboBox" "Testing JComboBox" ););););

29 setLayout( setLayout( setLayout( setLayout( newnewnewnew FlowLayout() ); FlowLayout() ); FlowLayout() ); FlowLayout() ); // // // // configuraconfiguraconfiguraconfigura layout layout layout layout do frame do frame do frame do frame 30

Declara a variável de instância JComboBox

Declara array com os 4 Icon a seremtrabalhados, cujas identificações foramestabelecidas no array antes declarado, names

90

2005 by Pearson Education do Brasil

Resumo

ComboBoxrameComboBoxrameComboBoxrameComboBoxrame.java.java.java.java

(2 de 2)

31 imagesJComboBox = imagesJComboBox = imagesJComboBox = imagesJComboBox = newnewnewnew JComboBox( names ); JComboBox( names ); JComboBox( names ); JComboBox( names ); // // // // configura aconfigura aconfigura aconfigura a JComboBox JComboBox JComboBox JComboBox 32 imagesJComboBox.setMaximumRowCount( imagesJComboBox.setMaximumRowCount( imagesJComboBox.setMaximumRowCount( imagesJComboBox.setMaximumRowCount( 3333 ); ); ); ); // // // // exibe trÊs linhasexibe trÊs linhasexibe trÊs linhasexibe trÊs linhas 33 34 imagesJComboBox.addItemListener(imagesJComboBox.addItemListener(imagesJComboBox.addItemListener(imagesJComboBox.addItemListener(

35 newnewnewnew ItemListe ItemListe ItemListe ItemListener() ner() ner() ner() // // // // classe interna anÔnimaclasse interna anÔnimaclasse interna anÔnimaclasse interna anÔnima 36 {{{{

37 // // // // trata evento trata evento trata evento trata evento JComboBoxJComboBoxJComboBoxJComboBox 38 publicpublicpublicpublic voidvoidvoidvoid itemStateChanged( ItemEvent event ) itemStateChanged( ItemEvent event ) itemStateChanged( ItemEvent event ) itemStateChanged( ItemEvent event )

39 {{{{

40 // // // // determina se caixa de seleção está marcada ou nãodetermina se caixa de seleção está marcada ou nãodetermina se caixa de seleção está marcada ou nãodetermina se caixa de seleção está marcada ou não 41 ifififif ( event.getStateChange() == ( event.getStateChange() == ( event.getStateChange() == ( event.getStateChange() == ItemEvent.SELECTEDItemEvent.SELECTEDItemEvent.SELECTEDItemEvent.SELECTED ) ) ) )

42 llllabel.setIcon( icons[abel.setIcon( icons[abel.setIcon( icons[abel.setIcon( icons[

43 imagesJComboBox.getSelectedIndex() ] );imagesJComboBox.getSelectedIndex() ] );imagesJComboBox.getSelectedIndex() ] );imagesJComboBox.getSelectedIndex() ] );

44 } } } } // // // // fim do método fim do método fim do método fim do método itemStateChangeditemStateChangeditemStateChangeditemStateChanged 45 } } } } // // // // fim da classe interna anônimafim da classe interna anônimafim da classe interna anônimafim da classe interna anônima 46 ); ); ); ); // // // // fim da chamada para fim da chamada para fim da chamada para fim da chamada para addItemListeneraddItemListeneraddItemListeneraddItemListener 47 48 add( imagesJComboBox ); add( imagesJComboBox ); add( imagesJComboBox ); add( imagesJComboBox ); // ad// ad// ad// adiciona a caixa de combinaçiciona a caixa de combinaçiciona a caixa de combinaçiciona a caixa de combinaçãoãoãoão aaaao JFrameo JFrameo JFrameo JFrame 49 label = label = label = label = newnewnewnew JLabel( icons[ JLabel( icons[ JLabel( icons[ JLabel( icons[ 0000 ] ); ] ); ] ); ] ); // // // // exibe o primeiroexibe o primeiroexibe o primeiroexibe o primeiro ííííconconconconeeee 50 add( label ); add( label ); add( label ); add( label ); // ad// ad// ad// adiciona rótulo aoiciona rótulo aoiciona rótulo aoiciona rótulo ao JFrame JFrame JFrame JFrame 51 } } } } // // // // fim dofim dofim dofim do construtor construtor construtor construtor ComboBoxFrame ComboBoxFrame ComboBoxFrame ComboBoxFrame 52 } } } } // // // // fim da classe fim da classe fim da classe fim da classe ComboBoxFrameComboBoxFrameComboBoxFrameComboBoxFrame

Cria JComboBox e configura a contagem máxima de linhas

Cria classe interna anônima como o handler de evento – dentro da chamada do método

Declara o método itemStateChanged

O método getSelectedIndex()identifica o item selecionado no comboBox.

Testa a alteração de estado da JComboBox – Interessa que o item esteja sendo selecionado

O argumento para addItemListener() deve ser um objeto ItemListener. O que está dentro dos parênteses da chamada do método é uma expressão de criação da instância de classe que declara uma classe interna anônima e cria um objeto dessa classe. Uma referência ao objeto criado é passado como argumento para o método. Os parênteses depois de ItemListener() indicam uma chamada ao construtor padrão da classe interna anônima. As chaves de abertura e fechamento após tal construtor delimitam o corpo da classe interna anônima.Para cada item selecionado de um comboBox, a seleção de outro item primeiro éremovida. Assim ocorrem dois itemEvents – um para o item removido e outro para o novo item selecionado.

Page 46: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

46

91

2005 by Pearson Education do Brasil

Resumo

ComboBoxTestComboBoxTestComboBoxTestComboBoxTest.java.java.java.java

1 // Fig. 11.22: ComboBoxTest.java// Fig. 11.22: ComboBoxTest.java// Fig. 11.22: ComboBoxTest.java// Fig. 11.22: ComboBoxTest.java 2 // Test// Test// Test// Testandoandoandoando ComboBoxFrame. ComboBoxFrame. ComboBoxFrame. ComboBoxFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass ComboBoxTest ComboBoxTest ComboBoxTest ComboBoxTest

6 {{{{

7 public static voidpublic static voidpublic static voidpublic static void main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 ComboBoxFrame comboBoxFrame = ComboBoxFrame comboBoxFrame = ComboBoxFrame comboBoxFrame = ComboBoxFrame comboBoxFrame = newnewnewnew ComboBoxFrame() ComboBoxFrame() ComboBoxFrame() ComboBoxFrame(); ; ; ;

10 comboBoxFrame.setDefaultCloseOperation( comboBoxFrame.setDefaultCloseOperation( comboBoxFrame.setDefaultCloseOperation( comboBoxFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 comboBoxFrame.setSize( comboBoxFrame.setSize( comboBoxFrame.setSize( comboBoxFrame.setSize( 350350350350, , , , 150150150150 ); ); ); ); // // // // configura o tamanho doconfigura o tamanho doconfigura o tamanho doconfigura o tamanho do frame frame frame frame 12 comboBoxFrame.setVisible( comboBoxFrame.setVisible( comboBoxFrame.setVisible( comboBoxFrame.setVisible( truetruetruetrue ); ); ); ); // // // // exibe o exibe o exibe o exibe o frameframeframeframe 13 } } } } // // // // fim de fim de fim de fim de mainmainmainmain 14 } } } } // // // // fimfimfimfim da classe da classe da classe da classe ComboBoxTestComboBoxTestComboBoxTestComboBoxTest

Barra de rolagem para rolar

pelositens na lista

setas de

rolagem

caixa de

rolagem

92

2005 by Pearson Education do Brasil

Observação de engenharia de software 11.5

Uma classe interna anônima declarada em um método pode acessar as variáveis de instância e métodos do objeto de classe de primeiro nível que a declararam, bem como as variáveis locais finalfinalfinalfinal do método, mas não pode acessar variáveis não-finalfinalfinalfinal do método.

Page 47: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

47

93

2005 by Pearson Education do Brasil

Observação de engenharia de software 11.6

Como qualquer outra classe, quando uma classe interna anônima implementa uma interface, a classe deve implementar cada método na interface.

94

2005 by Pearson Education do Brasil

11.11 JList• Lista:

– Exibe uma série de itens dentre os quais usuário pode selecionar um ou mais.

– Implementada pela classe JList, subclasse de JComponent.

– Permite listas de seleção única ou listas de múltipla seleção.

– Um ListSelectionEvent ocorre quando um item é selecionado.

• Tratado por um ListSelectionListener e passado para o método valueChanged(), que deve ser implementado no ouvinte.

– O método setVisibleRowCountsetVisibleRowCountsetVisibleRowCountsetVisibleRowCount()()()() permite determinar a quantidade de itens visualizados por vez (argumento informado).

– O método setSelecionModesetSelecionModesetSelecionModesetSelecionMode()()()() permite determinar o modo de seleção(simples/múltipla) da lista, recebendo normalmente como argumentoalguma constante da classe ListSelecionModelListSelecionModelListSelecionModelListSelecionModel(SINGLE_SELECTION(SINGLE_SELECTION(SINGLE_SELECTION(SINGLE_SELECTION – um item, SINGLE_INTERVAL_SELECTION , SINGLE_INTERVAL_SELECTION , SINGLE_INTERVAL_SELECTION , SINGLE_INTERVAL_SELECTION –itens contínuos, MULTIPLE_INTERVAL_SELECTION, MULTIPLE_INTERVAL_SELECTION, MULTIPLE_INTERVAL_SELECTION, MULTIPLE_INTERVAL_SELECTION – vários itens)))).

– O método para associar um ouvinte é addListSelectionListeneraddListSelectionListeneraddListSelectionListeneraddListSelectionListener()()()().

Page 48: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

48

95

2005 by Pearson Education do Brasil

ResumoListFrame.javaListFrame.javaListFrame.javaListFrame.java

(1 de 2)

Muda a cor de fundoda frame de acordo com a corselecionada nalista. Usa lista de seleção única.

1 // Fig. 11.23: ListFrame.java// Fig. 11.23: ListFrame.java// Fig. 11.23: ListFrame.java// Fig. 11.23: ListFrame.java 2 // Selec// Selec// Selec// Selecionando cores a partir de uma ionando cores a partir de uma ionando cores a partir de uma ionando cores a partir de uma JList.JList.JList.JList. 3 importimportimportimport java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout;

4 importimportimportimport java.awt.Color; java.awt.Color; java.awt.Color; java.awt.Color;

5 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

6 importimportimportimport javax.swing.JList; javax.swing.JList; javax.swing.JList; javax.swing.JList;

7 importimportimportimport javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane;

8 importimportimportimport javax.s javax.s javax.s javax.swing.event.ListSelectionListener;wing.event.ListSelectionListener;wing.event.ListSelectionListener;wing.event.ListSelectionListener;

9 importimportimportimport javax.swing.event.ListSelectionEvent; javax.swing.event.ListSelectionEvent; javax.swing.event.ListSelectionEvent; javax.swing.event.ListSelectionEvent;

10 importimportimportimport javax.swing.ListSelectionModel; javax.swing.ListSelectionModel; javax.swing.ListSelectionModel; javax.swing.ListSelectionModel;

11 12 publicpublicpublicpublic classclassclassclass ListFrame ListFrame ListFrame ListFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

13 {{{{

14 privateprivateprivateprivate JList colorJList; JList colorJList; JList colorJList; JList colorJList; // list// list// list// lista para exibir coresa para exibir coresa para exibir coresa para exibir cores 15 pripripriprivatevatevatevate finalfinalfinalfinal String colorNames[] = { String colorNames[] = { String colorNames[] = { String colorNames[] = { "Black""Black""Black""Black", , , , "Blue""Blue""Blue""Blue", , , , "Cyan""Cyan""Cyan""Cyan", , , ,

16 "Dark Gray""Dark Gray""Dark Gray""Dark Gray", , , , "Gray""Gray""Gray""Gray", , , , "Green""Green""Green""Green", , , , "Light Gray""Light Gray""Light Gray""Light Gray", , , , "Magenta""Magenta""Magenta""Magenta",,,,

17 "Orange""Orange""Orange""Orange", , , , "Pink""Pink""Pink""Pink", , , , "Red""Red""Red""Red", , , , "White""White""White""White", , , , "Yellow""Yellow""Yellow""Yellow" }; }; }; };

18 privateprivateprivateprivate finalfinalfinalfinal Color colors[] = { Color colors[] = { Color colors[] = { Color colors[] = { Color.BLACKColor.BLACKColor.BLACKColor.BLACK, , , , Color.BLUEColor.BLUEColor.BLUEColor.BLUE, , , , Color.Color.Color.Color.CYANCYANCYANCYAN, , , ,

19 Color.DARK_GRAYColor.DARK_GRAYColor.DARK_GRAYColor.DARK_GRAY, , , , Color.GRAYColor.GRAYColor.GRAYColor.GRAY, , , , Color.GREENColor.GREENColor.GREENColor.GREEN, , , , Color.LIGHT_GRAYColor.LIGHT_GRAYColor.LIGHT_GRAYColor.LIGHT_GRAY, , , ,

20 Color.MAGENTAColor.MAGENTAColor.MAGENTAColor.MAGENTA, , , , Color.ORANGEColor.ORANGEColor.ORANGEColor.ORANGE, , , , Color.PINKColor.PINKColor.PINKColor.PINK, , , , Color.REDColor.REDColor.REDColor.RED, , , , Color.WHITEColor.WHITEColor.WHITEColor.WHITE, , , ,

21 Color.YELLOWColor.YELLOWColor.YELLOWColor.YELLOW }; }; }; };

22 23 // // // // construtor ListFrame adiciona JScrollPane que contém JLiconstrutor ListFrame adiciona JScrollPane que contém JLiconstrutor ListFrame adiciona JScrollPane que contém JLiconstrutor ListFrame adiciona JScrollPane que contém JList ao JFramest ao JFramest ao JFramest ao JFrame

24 publicpublicpublicpublic ListFrame() ListFrame() ListFrame() ListFrame()

25 { { { {

26 supersupersupersuper( ( ( ( "List Test""List Test""List Test""List Test" ); ); ); );

27 setLayout( setLayout( setLayout( setLayout( newnewnewnew FlowLayout() ); FlowLayout() ); FlowLayout() ); FlowLayout() ); // // // // configura o layout de frameconfigura o layout de frameconfigura o layout de frameconfigura o layout de frame

28

Declara a variável de instância JList

Arrays com nomes das cores e os objetos

Colorcorrespondentes.

96

2005 by Pearson Education do Brasil

Resumo

ListFrame.javaListFrame.javaListFrame.javaListFrame.java

(2 de 2)

29 colorJList = colorJList = colorJList = colorJList = newnewnewnew JList( colorNames ); JList( colorNames ); JList( colorNames ); JList( colorNames ); // cr// cr// cr// cria comia comia comia com colorNames colorNames colorNames colorNames 30 colorJList.setVisibleRowCount( colorJList.setVisibleRowCount( colorJList.setVisibleRowCount( colorJList.setVisibleRowCount( 5555 ); ); ); ); // // // // exibe cinco linhas de uma vezexibe cinco linhas de uma vezexibe cinco linhas de uma vezexibe cinco linhas de uma vez 31

32 // // // // não permite múltiplas seleçõesnão permite múltiplas seleçõesnão permite múltiplas seleçõesnão permite múltiplas seleções 33 colocolocolocolorJList.setSelectionMode( rJList.setSelectionMode( rJList.setSelectionMode( rJList.setSelectionMode( ListSelectionModel.SINGLE_SELECTIONListSelectionModel.SINGLE_SELECTIONListSelectionModel.SINGLE_SELECTIONListSelectionModel.SINGLE_SELECTION ); ); ); );

34 35 // // // // adiciona um JScrollPane que contém JList ao frameadiciona um JScrollPane que contém JList ao frameadiciona um JScrollPane que contém JList ao frameadiciona um JScrollPane que contém JList ao frame

36 add( add( add( add( newnewnewnew JScrollPane( colorJList ) ); JScrollPane( colorJList ) ); JScrollPane( colorJList ) ); JScrollPane( colorJList ) );

37 38 colorJList.addListSelectionListener( colorJList.addListSelectionListener( colorJList.addListSelectionListener( colorJList.addListSelectionListener(

39 newnewnewnew ListSelectionListener() ListSelectionListener() ListSelectionListener() ListSelectionListener() // // // // classe interna anônimaclasse interna anônimaclasse interna anônimaclasse interna anônima 40 { { { {

41 // // // // trata eventos de seleção de listatrata eventos de seleção de listatrata eventos de seleção de listatrata eventos de seleção de lista 42 publicpublicpublicpublic voidvoidvoidvoid valueChanged( ListSelectionEvent event ) valueChanged( ListSelectionEvent event ) valueChanged( ListSelectionEvent event ) valueChanged( ListSelectionEvent event )

43 { { { {

44 getContentPane() getContentPane() getContentPane() getContentPane().setBackground( .setBackground( .setBackground( .setBackground(

45 colors[ colors[ colors[ colors[ colorJList.getSelectedIndex()colorJList.getSelectedIndex()colorJList.getSelectedIndex()colorJList.getSelectedIndex() ] ); ] ); ] ); ] );

46 } } } } // // // // fim do método fim do método fim do método fim do método valueChangedvalueChangedvalueChangedvalueChanged 47 } } } } // // // // fim da classe interna anfim da classe interna anfim da classe interna anfim da classe interna anôôôônimanimanimanima 48 ); ); ); ); // // // // fim da chamada para fim da chamada para fim da chamada para fim da chamada para addListSelectionListeneraddListSelectionListeneraddListSelectionListeneraddListSelectionListener 49 } } } } // // // // fim do construtor fim do construtor fim do construtor fim do construtor ListFrame ListFrame ListFrame ListFrame 50 } } } } // // // // fim da classe fim da classe fim da classe fim da classe ListFrameListFrameListFrameListFrame

Configura o modo de seleção da JList

Adiciona JList a umaScrollPane e a adiciona àaplicação

Cria JList, sendo argumentodo construtor um array de Objects com os itens da lista

Obtém o índice do item selecionado, utilizando-o para capturar o objeto Colordo array, que por sua vez é utilizado paraatualizar a cor de backgroup do painel de conteúdo no qual o objeto está contido

• Ao contrário de uma JComboBox uma JList não fornece uma barra de rolagem se houver mais itens na lista do que o número de itens visíveis. Um objeto JScrollPane é usado para suprir tal necessidade.• Seu construtor recebe como argumento um objeto JComponent que precisa de rolagem.• Todo JFrame consiste de três camadas: o fundo, o painel de conteúdo (aparece na frente do fundo e é onde os componentes são exibidos) e o painel transparente (utilizado para exibir dicas de ferramentas e outros itens que devem aparecer na frente dos componentes).

Page 49: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

49

97

2005 by Pearson Education do Brasil

Resumo

ListTest.javaListTest.javaListTest.javaListTest.java

1 // Fig. 11.24: ListTest.java// Fig. 11.24: ListTest.java// Fig. 11.24: ListTest.java// Fig. 11.24: ListTest.java 2 // Selec// Selec// Selec// Selecionando cores a partir de umaionando cores a partir de umaionando cores a partir de umaionando cores a partir de uma JList. JList. JList. JList. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass ListTest ListTest ListTest ListTest

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 ListFrame listFrame = ListFrame listFrame = ListFrame listFrame = ListFrame listFrame = newnewnewnew ListFrame(); ListFrame(); ListFrame(); ListFrame(); // cr// cr// cr// criiiiaaaa ListFrameListFrameListFrameListFrame 10 listFrame.setDefaultCloseOperation( listFrame.setDefaultCloseOperation( listFrame.setDefaultCloseOperation( listFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 listFrame.setSize( listFrame.setSize( listFrame.setSize( listFrame.setSize( 350350350350, , , , 150150150150 ); ); ); ); // // // // cccconfigura tamanho doonfigura tamanho doonfigura tamanho doonfigura tamanho do frame frame frame frame 12 listFrame.setVisible( listFrame.setVisible( listFrame.setVisible( listFrame.setVisible( truetruetruetrue ); ); ); ); // // // // eeeexibe o xibe o xibe o xibe o frameframeframeframe 13 } } } } // // // // ffffim de im de im de im de mainmainmainmain 14 } } } } // // // // fim da classefim da classefim da classefim da classe ListTestListTestListTestListTest

98

2005 by Pearson Education do Brasil

11.12 Listas de seleção múltipla• Lista de seleção múltipla:

– Permite que um usuário selecione vários itens ao mesmotempo.

– ListSelectionModel.SINGLE_INTERVAL_SELEListSelectionModel.SINGLE_INTERVAL_SELEListSelectionModel.SINGLE_INTERVAL_SELEListSelectionModel.SINGLE_INTERVAL_SELECTIONCTIONCTIONCTION indica a seleção de um único intervalo que permite apenas um intervalo contínuo de itens. Clica-se no 1º. Item e em seguida no último, mantendo a teclaShift pressionada.

– ListSelectionModel.MULTIPLE_INTERVAL_SEListSelectionModel.MULTIPLE_INTERVAL_SEListSelectionModel.MULTIPLE_INTERVAL_SEListSelectionModel.MULTIPLE_INTERVAL_SELECTIONLECTIONLECTIONLECTION indica a seleção de múltiplos intervalos que permite que qualquer conjunto de elementos seja selecionado. Clica-se nos itens desejados mantendo a tecla Ctrl pressionada.

Page 50: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

50

99

2005 by Pearson Education do Brasil

Resumo

MultipleMultipleMultipleMultipleSelectionFramSelectionFramSelectionFramSelectionFrameeee.java.java.java.java

(1 de 3)

Aplicativo que copiaos itens de umaJList paraoutra.

1 // Fig. 11.25: MultipleSelectionFrame.java// Fig. 11.25: MultipleSelectionFrame.java// Fig. 11.25: MultipleSelectionFrame.java// Fig. 11.25: MultipleSelectionFrame.java 2 // Cop// Cop// Cop// Copiandoiandoiandoiando ite ite ite itennnns s s s de umade umade umade uma List List List List para a outrapara a outrapara a outrapara a outra.... 3 importimportimportimport java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout;

4 importimportimportimport java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener;

5 importimportimportimport java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent;

6 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

7 importimportimportimport javax.s javax.s javax.s javax.swing.JList;wing.JList;wing.JList;wing.JList;

8 importimportimportimport javax.swing.JButton; javax.swing.JButton; javax.swing.JButton; javax.swing.JButton;

9 importimportimportimport javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane;

10 importimportimportimport javax.swing.ListSelectionModel; javax.swing.ListSelectionModel; javax.swing.ListSelectionModel; javax.swing.ListSelectionModel;

11 12 publicpublicpublicpublic classclassclassclass MultipleSelectionFrame MultipleSelectionFrame MultipleSelectionFrame MultipleSelectionFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

13 {{{{

14 privateprivateprivateprivate JList colorJList; JList colorJList; JList colorJList; JList colorJList; // list// list// list// lista para armazenar nomea para armazenar nomea para armazenar nomea para armazenar nomes de coress de coress de coress de cores 15 privateprivateprivateprivate JList copyJList; JList copyJList; JList copyJList; JList copyJList; // list// list// list// lista para copiar nomes de cores noa para copiar nomes de cores noa para copiar nomes de cores noa para copiar nomes de cores no 16 privateprivateprivateprivate JButton copyJButton; JButton copyJButton; JButton copyJButton; JButton copyJButton; // b// b// b// botão para copiar nomes otão para copiar nomes otão para copiar nomes otão para copiar nomes selecselecselecselecionadosionadosionadosionados 17 privateprivateprivateprivate finalfinalfinalfinal String colorNames[] = { String colorNames[] = { String colorNames[] = { String colorNames[] = { "Black""Black""Black""Black", , , , "Blue""Blue""Blue""Blue", , , , "Cyan""Cyan""Cyan""Cyan", , , ,

18 "Dark Gray""Dark Gray""Dark Gray""Dark Gray", , , , "Gray""Gray""Gray""Gray", , , , "Green""Green""Green""Green", , , , "Light Gray""Light Gray""Light Gray""Light Gray", , , , "Magenta""Magenta""Magenta""Magenta", , , , "Orange""Orange""Orange""Orange", , , ,

19 "Pink""Pink""Pink""Pink", , , , "Red""Red""Red""Red", , , , "White""White""White""White", , , , "Yellow""Yellow""Yellow""Yellow" }; }; }; };

20 21 // // // // construtor construtor construtor construtor MultipleSelectionFrame MultipleSelectionFrame MultipleSelectionFrame MultipleSelectionFrame 22 publicpublicpublicpublic MultipleSelectionFrame() MultipleSelectionFrame() MultipleSelectionFrame() MultipleSelectionFrame()

23 { { { {

24 supersupersupersuper( ( ( ( "Multiple Selection Lists""Multiple Selection Lists""Multiple Selection Lists""Multiple Selection Lists" ); ); ); );

25 setLayout( setLayout( setLayout( setLayout( newnewnewnew FlowLayout() ); FlowLayout() ); FlowLayout() ); FlowLayout() ); // // // // configura configura configura configura layoutlayoutlayoutlayout do frame do frame do frame do frame 26

100

2005 by Pearson Education do Brasil

Resumo

MultipleMultipleMultipleMultipleSelectionFramSelectionFramSelectionFramSelectionFrameeee.java.java.java.java

(2 de 3)

27 colorJList = colorJList = colorJList = colorJList = newnewnewnew JList( colorNames ); JList( colorNames ); JList( colorNames ); JList( colorNames ); // // // // armazena nomes de todas as coresarmazena nomes de todas as coresarmazena nomes de todas as coresarmazena nomes de todas as cores

28 colorJList.setVisibleRowCount( colorJList.setVisibleRowCount( colorJList.setVisibleRowCount( colorJList.setVisibleRowCount( 5555 ); ); ); ); // // // // mmmmostra cinco linhasostra cinco linhasostra cinco linhasostra cinco linhas 29 colorJList.setSelectionMode(colorJList.setSelectionMode(colorJList.setSelectionMode(colorJList.setSelectionMode(

30 ListSelectionModel.MULTIPLE_INTERVALListSelectionModel.MULTIPLE_INTERVALListSelectionModel.MULTIPLE_INTERVALListSelectionModel.MULTIPLE_INTERVAL_SELECTION_SELECTION_SELECTION_SELECTION ); ); ); );

31 add( add( add( add( newnewnewnew JScrollPane( colorJList ) ); JScrollPane( colorJList ) ); JScrollPane( colorJList ) ); JScrollPane( colorJList ) ); // ad // ad // ad // adiiiicionacionacionaciona list list list lista coma coma coma com scrollpane scrollpane scrollpane scrollpane 32 33 copyJButton = copyJButton = copyJButton = copyJButton = newnewnewnew JButton( JButton( JButton( JButton( "Copy >>>""Copy >>>""Copy >>>""Copy >>>" ); ); ); ); // cr// cr// cr// criiiiaaaa botão de cópiabotão de cópiabotão de cópiabotão de cópia

34 copyJButton.addActionListener( copyJButton.addActionListener( copyJButton.addActionListener( copyJButton.addActionListener(

35 36 newnewnewnew ActionListener() ActionListener() ActionListener() ActionListener() //////// classe interna anônimaclasse interna anônimaclasse interna anônimaclasse interna anônima 37 { { { {

38 // // // // ttttrata rata rata rata evento de botãoevento de botãoevento de botãoevento de botão

39 publicpublicpublicpublic voidvoidvoidvoid actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event )

40 { { { {

41 // // // // coloca valores selecionados na copyJListcoloca valores selecionados na copyJListcoloca valores selecionados na copyJListcoloca valores selecionados na copyJList

42 copyJList.scopyJList.scopyJList.scopyJList.setListData( colorJList.getSelectedValues() );etListData( colorJList.getSelectedValues() );etListData( colorJList.getSelectedValues() );etListData( colorJList.getSelectedValues() );

43 } } } } // // // // fim do métodofim do métodofim do métodofim do método actionPerformedactionPerformedactionPerformedactionPerformed 44 } } } } // // // // fim da classe interna anônimafim da classe interna anônimafim da classe interna anônimafim da classe interna anônima

45 ); ); ); ); // // // // ffffim da chamada paraim da chamada paraim da chamada paraim da chamada para addActionListener addActionListener addActionListener addActionListener 46

Utiliza uma lista de seleção de múltiplos intervalos

Utiliza os métodos setListData()para setar um conjunto de itens (array de Objects) em uma lista e getSelectedValues() para capturarum conjunto de itens (array de Objects) selecionados - para copiar valores de uma JList para outra

Não há nenhum evento para indicar que um usuário fez múltiplas seleções em uma lista de seleção múltipla. É um evento externo, no exemplo, o clique de um JButton que indica a necessidade de se realizar a cópia.

Page 51: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

51

101

2005 by Pearson Education do Brasil

Resumo

MultipleMultipleMultipleMultipleSelectionFramSelectionFramSelectionFramSelectionFrameeee.java.java.java.java

(3 de 3)

47 add( copyJButton ); add( copyJButton ); add( copyJButton ); add( copyJButton ); // // // // adiciona botão de cópia ao JFrameadiciona botão de cópia ao JFrameadiciona botão de cópia ao JFrameadiciona botão de cópia ao JFrame

48 49 copyJList = copyJList = copyJList = copyJList = newnewnewnew JList(); JList(); JList(); JList(); // // // // cria lista pcria lista pcria lista pcria lista p//// armazenar nomes de cor copiados armazenar nomes de cor copiados armazenar nomes de cor copiados armazenar nomes de cor copiados

50 copyJList.setVisibleRowCount( copyJList.setVisibleRowCount( copyJList.setVisibleRowCount( copyJList.setVisibleRowCount( 5555 ); ); ); ); // // // // mostra mostra mostra mostra 5 5 5 5 linhaslinhaslinhaslinhas 51 copyJList.setFixedCellcopyJList.setFixedCellcopyJList.setFixedCellcopyJList.setFixedCellWidth( Width( Width( Width( 100100100100 ); ); ); ); // // // // configura larguraconfigura larguraconfigura larguraconfigura largura 52 copyJList.setFixedCellHeight( copyJList.setFixedCellHeight( copyJList.setFixedCellHeight( copyJList.setFixedCellHeight( 15151515 ); ); ); ); // // // // configura alturaconfigura alturaconfigura alturaconfigura altura 53 copyJList.setSelectionMode(copyJList.setSelectionMode(copyJList.setSelectionMode(copyJList.setSelectionMode(

54 ListSelectionModel.SINGLE_INTERVAL_SELECTIONListSelectionModel.SINGLE_INTERVAL_SELECTIONListSelectionModel.SINGLE_INTERVAL_SELECTIONListSelectionModel.SINGLE_INTERVAL_SELECTION ); ); ); );

55 add( add( add( add( newnewnewnew JScroll JScroll JScroll JScrollPane( copyJList ) ); Pane( copyJList ) ); Pane( copyJList ) ); Pane( copyJList ) ); // ad// ad// ad// adiciona lista comiciona lista comiciona lista comiciona lista com scrollpane scrollpane scrollpane scrollpane 56 } } } } // // // // fim do construtor fim do construtor fim do construtor fim do construtor MultipleSelectionFrameMultipleSelectionFrameMultipleSelectionFrameMultipleSelectionFrame 57 } } } } // // // // fim da classe fim da classe fim da classe fim da classe MultipleSelectionFrameMultipleSelectionFrameMultipleSelectionFrameMultipleSelectionFrame

Configura a largura da célula para apresentação

Configura a altura da célula para apresentação

Configura o modelo de seleção como seleção de um único intervalo

A criação de copyJList está após a declaração do método actionPerformed(), mas efetivamente a execução de tal método ocorre somente após o construtor ter se completado, e portanto não haverá problemas de referência.

102

2005 by Pearson Education do Brasil

Resumo

MultipleMultipleMultipleMultipleSelectionTestSelectionTestSelectionTestSelectionTest.java.java.java.java

1 // Fig. 11.26: MultipleSelectionTest.java// Fig. 11.26: MultipleSelectionTest.java// Fig. 11.26: MultipleSelectionTest.java// Fig. 11.26: MultipleSelectionTest.java 2 // Test// Test// Test// Testandoandoandoando MultipleSelectionFrame. MultipleSelectionFrame. MultipleSelectionFrame. MultipleSelectionFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass MultipleSelectionTest MultipleSelectionTest MultipleSelectionTest MultipleSelectionTest

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 MultipleSelectionFrame MultipleSelectionFrame MultipleSelectionFrame MultipleSelectionFrame multipleSelectionFrame = multipleSelectionFrame = multipleSelectionFrame = multipleSelectionFrame =

10 newnewnewnew MultipleSelectionFrame(); MultipleSelectionFrame(); MultipleSelectionFrame(); MultipleSelectionFrame();

11 multipleSelectionFrame.setDefaultCloseOperation( multipleSelectionFrame.setDefaultCloseOperation( multipleSelectionFrame.setDefaultCloseOperation( multipleSelectionFrame.setDefaultCloseOperation(

12 JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

13 multipleSelectionFrame.setSize( multipleSelectionFrame.setSize( multipleSelectionFrame.setSize( multipleSelectionFrame.setSize( 350350350350, , , , 140140140140 ); ); ); ); // // // // configura o tamanho do frameconfigura o tamanho do frameconfigura o tamanho do frameconfigura o tamanho do frame 14 multipleSelectionFrame.setVisible( multipleSelectionFrame.setVisible( multipleSelectionFrame.setVisible( multipleSelectionFrame.setVisible( truetruetruetrue ); ); ); ); // // // // exibeexibeexibeexibe o o o o frameframeframeframe 15 } } } } // // // // fim de fim de fim de fim de mainmainmainmain 16 } } } } // // // // fim da classe fim da classe fim da classe fim da classe MultipleSelectionTestMultipleSelectionTestMultipleSelectionTestMultipleSelectionTest

Page 52: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

52

103

2005 by Pearson Education do Brasil

11.13 Tratamento de evento de mouse

• Eventos de mouse:

– Os eventos de mouse podem ser capturados por qualquer componenteGUI que deriva de java.awt.Componentjava.awt.Componentjava.awt.Componentjava.awt.Component.

– Cria um objeto MouseEvent, que é aceito por cada um dos métodosde tratamento de evento de mouse. Tal objeto contém informaçõessobre o evento ocorrido, como as coordenadas x e y de onde eleocorreu.

– Tratado pelas interfaces MouseListener e MouseMotionListener. A interface MouseInputListenerestende as duas interfaces.

– A interface MouseWheelListener declara o método mouseWheelMoved() para tratar MouseWheelEvents. São características relacionadas à rotação da roda de um mouse.

– Os métodos de um componente disparados para associação de um ouvinte são: addMouseListeneraddMouseListeneraddMouseListeneraddMouseListener()()()() e addMouseMotionListeneraddMouseMotionListeneraddMouseMotionListeneraddMouseMotionListener().().().().

104

2005 by Pearson Education do Brasil

Figura 11.27 | Métodos de interface MouseListenerMouseListenerMouseListenerMouseListener e MouseMotionListenerMouseMotionListenerMouseMotionListenerMouseMotionListener. (Parte 1 de 2.)

Métodos de interface MouseListener e MouseMotionListener

Métodos de interface MouseListenerMouseListenerMouseListenerMouseListener

public void mousePressed( MouseEvent event ) public void mousePressed( MouseEvent event ) public void mousePressed( MouseEvent event ) public void mousePressed( MouseEvent event )

Chamado quando um botão do mouse é pressionado enquanto o cursor de mouse estiver sobre um componente.

public vpublic vpublic vpublic void mouseClicked( MouseEvent event )oid mouseClicked( MouseEvent event )oid mouseClicked( MouseEvent event )oid mouseClicked( MouseEvent event )

Chamado quando um botão do mouse é pressionado e liberado enquanto o cursor do mouse pairar sobre um componente. Esse evento é sempre precedido por uma chamada para mousePressedmousePressedmousePressedmousePressed.

public void mouseReleased( MouseEvepublic void mouseReleased( MouseEvepublic void mouseReleased( MouseEvepublic void mouseReleased( MouseEvent event )nt event )nt event )nt event )

Chamado quando um botão do mouse é liberado depois de ser pressionado. Esse evento sempre é precedido por uma chamada para mousePressed e um ou mais chamadas para mouseDraggedmouseDraggedmouseDraggedmouseDragged.

public void mouseEntered( MouseEvent event )public void mouseEntered( MouseEvent event )public void mouseEntered( MouseEvent event )public void mouseEntered( MouseEvent event )

Chamado quando o cursor do mouse entra nos limites de um componente.

Page 53: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

53

105

2005 by Pearson Education do Brasil

Figura 11.27 | Métodos de interface MouseListenerMouseListenerMouseListenerMouseListener e MouseMotionListenerMouseMotionListenerMouseMotionListenerMouseMotionListener. (Parte 2 de 2.)

Métodos de interface MouseListenerMouseListenerMouseListenerMouseListener e MouseMotionListenerMouseMotionListenerMouseMotionListenerMouseMotionListener public void mouseExited( MouseEvent event )public void mouseExited( MouseEvent event )public void mouseExited( MouseEvent event )public void mouseExited( MouseEvent event )

Chamado quando o cursor do mouse deixa os limites de um componente.

Métodos de interface MouseMotionListenerMouseMotionListenerMouseMotionListenerMouseMotionListener

public void mouseDragged( MouseEvent public void mouseDragged( MouseEvent public void mouseDragged( MouseEvent public void mouseDragged( MouseEvent event )event )event )event )

Chamado quando o botão do mouse é pressionado enquanto o cursor de mouse estiver sobre um componente e o mouse é movido enquanto o botão do mouse permanecer pressionado. Esse evento é sempre precedido por uma chamada para mousePressedmousePressedmousePressedmousePressed. Todos os eventos de arrastar são enviados para o componente em que o usuário começou a arrastar o mouse.

public void mouseMoved( MouseEvent event )public void mouseMoved( MouseEvent event )public void mouseMoved( MouseEvent event )public void mouseMoved( MouseEvent event )

Chamado quando o mouse é movido quando o cursor de mouse estiver sobre um componente. Todos os eventos de movimento são enviados para o componente sobre o qual o mouse atualmente está posicionado.

106

2005 by Pearson Education do Brasil

Observação sobre a aparência e comportamento 11.12

As chamadas de método para mouseDraggedmouseDraggedmouseDraggedmouseDragged e mouseReleasedmouseReleasedmouseReleasedmouseReleased são enviadas ao MouseMotionListenerMouseMotionListenerMouseMotionListenerMouseMotionListener do ComponentComponentComponentComponent em que uma operação de arrastar do mouse se iniciou. De maneira semelhante, a chamada de método mouseReleasedmouseReleasedmouseReleasedmouseReleased no fim de uma operação de arrastar é enviada para o MouseListenerMouseListenerMouseListenerMouseListener de ComponentComponentComponentComponent em que a operação de arrastar se iniciou.

Page 54: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

54

107

2005 by Pearson Education do Brasil

ResumoMouseTrackerMouseTrackerMouseTrackerMouseTracker

Frame.javaFrame.javaFrame.javaFrame.java

(1 de 4)

Este aplicativo exibeinformações sobre o mouse em um label, considerando um painel comocomponente.

1 // Fig. 11.28: MouseTrackerFrame.java// Fig. 11.28: MouseTrackerFrame.java// Fig. 11.28: MouseTrackerFrame.java// Fig. 11.28: MouseTrackerFrame.java 2 // Demonstr// Demonstr// Demonstr// Demonstrando eventos de mouseando eventos de mouseando eventos de mouseando eventos de mouse.... 3 importimportimportimport java.awt.Color; java.awt.Color; java.awt.Color; java.awt.Color;

4 importimportimportimport java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout;

5 importimportimportimport java.awt.event.MouseListener; java.awt.event.MouseListener; java.awt.event.MouseListener; java.awt.event.MouseListener;

6 importimportimportimport java.awt.event.MouseMotionListener; java.awt.event.MouseMotionListener; java.awt.event.MouseMotionListener; java.awt.event.MouseMotionListener;

7 importimportimportimport java.awt.event.Mo java.awt.event.Mo java.awt.event.Mo java.awt.event.MouseEvent;useEvent;useEvent;useEvent;

8 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

9 importimportimportimport javax.swing.JLabel; javax.swing.JLabel; javax.swing.JLabel; javax.swing.JLabel;

10 importimportimportimport javax.swing.JPanel; javax.swing.JPanel; javax.swing.JPanel; javax.swing.JPanel;

11 12 public classpublic classpublic classpublic class MouseTrackerFrame MouseTrackerFrame MouseTrackerFrame MouseTrackerFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

13 {{{{

14 privateprivateprivateprivate JPanel mousePanel; JPanel mousePanel; JPanel mousePanel; JPanel mousePanel; // pa// pa// pa// paiiiinel nel nel nel em que eventos de em que eventos de em que eventos de em que eventos de mouse mouse mouse mouse oooocorrerãocorrerãocorrerãocorrerão 15 pppprivaterivaterivaterivate JLabel statusBar; JLabel statusBar; JLabel statusBar; JLabel statusBar; // // // // rótulo que exiberótulo que exiberótulo que exiberótulo que exibe informa informa informa informações sobre eventoções sobre eventoções sobre eventoções sobre evento 16 17 // // // // construtor construtor construtor construtor MouseTrackerFrame MouseTrackerFrame MouseTrackerFrame MouseTrackerFrame configura configura configura configura GUI GUI GUI GUI eeee 18 // regist // regist // regist // registrararara handlers handlers handlers handlers de evento de mouse de evento de mouse de evento de mouse de evento de mouse 19 publicpublicpublicpublic MouseTrackerFrame() MouseTrackerFrame() MouseTrackerFrame() MouseTrackerFrame()

20 { { { {

21 supersupersupersuper( ( ( ( "Demonstrati"Demonstrati"Demonstrati"Demonstrating Mouse Events"ng Mouse Events"ng Mouse Events"ng Mouse Events" ); ); ); );

22 23 mousePanel = mousePanel = mousePanel = mousePanel = newnewnewnew JPanel(); JPanel(); JPanel(); JPanel(); // cr// cr// cr// criaiaiaia pa pa pa paiiiinelnelnelnel 24 mousePanel.setBackground( mousePanel.setBackground( mousePanel.setBackground( mousePanel.setBackground( Color.WHITEColor.WHITEColor.WHITEColor.WHITE ); ); ); ); // // // // configura cor de fundoconfigura cor de fundoconfigura cor de fundoconfigura cor de fundo 25 add( mousePanel, add( mousePanel, add( mousePanel, add( mousePanel, BorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTER ); ); ); ); // ad// ad// ad// adiciona painel aoiciona painel aoiciona painel aoiciona painel ao JFra JFra JFra JFramemememe 26 27 statusBar = statusBar = statusBar = statusBar = newnewnewnew JLabel( JLabel( JLabel( JLabel( "Mouse outside JPanel" "Mouse outside JPanel" "Mouse outside JPanel" "Mouse outside JPanel" ););););

28 add( statusBar, add( statusBar, add( statusBar, add( statusBar, BorderLayout.SOUTHBorderLayout.SOUTHBorderLayout.SOUTHBorderLayout.SOUTH ); ); ); ); // ad // ad // ad // adiciona rótulo aoiciona rótulo aoiciona rótulo aoiciona rótulo ao JFrame JFrame JFrame JFrame 29

Cria JPanel para capturar eventos de mouse

Configura o fundo como branco

Cria JLabel e o adiciona à aplicação, naposição SOUTH

108

2005 by Pearson Education do Brasil

Resumo

MouseTrackerMouseTrackerMouseTrackerMouseTrackerFrame.javaFrame.javaFrame.javaFrame.java

(2 de 4)

30 // // // // cria e registra listener para mouse e eventos de movimento de mousecria e registra listener para mouse e eventos de movimento de mousecria e registra listener para mouse e eventos de movimento de mousecria e registra listener para mouse e eventos de movimento de mouse

31 MouseHandler handler = MouseHandler handler = MouseHandler handler = MouseHandler handler = newnewnewnew MouseHandler(); MouseHandler(); MouseHandler(); MouseHandler();

32 mousePanel.addMouseListener( handler );mousePanel.addMouseListener( handler );mousePanel.addMouseListener( handler );mousePanel.addMouseListener( handler );

33 mousePanelmousePanelmousePanelmousePanel.addMouseMotionListener( handler );.addMouseMotionListener( handler );.addMouseMotionListener( handler );.addMouseMotionListener( handler );

34 } } } } // // // // fim dofim dofim dofim do construtor construtor construtor construtor MouseTrackerFrame MouseTrackerFrame MouseTrackerFrame MouseTrackerFrame 35 36 private classprivate classprivate classprivate class MouseHandler MouseHandler MouseHandler MouseHandler implementsimplementsimplementsimplements MouseListener, MouseListener, MouseListener, MouseListener,

37 MouseMotionListenerMouseMotionListenerMouseMotionListenerMouseMotionListener

38 { { { {

39 / / / // / / / handlers de evento handlers de evento handlers de evento handlers de evento MouseListenerMouseListenerMouseListenerMouseListener 40 // // // // trata evento quando o mouse é liberado logo depois de pressionadotrata evento quando o mouse é liberado logo depois de pressionadotrata evento quando o mouse é liberado logo depois de pressionadotrata evento quando o mouse é liberado logo depois de pressionado

41 public voidpublic voidpublic voidpublic void mouseClicked( MouseEvent event ) mouseClicked( MouseEvent event ) mouseClicked( MouseEvent event ) mouseClicked( MouseEvent event )

42 { { { {

43 statusBar.setText( String.format( statusBar.setText( String.format( statusBar.setText( String.format( statusBar.setText( String.format( "Clicked at [%d, %d]""Clicked at [%d, %d]""Clicked at [%d, %d]""Clicked at [%d, %d]", , , ,

44 event.getX(), event.getY()event.getX(), event.getY()event.getX(), event.getY()event.getX(), event.getY() ) ); ) ); ) ); ) );

45 } } } } // // // // fim do método fim do método fim do método fim do método mouseClickedmouseClickedmouseClickedmouseClicked 46 47 // // // // trata evento quando mouse é pressionadotrata evento quando mouse é pressionadotrata evento quando mouse é pressionadotrata evento quando mouse é pressionado

48 public voidpublic voidpublic voidpublic void mousePressed( MouseEvent event ) mousePressed( MouseEvent event ) mousePressed( MouseEvent event ) mousePressed( MouseEvent event )

49 { { { {

50 statusBar.setText( String.for statusBar.setText( String.for statusBar.setText( String.for statusBar.setText( String.format( mat( mat( mat( "Pressed at [%d, %d]""Pressed at [%d, %d]""Pressed at [%d, %d]""Pressed at [%d, %d]", , , ,

51 event.getX(), event.getY()event.getX(), event.getY()event.getX(), event.getY()event.getX(), event.getY() ) ); ) ); ) ); ) );

52 } } } } // // // // fim do método fim do método fim do método fim do método mousePressedmousePressedmousePressedmousePressed 53 54 // // // // trata evento quando mouse é liberado depois da operação de arrastartrata evento quando mouse é liberado depois da operação de arrastartrata evento quando mouse é liberado depois da operação de arrastartrata evento quando mouse é liberado depois da operação de arrastar

55 public voidpublic voidpublic voidpublic void mouseReleased( MouseEven mouseReleased( MouseEven mouseReleased( MouseEven mouseReleased( MouseEvent event )t event )t event )t event )

56 { { { {

57 statusBar.setText( String.format( statusBar.setText( String.format( statusBar.setText( String.format( statusBar.setText( String.format( "Released at [%d, %d]""Released at [%d, %d]""Released at [%d, %d]""Released at [%d, %d]", , , ,

58 event.getX()event.getX()event.getX()event.getX(), , , , event.getY()event.getY()event.getY()event.getY() ) ); ) ); ) ); ) );

59 } } } } // // // // fim do método fim do método fim do método fim do método mouseReleasedmouseReleasedmouseReleasedmouseReleased

Cria handler de evento para eventos de mouse

Registra um handler de evento

Implementa interfaces ouvintes de mouse. Preferiu-se estender as duas, ao invés de trabalhar com MouseInputListener

Determina a localização (coordenadas x e y) do clique de mouse

Declara o método mouseClicked()

Declara o método mousePressed()

Declara o método mouseReleased()

Page 55: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

55

109

2005 by Pearson Education do Brasil

Resumo

MouseTrackerMouseTrackerMouseTrackerMouseTrackerFrame.javaFrame.javaFrame.javaFrame.java

(3 de 4)

60 61 // // // // trata evento quando mouse entra na áreatrata evento quando mouse entra na áreatrata evento quando mouse entra na áreatrata evento quando mouse entra na área

62 public voidpublic voidpublic voidpublic void mouseEntered( MouseEvent event ) mouseEntered( MouseEvent event ) mouseEntered( MouseEvent event ) mouseEntered( MouseEvent event )

63 { { { {

64 statusBar.setText( String.format( statusBar.setText( String.format( statusBar.setText( String.format( statusBar.setText( String.format( "Mouse entered at [%d, %d]""Mouse entered at [%d, %d]""Mouse entered at [%d, %d]""Mouse entered at [%d, %d]", , , ,

65 event.getX(), event.getY()event.getX(), event.getY()event.getX(), event.getY()event.getX(), event.getY() ) ); ) ); ) ); ) );

66 mousePanel.setBackground( mousePanel.setBackground( mousePanel.setBackground( mousePanel.setBackground( Color.GREENColor.GREENColor.GREENColor.GREEN ); ); ); );

67 } } } } // // // // fim do métodofim do métodofim do métodofim do método mouseEnteredmouseEnteredmouseEnteredmouseEntered 68 69 // // // // trata evento quando mouse trata evento quando mouse trata evento quando mouse trata evento quando mouse sai dasai dasai dasai da área área área área

70 public voidpublic voidpublic voidpublic void mouseExited( MouseEvent event ) mouseExited( MouseEvent event ) mouseExited( MouseEvent event ) mouseExited( MouseEvent event )

71 { { { {

72 statusBar.setText( statusBar.setText( statusBar.setText( statusBar.setText( "Mouse out"Mouse out"Mouse out"Mouse outside JPanel"side JPanel"side JPanel"side JPanel" ); ); ); );

73 mousePanel.setBackground( mousePanel.setBackground( mousePanel.setBackground( mousePanel.setBackground( Color.WHITEColor.WHITEColor.WHITEColor.WHITE ); ); ); );

74 } } } } // // // // fim do métodofim do métodofim do métodofim do método mouseExitedmouseExitedmouseExitedmouseExited 75

Declara o método mouseEntered()

Configura o segundo plano de JPanel

Declara o método mouseExited()

Configura o segundo plano de JPanel

Observar pelos métodos acima descritos que o painel terá fundo branco quando o mouse não estiver sobre ele e fundo verde caso contrário.

110

2005 by Pearson Education do Brasil

Resumo

MouseTrackerMouseTrackerMouseTrackerMouseTrackerFrame.javaFrame.javaFrame.javaFrame.java

(4 de 4)

76 // MouseMotionListener event handlers // MouseMotionListener event handlers // MouseMotionListener event handlers // MouseMotionListener event handlers 77 // // // // trata trata trata trata evento MouseMotionListenerevento MouseMotionListenerevento MouseMotionListenerevento MouseMotionListener

78 public voidpublic voidpublic voidpublic void mouseDragged( MouseEvent event ) mouseDragged( MouseEvent event ) mouseDragged( MouseEvent event ) mouseDragged( MouseEvent event )

79 { { { {

80 statusBar.setText( String.format( statusBar.setText( String.format( statusBar.setText( String.format( statusBar.setText( String.format( "Dragged at [%d, %d]""Dragged at [%d, %d]""Dragged at [%d, %d]""Dragged at [%d, %d]", , , ,

81 eveeveeveevent.getX(), event.getY()nt.getX(), event.getY()nt.getX(), event.getY()nt.getX(), event.getY() ) ); ) ); ) ); ) );

82 } } } } // // // // fim do método fim do método fim do método fim do método mouseDraggedmouseDraggedmouseDraggedmouseDragged 83 84 // // // // trata evento quanto usuário move o trata evento quanto usuário move o trata evento quanto usuário move o trata evento quanto usuário move o mousemousemousemouse 85 public voidpublic voidpublic voidpublic void mouseMoved( MouseEvent event ) mouseMoved( MouseEvent event ) mouseMoved( MouseEvent event ) mouseMoved( MouseEvent event )

86 { { { {

87 statusBar.setText( String.format( statusBar.setText( String.format( statusBar.setText( String.format( statusBar.setText( String.format( "Moved a"Moved a"Moved a"Moved at [%d, %d]"t [%d, %d]"t [%d, %d]"t [%d, %d]", , , ,

88 event.getX(), event.getY()event.getX(), event.getY()event.getX(), event.getY()event.getX(), event.getY() ) ); ) ); ) ); ) );

89 } } } } // // // // fim do método fim do método fim do método fim do método mouseMovedmouseMovedmouseMovedmouseMoved 90 } } } } // // // // fim da classefim da classefim da classefim da classe MouseHandler MouseHandler MouseHandler MouseHandler interna interna interna interna 91 } } } } // // // // fim da fim da fim da fim da classclassclassclasseeee MouseTrackerFrame MouseTrackerFrame MouseTrackerFrame MouseTrackerFrame

Declara o método mouseDragged()

Declara o método mouseMoved()

• Como a classe MouseHandler implementa as duas interfaces ouvintes de eventos de mouse, ela deverá conter implementações de todos os métodos declarados em tais interfaces, sendo estes os 7 métodos identificados no exemplo acima.• Outra questão a ser notada é que o gerenciador de layout não foi definido, portanto será utilizado o gerenciador de layout padrão, BorderLayout – que trabalha dividindo o layout nas regiões NORTH, SOUTH, EAST, WEST, CENTER.• Um componente colocado na região CENTER será dimensionado para ocupar todo o componente que não esteja ocupado por outros componentes nas outras regiões. Observar que o statusBar é colocado na região SOUTH e ocupa a largura do JFrame, mas apenas a altura correspondente ao próprio label.

Page 56: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

56

111

2005 by Pearson Education do Brasil

Resumo

MouseTrackerMouseTrackerMouseTrackerMouseTrackerFrame.javaFrame.javaFrame.javaFrame.java

(1 de 2)

1 // Fig. 11.29: MouseTrackerFrame.java// Fig. 11.29: MouseTrackerFrame.java// Fig. 11.29: MouseTrackerFrame.java// Fig. 11.29: MouseTrackerFrame.java 2 // Test// Test// Test// Testandoandoandoando MouseTrackerFrame. MouseTrackerFrame. MouseTrackerFrame. MouseTrackerFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass MouseTracker MouseTracker MouseTracker MouseTracker

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 MouseTrackerFrame mouseTrackerFrame = MouseTrackerFrame mouseTrackerFrame = MouseTrackerFrame mouseTrackerFrame = MouseTrackerFrame mouseTrackerFrame = nnnnewewewew MouseTrackerFrame(); MouseTrackerFrame(); MouseTrackerFrame(); MouseTrackerFrame();

10 mouseTrackerFrame.setDefaultCloseOperation( mouseTrackerFrame.setDefaultCloseOperation( mouseTrackerFrame.setDefaultCloseOperation( mouseTrackerFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 mouseTrackerFrame.setSize( mouseTrackerFrame.setSize( mouseTrackerFrame.setSize( mouseTrackerFrame.setSize( 300300300300, , , , 100100100100 ); ); ); ); // // // // configura o tamanho doconfigura o tamanho doconfigura o tamanho doconfigura o tamanho do frame frame frame frame 12 mouseTrackerFrame.setVisible( mouseTrackerFrame.setVisible( mouseTrackerFrame.setVisible( mouseTrackerFrame.setVisible( truetruetruetrue ); ); ); ); // // // // exibe oexibe oexibe oexibe o frame frame frame frame 13 } } } } // // // // fim de fim de fim de fim de mainmainmainmain 14 } } } } // // // // fim da classe fim da classe fim da classe fim da classe MouseTrackerMouseTrackerMouseTrackerMouseTracker

112

2005 by Pearson Education do Brasil

Resumo

MouseTrackerMouseTrackerMouseTrackerMouseTrackerFrame.javaFrame.javaFrame.javaFrame.java

(2 de 2)

Page 57: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

57

113

2005 by Pearson Education do Brasil

11.14 Classes adaptadoras• Muitas interfaces ouvintes de eventos contêm múltiplos

métodos. Não é sempre desejável declarar cada método emuma interface ouvinte de evento. Para tratar tal situação sãofornecidas as classes adaptadoras ouvintes de evento.

• Uma classe adaptadora:

– Implementa uma interface ouvinte de evento.

– Fornece uma implementação-padrão (com o corpo de um método vazio) para todos os métodos de tratamento de eventos.

• Uma classe adaptadora pode ser estendida para tratar com o ouvinte do evento e são sobrescritos apenas os métodosnecessários ao mesmo.

114

2005 by Pearson Education do Brasil

Figura 11.30 | Classes adaptadoras de evento e as

interfaces que elas implementam no pacote java.awt.event.

Classe adaptadora de evento em java.awt.eventjava.awt.eventjava.awt.eventjava.awt.event

Implementa interface

ComponentAdapterComponentAdapterComponentAdapterComponentAdapter ComponentListenerComponentListenerComponentListenerComponentListener

ContainerAdapterContainerAdapterContainerAdapterContainerAdapter ContainerListenerContainerListenerContainerListenerContainerListener

FocusAdapterFocusAdapterFocusAdapterFocusAdapter FocusListenerFocusListenerFocusListenerFocusListener

KeyAdapterKeyAdapterKeyAdapterKeyAdapter KeyListenerKeyListenerKeyListenerKeyListener

MouseAdapterMouseAdapterMouseAdapterMouseAdapter MouseListenerMouseListenerMouseListenerMouseListener

MouseMotionAdapterMouseMotionAdapterMouseMotionAdapterMouseMotionAdapter MouseMotionListenMouseMotionListenMouseMotionListenMouseMotionListenerererer

WindowAdapterWindowAdapterWindowAdapterWindowAdapter WindowListenerWindowListenerWindowListenerWindowListener

Page 58: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

58

115

2005 by Pearson Education do Brasil

Observação de engenharia de software 11.7

Quando uma classe implementa uma interface, a classe tem um relacionamento ‘é um’ com essa interface. Todas as subclasses diretas e indiretas dessa classe herdam essa interface. Portanto, um objeto de uma classe que estende uma classe adaptadora de evento é um objeto do tipo ouvinte de eventos correspondente (por exemplo, um objeto de uma subclasse de MouseAdapterMouseAdapterMouseAdapterMouseAdapter é um MouseListenerMouseListenerMouseListenerMouseListener).

116

2005 by Pearson Education do Brasil

Herdando MouseAdapter (exemplo)

• MouseAdapter:

– Classe adaptadora para as interfaces MouseListener e MouseMotionListener.

– Estender a classe permite sobrescrever somente os métodos que você deseja utilizar.

– Disponível no pacote java.awt.eventjava.awt.eventjava.awt.eventjava.awt.event.

Page 59: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

59

117

2005 by Pearson Education do Brasil

Erro comum de programação 11.4

Se você estender uma classe adaptadora e digitar incorretamente o nome do método que você estásobrescrevendo, o método simplesmente torna-se outro método na classe. Esse é um erro de lógica difícil de ser detectado, visto que o programa chamará a versão vazia do método herdado da classe adaptadora.

118

2005 by Pearson Education do Brasil

Resumo

MouseDetailsMouseDetailsMouseDetailsMouseDetailsFrame.javaFrame.javaFrame.javaFrame.java

(1 de 2)

Aplicativo quedemonstra comorealizar a contagem de cliques do mouse e como distinguirentre osdiferentes botõesdo mouse.

1 // Fig. 11.31: MouseDetailsFrame.java// Fig. 11.31: MouseDetailsFrame.java// Fig. 11.31: MouseDetailsFrame.java// Fig. 11.31: MouseDetailsFrame.java 2 // // // // Demonstrando cliques de mouse e distinguindo entre botões do mouseDemonstrando cliques de mouse e distinguindo entre botões do mouseDemonstrando cliques de mouse e distinguindo entre botões do mouseDemonstrando cliques de mouse e distinguindo entre botões do mouse.... 3 importimportimportimport java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout;

4 importimportimportimport java.awt.Graphics; java.awt.Graphics; java.awt.Graphics; java.awt.Graphics;

5 importimportimportimport java.awt.event.MouseAdapter; java.awt.event.MouseAdapter; java.awt.event.MouseAdapter; java.awt.event.MouseAdapter;

6 importimportimportimport java.awt.event.MouseEvent java.awt.event.MouseEvent java.awt.event.MouseEvent java.awt.event.MouseEvent;;;;

7 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

8 importimportimportimport javax.swing.JLabel; javax.swing.JLabel; javax.swing.JLabel; javax.swing.JLabel;

9 10 public classpublic classpublic classpublic class MouseDetailsFrame MouseDetailsFrame MouseDetailsFrame MouseDetailsFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

11 {{{{

12 privateprivateprivateprivate String details; String details; String details; String details; // // // // representação Stringrepresentação Stringrepresentação Stringrepresentação String 13 privateprivateprivateprivate JLabel statusBar; JLabel statusBar; JLabel statusBar; JLabel statusBar; // JLabel // JLabel // JLabel // JLabel quequequeque ap ap ap aparece no botão de janarece no botão de janarece no botão de janarece no botão de janelaelaelaela 14 15 // construtor // construtor // construtor // construtor configura barra de títuloconfigura barra de títuloconfigura barra de títuloconfigura barra de título String String String String e registra o listener de mousee registra o listener de mousee registra o listener de mousee registra o listener de mouse

16 publicpublicpublicpublic MouseDetailsFrame() MouseDetailsFrame() MouseDetailsFrame() MouseDetailsFrame()

17 { { { {

18 supersupersupersuper( ( ( ( "Mouse clicks and buttons""Mouse clicks and buttons""Mouse clicks and buttons""Mouse clicks and buttons" ); ); ); );

19 20 statusBar = statusBar = statusBar = statusBar = newnewnewnew JLabel( JLabel( JLabel( JLabel( "Click the mouse""Click the mouse""Click the mouse""Click the mouse" ); ); ); );

21 add( statusBar, add( statusBar, add( statusBar, add( statusBar, BorderLayout.SOUTHBorderLayout.SOUTHBorderLayout.SOUTHBorderLayout.SOUTH ); ); ); );

22 addMouseListener( addMouseListener( addMouseListener( addMouseListener( newnewnewnew MouseClickHandler() ); MouseClickHandler() ); MouseClickHandler() ); MouseClickHandler() ); // // // // adiciona handleradiciona handleradiciona handleradiciona handler 23 } } } } // // // // fim do construtor fim do construtor fim do construtor fim do construtor MouseDetailsFrame MouseDetailsFrame MouseDetailsFrame MouseDetailsFrame 24

Registra um handler de evento daprópria frame

Page 60: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

60

119

2005 by Pearson Education do Brasil

Resumo

MouseDetailsMouseDetailsMouseDetailsMouseDetailsFrame.javaFrame.javaFrame.javaFrame.java

(2 de 2)

25 // // // // classe interna para tratar eventos declasse interna para tratar eventos declasse interna para tratar eventos declasse interna para tratar eventos de mouse mouse mouse mouse 26 private classprivate classprivate classprivate class MouseClickHandler MouseClickHandler MouseClickHandler MouseClickHandler extendsextendsextendsextends MouseAdapter MouseAdapter MouseAdapter MouseAdapter

27 { { { {

28 // // // // trata evento de clique de mouse e determina qual botão foi pressionadotrata evento de clique de mouse e determina qual botão foi pressionadotrata evento de clique de mouse e determina qual botão foi pressionadotrata evento de clique de mouse e determina qual botão foi pressionado

29 public voidpublic voidpublic voidpublic void mouseClicked( MouseEve mouseClicked( MouseEve mouseClicked( MouseEve mouseClicked( MouseEvent event )nt event )nt event )nt event )

30 { { { {

31 intintintint xPos = event.getX(); xPos = event.getX(); xPos = event.getX(); xPos = event.getX(); // // // // obtém posição x do mouseobtém posição x do mouseobtém posição x do mouseobtém posição x do mouse

32 intintintint yPos = event.getY(); yPos = event.getY(); yPos = event.getY(); yPos = event.getY(); // // // // obtém posição obtém posição obtém posição obtém posição yyyy do mouse do mouse do mouse do mouse

33 34 details = String.format( details = String.format( details = String.format( details = String.format( "Clicked %d time(s)""Clicked %d time(s)""Clicked %d time(s)""Clicked %d time(s)", , , ,

35 event.getClicevent.getClicevent.getClicevent.getClickCount()kCount()kCount()kCount() ); ); ); );

36

37 ifififif ( ( ( ( event.isMetaDown()event.isMetaDown()event.isMetaDown()event.isMetaDown() ) ) ) ) // // // // botão direito do botão direito do botão direito do botão direito do mouse mouse mouse mouse 38 details += details += details += details += " with right mouse button"" with right mouse button"" with right mouse button"" with right mouse button";;;;

39 else ifelse ifelse ifelse if ( ( ( ( event.isAltDown()event.isAltDown()event.isAltDown()event.isAltDown() ) ) ) ) // // // // botão do meio do mousebotão do meio do mousebotão do meio do mousebotão do meio do mouse

40 details += details += details += details += " with ce" with ce" with ce" with center mouse button"nter mouse button"nter mouse button"nter mouse button";;;;

41 elseelseelseelse // // // // botão esquerdo do mousebotão esquerdo do mousebotão esquerdo do mousebotão esquerdo do mouse

42 details += details += details += details += " with left mouse button"" with left mouse button"" with left mouse button"" with left mouse button";;;;

43 44 statusBar.setText( details ); statusBar.setText( details ); statusBar.setText( details ); statusBar.setText( details ); // // // // exibe mensagemexibe mensagemexibe mensagemexibe mensagem na na na na statusBarstatusBarstatusBarstatusBar 45 } } } } // // // // fim do método fim do método fim do método fim do método mmmmouseClickedouseClickedouseClickedouseClicked 46 } } } } // // // // fim da classe interna private MouseClickHandlerfim da classe interna private MouseClickHandlerfim da classe interna private MouseClickHandlerfim da classe interna private MouseClickHandler

47 } } } } // // // // fim da classe fim da classe fim da classe fim da classe MouseDetailsFrameMouseDetailsFrameMouseDetailsFrameMouseDetailsFrame

Obtém o número de vezes que o botão do mouse foi clicado

Testa se o botão direito do mouse foi clicado

Testa se o botão do meio do mouse foi clicado

120

2005 by Pearson Education do Brasil

Resumo

MouseDetailsMouseDetailsMouseDetailsMouseDetails.java.java.java.java

(1 de 2)

1 // Fig. 11.32: MouseDetails.java// Fig. 11.32: MouseDetails.java// Fig. 11.32: MouseDetails.java// Fig. 11.32: MouseDetails.java 2 // Test// Test// Test// Testandoandoandoando MouseDetailsFrame. MouseDetailsFrame. MouseDetailsFrame. MouseDetailsFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass MouseDetails MouseDetails MouseDetails MouseDetails

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 MouseDetailsFrame mouseDetailsFrame = MouseDetailsFrame mouseDetailsFrame = MouseDetailsFrame mouseDetailsFrame = MouseDetailsFrame mouseDetailsFrame = newnewnewnew Mou Mou Mou MouseDetailsFrame(); seDetailsFrame(); seDetailsFrame(); seDetailsFrame();

10 mouseDetailsFrame.setDefaultCloseOperation( mouseDetailsFrame.setDefaultCloseOperation( mouseDetailsFrame.setDefaultCloseOperation( mouseDetailsFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 mouseDetailsFrame.setSize( mouseDetailsFrame.setSize( mouseDetailsFrame.setSize( mouseDetailsFrame.setSize( 400400400400, , , , 150150150150 ); ); ); ); // // // // configura o tamanho doconfigura o tamanho doconfigura o tamanho doconfigura o tamanho do frame frame frame frame 12 mouseDetailsFrame.setVisible( mouseDetailsFrame.setVisible( mouseDetailsFrame.setVisible( mouseDetailsFrame.setVisible( truetruetruetrue ); ); ); ); // // // // obtémobtémobtémobtém o o o o frameframeframeframe 13 } } } } // // // // fim de fim de fim de fim de mainmainmainmain 14 } } } } // // // // fim da classefim da classefim da classefim da classe MouseDetails MouseDetails MouseDetails MouseDetails

Page 61: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

61

121

2005 by Pearson Education do Brasil

Resumo

MouseDetailsMouseDetailsMouseDetailsMouseDetails.java.java.java.java

(2 de 2)

122

2005 by Pearson Education do Brasil

11.15 Subclasse JPanel para desenhar com o mouse• Sobrescrevendo a classe JPanel:

– Fornece uma área dedicada de desenho, em que o usuário pode desenhar arrastando o mouse.

Page 62: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

62

123

2005 by Pearson Education do Brasil

Figura 11.33 | Os métodos InputEventInputEventInputEventInputEvent que ajudam a distinguir entre os cliques do botão esquerdo, do centro e direito do mouse.

Método InputEventInputEventInputEventInputEvent Descrição

isMetaDown()isMetaDown()isMetaDown()isMetaDown() Retorna truetruetruetrue quando o usuário clica no botão direito do mouse em um mouse com dois ou três botões. Para simular um clique de botão direito com um mouse de um botão, o usuário pode manter pressionada a tecla Meta no teclado e clicar no botão do mouse.

isAltDown()isAltDown()isAltDown()isAltDown() Retorna truetruetruetrue quando o usuário clica no botão do mouse do meio em um mouse com três botões. Para simular um clique com o botão do meio do mouse em um mouse com um ou dois botões, o usuário pode pressionar a tecla Alt no teclado e clicar no único botão ou no botão esquerdo do mouse.

124

2005 by Pearson Education do Brasil

Método paintComponent()• Método paintComponent():

– Pertence à classe JComponentJComponentJComponentJComponent.

– É disparado quando um componente Swing leve é exibido.

– Desenha em um componente Swing.

– A sobrescrição de método permite criar desenhos personalizados.

– Ao sobrescrever o método, no entanto, deve-se primeiro chamar o método de superclasse quando sobrescrito, paraassegurar que o componente será exibido corretamente.

• É em tal método que se verifica a transparência de um componente(por isso ele necessita ser disparado). Se um componente étransparente o método não limpará seu fundo quando o programaexibir o componente. Quando o componente for opaco, o métodolimpará o fundo antes de o componente ser exibido.

Page 63: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

63

125

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.13

A maioria dos componentes Swing GUI pode ser transparente ou opaca. Se um componente Swing GUI for opaco, seu fundo será limpo quando seu método paintComponentpaintComponentpaintComponentpaintComponent()()()() for chamado. Somente componentes opacos podem exibir uma cor de segundo plano personalizada. Os objetos JPanelJPanelJPanelJPanel são opacos por padrão.

126

2005 by Pearson Education do Brasil

Dica de prevenção de erro 11.1

No método paintComponentpaintComponentpaintComponentpaintComponent()()()() de uma subclasse JComponentJComponentJComponentJComponent, a primeira instrução deve ser sempre uma chamada para o método da superclasse paintComponentpaintComponentpaintComponentpaintComponent()()()() a fim de assegurar que um objeto da subclasse seja exibido corretamente.

Page 64: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

64

127

2005 by Pearson Education do Brasil

Erro comum de programação 11.5

Se um método paintComponentpaintComponentpaintComponentpaintComponent()()()() sobrescrito não chamar a versão da superclasse, o componente de subclasse pode não ser exibido adequadamente. Se um método paintComponentpaintComponentpaintComponentpaintComponent()()()() sobrescrito chamar a versão da superclasse depois que outro desenho for realizado, o desenho seráapagado.

128

2005 by Pearson Education do Brasil

Definindo a área personalizada de desenho(exemplo das Figuras 11.34 e 11.35

• Subclasse personalizada de JPanel:

– Oferece uma área de desenho personalizada.

– A classe Graphics é utilizada para desenhar nos componentes Swing.

– A classe Point representa uma coordenada x-y,

podendo ser utilizada para armazenar as coordenadas de cada evento de arrastar do mouse.

Page 65: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

65

129

2005 by Pearson Education do Brasil

Resumo

PaintPanel.javaPaintPanel.javaPaintPanel.javaPaintPanel.java

(1 de 2)

Apresenta um aplicativo pararealizar desenhossimples, com o auxílio do mouse, criando um JPanelpersonalizado.

1 // Fig. 11.34: PaintPanel.java// Fig. 11.34: PaintPanel.java// Fig. 11.34: PaintPanel.java// Fig. 11.34: PaintPanel.java 2 // // // // UtilizandoUtilizandoUtilizandoUtilizando class MouseMotionAdapter. class MouseMotionAdapter. class MouseMotionAdapter. class MouseMotionAdapter. 3 importimportimportimport java.awt.Point; java.awt.Point; java.awt.Point; java.awt.Point;

4 importimportimportimport java.awt.Graphics; java.awt.Graphics; java.awt.Graphics; java.awt.Graphics;

5 importimportimportimport java.awt.event.MouseEvent; java.awt.event.MouseEvent; java.awt.event.MouseEvent; java.awt.event.MouseEvent;

6 importimportimportimport java.awt.event.MouseMotionAdapter; java.awt.event.MouseMotionAdapter; java.awt.event.MouseMotionAdapter; java.awt.event.MouseMotionAdapter;

7 importimportimportimport javax.swing.JPanel; javax.swing.JPanel; javax.swing.JPanel; javax.swing.JPanel;

8 9 publicpublicpublicpublic classclassclassclass PaintPanel PaintPanel PaintPanel PaintPanel extendsextendsextendsextends JPanel JPanel JPanel JPanel

10 {{{{

11 privateprivateprivateprivate intintintint pointCount = pointCount = pointCount = pointCount = 0000; ; ; ; // // // // número de contagem de pontosnúmero de contagem de pontosnúmero de contagem de pontosnúmero de contagem de pontos 12 13 // // // // array de 10000 referências java.awt.Pointarray de 10000 referências java.awt.Pointarray de 10000 referências java.awt.Pointarray de 10000 referências java.awt.Point

14 privateprivateprivateprivate Point points[] = Point points[] = Point points[] = Point points[] = newnewnewnew Point[ Point[ Point[ Point[ 10000100001000010000 ]; ]; ]; ];

15 16 // // // // configuraconfiguraconfiguraconfigura a GUI e registra handler de evento de mouse a GUI e registra handler de evento de mouse a GUI e registra handler de evento de mouse a GUI e registra handler de evento de mouse

17 publicpublicpublicpublic PaintPanel() PaintPanel() PaintPanel() PaintPanel()

18 { { { {

19 // // // // trata evento de movimento de mouse do frametrata evento de movimento de mouse do frametrata evento de movimento de mouse do frametrata evento de movimento de mouse do frame

20 addMouseMotionListener( addMouseMotionListener( addMouseMotionListener( addMouseMotionListener(

21

Cria array de Points

O array points[] é utilizado para armazenar a localização em que cada evento de arrastar do mouse ocorre. E esse array é utilizado para realizar o desenho.

130

2005 by Pearson Education do Brasil

Resumo

PaintPanel.javaPaintPanel.javaPaintPanel.javaPaintPanel.java

(2 de 2)

22 newnewnewnew MouseMotionAdapter() MouseMotionAdapter() MouseMotionAdapter() MouseMotionAdapter() // // // // classe interna anônimaclasse interna anônimaclasse interna anônimaclasse interna anônima

23 { { { {

24 // // // // armazena coordenadas de arrastar e repintaarmazena coordenadas de arrastar e repintaarmazena coordenadas de arrastar e repintaarmazena coordenadas de arrastar e repinta

25 publicpublicpublicpublic voidvoidvoidvoid mouseDragged( MouseEvent event ) mouseDragged( MouseEvent event ) mouseDragged( MouseEvent event ) mouseDragged( MouseEvent event )

26 {{{{

27 ifififif ( pointCount < points.length ) ( pointCount < points.length ) ( pointCount < points.length ) ( pointCount < points.length )

28 {{{{

29 points[ pointCountpoints[ pointCountpoints[ pointCountpoints[ pointCount ] = event.getPoint(); ] = event.getPoint(); ] = event.getPoint(); ] = event.getPoint(); // // // // llllocalizaocalizaocalizaocaliza po po po ponnnntotototo 30 pointCount++; pointCount++; pointCount++; pointCount++; // // // // nnnnúmero de iúmero de iúmero de iúmero de increment ncrement ncrement ncrement dddde e e e popopoponnnntostostostos nnnnoooo array array array array 31 repaint(); repaint(); repaint(); repaint(); // rep// rep// rep// repiiiintantantanta JFrame JFrame JFrame JFrame 32 } } } } // // // // ffffim de im de im de im de ifififif 33 }}}} // // // // ffffim do mim do mim do mim do métodoétodoétodoétodo mouseDragged mouseDragged mouseDragged mouseDragged 34 } } } } // // // // ffffim da classe interna anim da classe interna anim da classe interna anim da classe interna anônimaônimaônimaônima 35 ); ); ); ); // // // // ffffim da chamada para im da chamada para im da chamada para im da chamada para addMouseMotionListeneraddMouseMotionListeneraddMouseMotionListeneraddMouseMotionListener 36 } } } } // // // // ffffim do construtor im do construtor im do construtor im do construtor PaintPanelPaintPanelPaintPanelPaintPanel 37 38 // // // // desenha oval em um quadro delimitador de 4x4 no local especificaddesenha oval em um quadro delimitador de 4x4 no local especificaddesenha oval em um quadro delimitador de 4x4 no local especificaddesenha oval em um quadro delimitador de 4x4 no local especificadoooo na janela na janela na janela na janela

39 publicpublicpublicpublic voidvoidvoidvoid paintComponent( Graphics g ) paintComponent( Graphics g ) paintComponent( Graphics g ) paintComponent( Graphics g )

40 { { { {

41 supersupersupersuper.paintComponent( g ); .paintComponent( g ); .paintComponent( g ); .paintComponent( g ); // // // // limpa a área de desenholimpa a área de desenholimpa a área de desenholimpa a área de desenho 42 43 // // // // desenha todos os pontos no arraydesenha todos os pontos no arraydesenha todos os pontos no arraydesenha todos os pontos no array

44 forforforfor ( ( ( ( intintintint i = i = i = i = 0000; i < pointCount; i++ ); i < pointCount; i++ ); i < pointCount; i++ ); i < pointCount; i++ )

45 g.fillOval( g.fillOval( g.fillOval( g.fillOval( points[ i ].x, points[ i ].ypoints[ i ].x, points[ i ].ypoints[ i ].x, points[ i ].ypoints[ i ].x, points[ i ].y, , , , 4444, , , , 4444 ); ); ); );

46 } } } } // // // // ffffim do mim do mim do mim do métodoétodoétodoétodo paintComponent paintComponent paintComponent paintComponent 47 } } } } // // // // ffffim da classeim da classeim da classeim da classe PaintPanel PaintPanel PaintPanel PaintPanel

Classe interna anônima para tratamento de evento

Sobrescreve o método mouseDragged(), para capturar as coordenadas do mouse arrastado

Obtém a localização do cursor do mouse

Repinta o JFrame. A chamada de tal métodoindica que o componente deve ser atualizado natela o mais rápido possível com uma chamadapara paintComponent() de PaintPanel.

Obtém as coordenadas x e y de Point

O método paintComponent() irá desenhar uma pequena oval considerando cada ponto armazenado no array points, justamente gerando o desenho personalizado.

Page 66: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

66

131

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.14

Chamar repaint()repaint()repaint()repaint() para um componente Swing GUI indica que o componente deve ser atualizado na tela o mais rápido possível. O fundo do componente GUI é limpo somente se o componente for opaco.

Para o método JComponentJComponentJComponentJComponent setOpaquesetOpaquesetOpaquesetOpaque()()()() pode ser passado um argumento booleanbooleanbooleanboolean indicando se o componente é opaco (truetruetruetrue) ou transparente (falsefalsefalsefalse).

132

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.15

O desenho em qualquer componente GUI érealizado com as coordenadas que são medidas a partir do canto superior esquerdo (0, 0) desse componente GUI, não do canto superior esquerdo da tela.

Page 67: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

67

133

2005 by Pearson Education do Brasil

Resumo

Painter.javaPainter.javaPainter.javaPainter.java

(1 de 2)

Trabalha com o JPanelpersonalizado criadono código anterior.

1 // Fig. 11.35: Painter.java// Fig. 11.35: Painter.java// Fig. 11.35: Painter.java// Fig. 11.35: Painter.java 2 // Test// Test// Test// Testandoandoandoando PaintPanel. PaintPanel. PaintPanel. PaintPanel. 3 importimportimportimport java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout;

4 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

5 importimportimportimport javax.swing.JLabel; javax.swing.JLabel; javax.swing.JLabel; javax.swing.JLabel;

6 7 publicpublicpublicpublic classclassclassclass Painter Painter Painter Painter

8 {{{{

9 public static voidpublic static voidpublic static voidpublic static void main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

10 { { { {

11 // cr // cr // cr // criaiaiaia JFrame JFrame JFrame JFrame 12 JFrame application = JFrame application = JFrame application = JFrame application = newnewnewnew JFrame( JFrame( JFrame( JFrame( "A simple paint program""A simple paint program""A simple paint program""A simple paint program" ); ); ); );

13 14 PaintPanel paintPanel = PaintPanel paintPanel = PaintPanel paintPanel = PaintPanel paintPanel = newnewnewnew PaintPanel(); PaintPanel(); PaintPanel(); PaintPanel(); // // // // cria o painel de pinturacria o painel de pinturacria o painel de pinturacria o painel de pintura

15 application.add( paintPanel, application.add( paintPanel, application.add( paintPanel, application.add( paintPanel, BorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTER ); ); ); ); // // // // nononono cent cent cent centrorororo 16 17 // cr // cr // cr // criaiaiaia um rótulo e o coloca um rótulo e o coloca um rótulo e o coloca um rótulo e o coloca emememem SOUTH SOUTH SOUTH SOUTH dededede BorderLayout BorderLayout BorderLayout BorderLayout 18 application.add( application.add( application.add( application.add( newnewnewnew JLabel( JLabel( JLabel( JLabel( "Drag the mouse to draw" "Drag the mouse to draw" "Drag the mouse to draw" "Drag the mouse to draw" ), ), ), ),

19 BorderLayout.SOUTHBorderLayout.SOUTHBorderLayout.SOUTHBorderLayout.SOUTH ); ); ); );

20 21 application.setDefaultCloseOperation( application.setDefaultCloseOperation( application.setDefaultCloseOperation( application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

22 application.setSize( application.setSize( application.setSize( application.setSize( 400400400400, , , , 200200200200 ); ); ); ); // // // // configura o tamanho do configura o tamanho do configura o tamanho do configura o tamanho do frameframeframeframe 23 application.setVisible( application.setVisible( application.setVisible( application.setVisible( truetruetruetrue ); ); ); ); // // // // exibe o exibe o exibe o exibe o frameframeframeframe 24 } } } } // // // // fim de fim de fim de fim de mainmainmainmain 25 } } } } // // // // fim da fim da fim da fim da classclassclassclasseeee Painter Painter Painter Painter

Cria uma instância do painel de desenho personalizado e o adiciona à frame paraque o usuário possa desenhar.

134

2005 by Pearson Education do Brasil

Resumo

Painter.javaPainter.javaPainter.javaPainter.java

(2 de 2)

Page 68: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

68

135

2005 by Pearson Education do Brasil

11.16 Tratamento de eventos de teclado• Interface KeyListener:

– Para tratar eventos de teclado gerados quando as teclas no teclado são pressionadas e liberadas — KeyEvents.

– Declara os métodos keyPressed() – chamado quando umatecla é pressionada - , keyReleased()- chamado quandouma tecla é liberada - e keyTyped() – chamado quando umatecla que não é tecla de ação seja pressionada - , sendo que cada um recebe um KeyEvent como seu argumento.

– Para adicionar um KeyListenerKeyListenerKeyListenerKeyListener a um componente deveser disparado o método addKeyListeneraddKeyListeneraddKeyListeneraddKeyListener()()()().

– Teclas de ação: As de setas, as de função, home, end, page up, page down, numLock, printScreen, scrollLock, capsLock, pause.

136

2005 by Pearson Education do Brasil

Resumo

KeyDemoFrameKeyDemoFrameKeyDemoFrameKeyDemoFrame.java.java.java.java

(1 de 3)

Aplicativo quedemonstratratamento de eventos do teclado

1 // Fig. 11.36: KeyDemoFrame.java// Fig. 11.36: KeyDemoFrame.java// Fig. 11.36: KeyDemoFrame.java// Fig. 11.36: KeyDemoFrame.java 2 // // // // Demonstrando os eventos de pressionamento de teclaDemonstrando os eventos de pressionamento de teclaDemonstrando os eventos de pressionamento de teclaDemonstrando os eventos de pressionamento de tecla.... 3 importimportimportimport java.awt.Color; java.awt.Color; java.awt.Color; java.awt.Color;

4 importimportimportimport java.awt.event.KeyListener; java.awt.event.KeyListener; java.awt.event.KeyListener; java.awt.event.KeyListener;

5 importimportimportimport java.awt.event.KeyEvent; java.awt.event.KeyEvent; java.awt.event.KeyEvent; java.awt.event.KeyEvent;

6 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

7 importimportimportimport javax.swing.JText javax.swing.JText javax.swing.JText javax.swing.JTextArea;Area;Area;Area;

8 9 publicpublicpublicpublic classclassclassclass KeyDemoFrame KeyDemoFrame KeyDemoFrame KeyDemoFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame implementsimplementsimplementsimplements KeyListener KeyListener KeyListener KeyListener

10 {{{{

11 privateprivateprivateprivate String line1 = String line1 = String line1 = String line1 = """"""""; ; ; ; // // // // primeira linha de textareaprimeira linha de textareaprimeira linha de textareaprimeira linha de textarea

12 privateprivateprivateprivate String line2 = String line2 = String line2 = String line2 = """"""""; ; ; ; // // // // segundasegundasegundasegunda linha de textarea linha de textarea linha de textarea linha de textarea

13 privateprivateprivateprivate String line3 = String line3 = String line3 = String line3 = """"""""; ; ; ; // // // // teteteterceirarceirarceirarceira linha de textarea linha de textarea linha de textarea linha de textarea

14 privateprivateprivateprivate JTextArea textArea; JTextArea textArea; JTextArea textArea; JTextArea textArea; // textarea // textarea // textarea // textarea a exibir saídaa exibir saídaa exibir saídaa exibir saída 15 16 // // // // construtor KeyDemoFrameconstrutor KeyDemoFrameconstrutor KeyDemoFrameconstrutor KeyDemoFrame

17 publicpublicpublicpublic KeyDemoFrame() KeyDemoFrame() KeyDemoFrame() KeyDemoFrame()

18 { { { {

19 supersupersupersuper( ( ( ( "Demonstrating Keystroke Events""Demonstrating Keystroke Events""Demonstrating Keystroke Events""Demonstrating Keystroke Events" ); ); ); );

20 21 textArea = textArea = textArea = textArea = newnewnewnew J J J JTextArea( TextArea( TextArea( TextArea( 10101010, , , , 15151515 ); ); ); ); // // // // configuraconfiguraconfiguraconfigura JTextArea JTextArea JTextArea JTextArea 22 textArea.setText( textArea.setText( textArea.setText( textArea.setText( "Press any key on the keyboard...""Press any key on the keyboard...""Press any key on the keyboard...""Press any key on the keyboard..." ); ); ); );

23 textArea.setEnabled( textArea.setEnabled( textArea.setEnabled( textArea.setEnabled( falsefalsefalsefalse ); ); ); ); // dis// dis// dis// disativa ativa ativa ativa textareatextareatextareatextarea 24 textArea.setDisabledTextColor( textArea.setDisabledTextColor( textArea.setDisabledTextColor( textArea.setDisabledTextColor( Color.BLACKColor.BLACKColor.BLACKColor.BLACK ); ); ); ); // // // // configura cor de textoconfigura cor de textoconfigura cor de textoconfigura cor de texto 25 add( textArea ); add( textArea ); add( textArea ); add( textArea ); // ad// ad// ad// adicionaicionaicionaiciona textarea textarea textarea textarea aoaoaoao JFrame JFrame JFrame JFrame 26 27 addKeyListener( addKeyListener( addKeyListener( addKeyListener( thisthisthisthis ); ); ); ); // // // // permite que o permite que o permite que o permite que o frame processframe processframe processframe processe eventos de tece eventos de tece eventos de tece eventos de tecladoladoladolado 28 } } } } // // // // fim do construtorfim do construtorfim do construtorfim do construtor KeyDemoFrame KeyDemoFrame KeyDemoFrame KeyDemoFrame 29

Implementa a interface KeyListener. Destaque para o fato de que a própriaframe já estará implementando a interface ouvinte, ao invés de se criaruma classe separada

Configura a cor do texto

Registra a própria aplicação como um handler de evento, já queela mesma contém a implementação do ouvinte

• Neste exemplo a própria frame trata seus eventos de teclado.• Um componente JTextArea é usado para exibição de texto.

Page 69: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

69

137

2005 by Pearson Education do Brasil

Resumo

KeyDemoFrameKeyDemoFrameKeyDemoFrameKeyDemoFrame.java.java.java.java

(2 de 3)

30 // // // // trata pressionamento de qualquer teclatrata pressionamento de qualquer teclatrata pressionamento de qualquer teclatrata pressionamento de qualquer tecla 31 publicpublicpublicpublic voidvoidvoidvoid keyPressed( KeyEvent event ) keyPressed( KeyEvent event ) keyPressed( KeyEvent event ) keyPressed( KeyEvent event )

32 { { { {

33 line1 = String.format( line1 = String.format( line1 = String.format( line1 = String.format( "Key pressed: %s""Key pressed: %s""Key pressed: %s""Key pressed: %s", , , ,

34 event.getKeyText( event.getKeyCode() )event.getKeyText( event.getKeyCode() )event.getKeyText( event.getKeyCode() )event.getKeyText( event.getKeyCode() ) ); ); ); ); // // // // gera saída de tecla pressionadagera saída de tecla pressionadagera saída de tecla pressionadagera saída de tecla pressionada

35 setLines2and3( event ); setLines2and3( event ); setLines2and3( event ); setLines2and3( event ); // // // // configura a saída das linhas dois e trêsconfigura a saída das linhas dois e trêsconfigura a saída das linhas dois e trêsconfigura a saída das linhas dois e três

36 } } } } // // // // fim do método fim do método fim do método fim do método keyPressedkeyPressedkeyPressedkeyPressed 37 38 // // // // trata liberação de qualquer teclatrata liberação de qualquer teclatrata liberação de qualquer teclatrata liberação de qualquer tecla

39 publicpublicpublicpublic voidvoidvoidvoid keyReleased( KeyEvent event ) keyReleased( KeyEvent event ) keyReleased( KeyEvent event ) keyReleased( KeyEvent event )

40 { { { {

41 line1 = String.forma line1 = String.forma line1 = String.forma line1 = String.format( t( t( t( "Key released: %s""Key released: %s""Key released: %s""Key released: %s",,,,

42 event.getKeyText( event.getKeyCode() )event.getKeyText( event.getKeyCode() )event.getKeyText( event.getKeyCode() )event.getKeyText( event.getKeyCode() ) ); ); ); ); // // // // gera saída de tecla liberadagera saída de tecla liberadagera saída de tecla liberadagera saída de tecla liberada

43 setLines2and3( event ); setLines2and3( event ); setLines2and3( event ); setLines2and3( event ); // // // // configura a saída das linhas dois e trêsconfigura a saída das linhas dois e trêsconfigura a saída das linhas dois e trêsconfigura a saída das linhas dois e três

44 } } } } // // // // fim do método fim do método fim do método fim do método keyReleasedkeyReleasedkeyReleasedkeyReleased 45 46 // // // // trata prestrata prestrata prestrata pressionamento de qualquer tecla de açsionamento de qualquer tecla de açsionamento de qualquer tecla de açsionamento de qualquer tecla de açãoãoãoão 47 publicpublicpublicpublic voidvoidvoidvoid keyTyped( KeyEvent event ) keyTyped( KeyEvent event ) keyTyped( KeyEvent event ) keyTyped( KeyEvent event )

48 { { { {

49 line1 = String.format( line1 = String.format( line1 = String.format( line1 = String.format( "Key typed: %s""Key typed: %s""Key typed: %s""Key typed: %s", , , , event.getKeyChar()event.getKeyChar()event.getKeyChar()event.getKeyChar() ); ); ); );

50 setLines2and3( event ); setLines2and3( event ); setLines2and3( event ); setLines2and3( event ); // // // // configura saída das linhas dois e trêsconfigura saída das linhas dois e trêsconfigura saída das linhas dois e trêsconfigura saída das linhas dois e três 51 } } } } //////// fim do método fim do método fim do método fim do método keyTypedkeyTypedkeyTypedkeyTyped 52

Declara o método keyPressed()

getKeyCode() - Obtém o código de tecla virtual datecla pressionada

getKeyText() – Obtém o texto da tecla cujo códigofoi informado como argumento

Declara o método keyReleased()

Obtém o código da tecla liberada

Declara o método keyTyped()

Obtem o valor Unicode do caracterdigitado.

A classe KeyEvent mantém um conjunto de constantes (o código de tecla virtual) que representa cada tecla do teclado. Essas constantes podem ser comparadas com o valor de retorno de getKeyCode() para testar as teclas individuais do teclado.

138

2005 by Pearson Education do Brasil

Resumo

KeyDemoFrameKeyDemoFrameKeyDemoFrameKeyDemoFrame.java.java.java.java

(3 de 3)

53 // // // // configura segunda e terceira linhas de saídaconfigura segunda e terceira linhas de saídaconfigura segunda e terceira linhas de saídaconfigura segunda e terceira linhas de saída

54 privateprivateprivateprivate voidvoidvoidvoid setLines2and3( KeyEvent event ) setLines2and3( KeyEvent event ) setLines2and3( KeyEvent event ) setLines2and3( KeyEvent event )

55 { { { {

56 line2 = String.format( line2 = String.format( line2 = String.format( line2 = String.format( "This key is %san action key""This key is %san action key""This key is %san action key""This key is %san action key", , , ,

57 ( ( ( ( event.isActionKey()event.isActionKey()event.isActionKey()event.isActionKey() ? ? ? ? """""""" : : : : "not ""not ""not ""not " ) ); ) ); ) ); ) );

58 59 String temp = event.getKeyModifiersText( event.getModifiers() );String temp = event.getKeyModifiersText( event.getModifiers() );String temp = event.getKeyModifiersText( event.getModifiers() );String temp = event.getKeyModifiersText( event.getModifiers() );

60 61 line3 = String.format( line3 = String.format( line3 = String.format( line3 = String.format( "Modifier keys pressed: %s""Modifier keys pressed: %s""Modifier keys pressed: %s""Modifier keys pressed: %s", , , ,

62 ( temp.equals( ( temp.equals( ( temp.equals( ( temp.equals( """""""" ) ? ) ? ) ? ) ? "none""none""none""none" : temp ) ); : temp ) ); : temp ) ); : temp ) ); // // // // envia envia envia envia modificadores modificadores modificadores modificadores ppppara a ara a ara a ara a saídasaídasaídasaída

63 64 textArea.setText( Strin textArea.setText( Strin textArea.setText( Strin textArea.setText( String.format( g.format( g.format( g.format( "%s"%s"%s"%s\\\\n%sn%sn%sn%s\\\\n%sn%sn%sn%s\\\\n"n"n"n", , , ,

65 line1, line2, line3 ) ); line1, line2, line3 ) ); line1, line2, line3 ) ); line1, line2, line3 ) ); // // // // gera saída de três linhas de textogera saída de três linhas de textogera saída de três linhas de textogera saída de três linhas de texto

66 } } } } // // // // fim do método fim do método fim do método fim do método setLines2and3setLines2and3setLines2and3setLines2and3 67 } } } } // // // // fim dfim dfim dfim da classea classea classea classe KeyDemoFrameKeyDemoFrameKeyDemoFrameKeyDemoFrame

Testa se é uma tecla de ação

Determina se alguma tecla modificadora foipressionada (Shift, Alt, Ctrl)

Determina o texto da(s) tecla(s) modificadora(s) pressionada(s).

Além do uso de constantes de KeyEvent para determinar se uma determinada tecla foi pressionada também podem ser utilizados os seguintes métodos, que retornam valor booleano caso a tecla em questão tenha sido pressionada: isAltDown(), isControlDown(), isMetaDown(), isShiftDown().

Page 70: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

70

139

2005 by Pearson Education do Brasil

Resumo

KeyDemo.javaKeyDemo.javaKeyDemo.javaKeyDemo.java

(1 de 2)

1 // Fig. 11.37: KeyDemo.java// Fig. 11.37: KeyDemo.java// Fig. 11.37: KeyDemo.java// Fig. 11.37: KeyDemo.java 2 // Test// Test// Test// Testaaaandondondondo KeyDemoFrame. KeyDemoFrame. KeyDemoFrame. KeyDemoFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass KeyDemo KeyDemo KeyDemo KeyDemo

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 KeyDemoFrame keyDemoFrame = KeyDemoFrame keyDemoFrame = KeyDemoFrame keyDemoFrame = KeyDemoFrame keyDemoFrame = newnewnewnew KeyDemoFrame(); KeyDemoFrame(); KeyDemoFrame(); KeyDemoFrame();

10 keyDemoFrame.setDefaultCloseOperation( keyDemoFrame.setDefaultCloseOperation( keyDemoFrame.setDefaultCloseOperation( keyDemoFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 keyDemoFrame.setSize( keyDemoFrame.setSize( keyDemoFrame.setSize( keyDemoFrame.setSize( 350350350350, , , , 100100100100 ); ); ); ); // // // // cccconfigura o tamanho doonfigura o tamanho doonfigura o tamanho doonfigura o tamanho do frame frame frame frame 12 keyDemoFrame.setVisible( keyDemoFrame.setVisible( keyDemoFrame.setVisible( keyDemoFrame.setVisible( truetruetruetrue ); ); ); ); // // // // eeeexibe o xibe o xibe o xibe o frameframeframeframe 13 } } } } // // // // ffffim deim deim deim de main main main main 14 } } } } // // // // ffffim da im da im da im da classclassclassclasseeee KeyDemo KeyDemo KeyDemo KeyDemo

140

2005 by Pearson Education do Brasil

Resumo

KeyDemo.javaKeyDemo.javaKeyDemo.javaKeyDemo.java

(2 de 2)

Page 71: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

71

141

2005 by Pearson Education do Brasil

11.17 Gerenciadores de layout– Fornecidos para organizar componentes GUI em um contêiner

para apresentações.

– Fornecem as capacidades básicas de layout, e assim osprogramadores não precisam determinar a posição e o tamanho exatos de um componente.

– Implementam a interface LayoutManager (java.awt).

– O método setLayoutsetLayoutsetLayoutsetLayout()()()() de ContainerContainerContainerContainer aceita um objetoque implementa a interface LayoutManagerLayoutManagerLayoutManagerLayoutManager comoargumento. Sendo um método chamado no início do código.

– Há basicamente 3 formas de organizar componentes em umaGUI:

• Posicionamento absoluto.

• Gerenciadores de layout.

• Programação visual em um IDE.

142

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.16

A maioria dos ambientes de programação do Java fornece ferramentas de desenho GUI que ajudam um programador a projetar uma GUI graficamente; as ferramentas de desenho então escrevem o código Java para criar a GUI. Essas ferramentas costumam fornecer maior controle sobre o tamanho, a posição e o alinhamento de componentes GUI do que os gerenciadores de layouts predefinidos.

Page 72: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

72

143

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.17

É possível configurar o layout de um ContainerContainerContainerContainercomo nullnullnullnull, o que indica que nenhum gerenciador de layout deve ser utilizado. Em um ContainerContainerContainerContainer sem gerenciador de layout, o programador deve posicionar e dimensionar os componentes no contêiner dado e cuidar para que, em eventos de redimensionamento, todos os componentes sejam reposicionados conforme necessário. Os eventos de redimensionamento de um componente podem ser processados por um ComponentListenerComponentListenerComponentListenerComponentListener.

144

2005 by Pearson Education do Brasil

Figura 11.38 | Gerenciadores de layout.

Gerenciador de layout

Descrição

FlowLayoutFlowLayoutFlowLayoutFlowLayout Padrão para javax.swing.JPaneljavax.swing.JPaneljavax.swing.JPaneljavax.swing.JPanel. Coloca os componentes seqüencialmente (da esquerda para a direita) na ordem que foram adicionados. Também é possível especificar a ordem dos componentes utilizando o método ContainContainContainContainerererer method addaddaddadd, que aceita um Component e uma posição de índice do tipo inteiro como argumentos.

BorderLayoutBorderLayoutBorderLayoutBorderLayout Padrão para JFrameJFrameJFrameJFrames (e outras janelas). Organiza os componentes em cinco áreas: NORTHNORTHNORTHNORTH, SOUTHSOUTHSOUTHSOUTH, EASTEASTEASTEAST, WESTWESTWESTWEST e CENTERCENTERCENTERCENTER.

GridLayoutGridLayoutGridLayoutGridLayout Organiza os componentes nas linhas e colunas.

OBS.: Há outros gerenciadores de Layout, como o GridBagLayout. Os da tabela acima são apenas os maiscomuns.

Page 73: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

73

145

2005 by Pearson Education do Brasil

11.17.1 FlowLayout• FlowLayout:

– É o gerenciador de layout mais simples.

– Os componentes GUI são colocados em um contêiner da esquerda para a direita na ordem em que eles são adicionados ao contêiner. Quando a borda do contêiner for atingida, passa-se para a próximalinha.

– Os componentes podem ser alinhados à esquerda, centralizados (o padrão) ou alinhados à direita.

146

2005 by Pearson Education do Brasil

Resumo

FlowLayoutFrameFlowLayoutFrameFlowLayoutFrameFlowLayoutFrame.java.java.java.java

(1 de 3)

Aplicativo que utilizao FlowLayoutpara posicionarbotões em umaframe, de acordocom a indicaçãodo usuário e a dimensão dajanela.

1 // Fig. 11.39: FlowLayoutFrame.java// Fig. 11.39: FlowLayoutFrame.java// Fig. 11.39: FlowLayoutFrame.java// Fig. 11.39: FlowLayoutFrame.java 2 // // // // Demonstrando os alinhamentos de FlowLayoutDemonstrando os alinhamentos de FlowLayoutDemonstrando os alinhamentos de FlowLayoutDemonstrando os alinhamentos de FlowLayout.... 3 importimportimportimport java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout; java.awt.FlowLayout;

4 importimportimportimport java.awt.Container; java.awt.Container; java.awt.Container; java.awt.Container;

5 importimportimportimport java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener;

6 importimportimportimport java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent;

7 importimportimportimport javax.swing javax.swing javax.swing javax.swing.JFrame;.JFrame;.JFrame;.JFrame;

8 importimportimportimport javax.swing.JButton; javax.swing.JButton; javax.swing.JButton; javax.swing.JButton;

9 10 publicpublicpublicpublic classclassclassclass FlowLayoutFrame FlowLayoutFrame FlowLayoutFrame FlowLayoutFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

11 {{{{

12 privateprivateprivateprivate JButton leftJButton; JButton leftJButton; JButton leftJButton; JButton leftJButton; // // // // botão para configurar alinhamento à esquerdabotão para configurar alinhamento à esquerdabotão para configurar alinhamento à esquerdabotão para configurar alinhamento à esquerda

13 privateprivateprivateprivate JButton centerJButton; JButton centerJButton; JButton centerJButton; JButton centerJButton; // // // // botão para configurar alinbotão para configurar alinbotão para configurar alinbotão para configurar alinhamento centralizadohamento centralizadohamento centralizadohamento centralizado

14 privateprivateprivateprivate JButton rightJButton; JButton rightJButton; JButton rightJButton; JButton rightJButton; // // // // botão para configurar alinhamento à dirbotão para configurar alinhamento à dirbotão para configurar alinhamento à dirbotão para configurar alinhamento à direitaeitaeitaeita 15 privateprivateprivateprivate FlowLayout layout; FlowLayout layout; FlowLayout layout; FlowLayout layout; // // // // objeto de layout objeto de layout objeto de layout objeto de layout 16 privateprivateprivateprivate Container container; Container container; Container container; Container container; // // // // contêiner para configurar layoutcontêiner para configurar layoutcontêiner para configurar layoutcontêiner para configurar layout

17

18 // // // // cccconfigura GUI e registra listeners de botãoonfigura GUI e registra listeners de botãoonfigura GUI e registra listeners de botãoonfigura GUI e registra listeners de botão

19 publicpublicpublicpublic FlowLayoutFrame() FlowLayoutFrame() FlowLayoutFrame() FlowLayoutFrame()

20 { { { {

21 supersupersupersuper( ( ( ( "FlowLayout Demo""FlowLayout Demo""FlowLayout Demo""FlowLayout Demo" ); ); ); );

22 23 layout = layout = layout = layout = newnewnewnew FlowLayout(); FlowLayout(); FlowLayout(); FlowLayout(); // cr// cr// cr// criaiaiaia FlowLayout FlowLayout FlowLayout FlowLayout 24 container = getContentPane(); container = getContentPane(); container = getContentPane(); container = getContentPane(); // // // // obtémobtémobtémobtém contêiner para contêiner para contêiner para contêiner para laylaylaylayoutoutoutout 25 setLayout( layout ); setLayout( layout ); setLayout( layout ); setLayout( layout ); // // // // configura configura configura configura layoulayoulayoulayout do framet do framet do framet do frame 26

Cria um objeto FlowLayout

Configura o layout da aplicação

Page 74: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

74

147

2005 by Pearson Education do Brasil

Resumo

FlowLayoutFrameFlowLayoutFrameFlowLayoutFrameFlowLayoutFrame.java.java.java.java

(2 de 3)

27 // // // // configura leftJButton e registra listenerconfigura leftJButton e registra listenerconfigura leftJButton e registra listenerconfigura leftJButton e registra listener

28 leftJButton = leftJButton = leftJButton = leftJButton = newnewnewnew JButton( JButton( JButton( JButton( "Left""Left""Left""Left" ); ); ); ); // cr// cr// cr// criaiaiaia botão botão botão botão LeftLeftLeftLeft 29 add( leftJButton ); add( leftJButton ); add( leftJButton ); add( leftJButton ); // // // // adiciona o botão Left ao frameadiciona o botão Left ao frameadiciona o botão Left ao frameadiciona o botão Left ao frame

30 leftJButton.addActionListener( leftJButton.addActionListener( leftJButton.addActionListener( leftJButton.addActionListener(

31 32 newnewnewnew Act Act Act ActionListener() ionListener() ionListener() ionListener() // // // // classe interna anônimaclasse interna anônimaclasse interna anônimaclasse interna anônima

33 { { { {

34 // proces // proces // proces // processa o evento sa o evento sa o evento sa o evento leftJButton leftJButton leftJButton leftJButton 35 publicpublicpublicpublic voidvoidvoidvoid actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event )

36 { { { {

37 layout.setAlignment( layout.setAlignment( layout.setAlignment( layout.setAlignment( FlowLayout.LEFTFlowLayout.LEFTFlowLayout.LEFTFlowLayout.LEFT ); ); ); );

38 39 // reali // reali // reali // realinhanhanhanha os os os os componentcomponentcomponentcomponenteeeessss anexados anexados anexados anexados 40 layout.layoutContainer( container );layout.layoutContainer( container );layout.layoutContainer( container );layout.layoutContainer( container );

41 } } } } // // // // fim do método fim do método fim do método fim do método actionPerformedactionPerformedactionPerformedactionPerformed 42 } } } } // // // // fim da classe interna anônimafim da classe interna anônimafim da classe interna anônimafim da classe interna anônima

43 ); ); ); ); // // // // fim da chamada parafim da chamada parafim da chamada parafim da chamada para addActionListeneraddActionListeneraddActionListeneraddActionListener 44 45 // // // // configuraconfiguraconfiguraconfigura centerJButton centerJButton centerJButton centerJButton eeee regist regist regist registrararara listener listener listener listener 46 centerJButton = centerJButton = centerJButton = centerJButton = newnewnewnew JButton( JButton( JButton( JButton( "Center""Center""Center""Center" ); ); ); ); // cria botão// cria botão// cria botão// cria botão Center Center Center Center 47 add( centerJButton ); add( centerJButton ); add( centerJButton ); add( centerJButton ); // ad// ad// ad// adicionaicionaicionaiciona botão botão botão botão Center Center Center Center ao ao ao ao frameframeframeframe 48 centerJButton.addAction centerJButton.addAction centerJButton.addAction centerJButton.addActionListener(Listener(Listener(Listener(

49 50 newnewnewnew ActionListener() ActionListener() ActionListener() ActionListener() // // // // classe interna anônimaclasse interna anônimaclasse interna anônimaclasse interna anônima 51 { { { {

52 // process // process // process // processa eventoa eventoa eventoa evento centerJButton centerJButton centerJButton centerJButton 53 publicpublicpublicpublic voidvoidvoidvoid actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event )

54 { { { {

55 layolayolayolayout.setAlignment( ut.setAlignment( ut.setAlignment( ut.setAlignment( FlowLayout.CENTERFlowLayout.CENTERFlowLayout.CENTERFlowLayout.CENTER ); ); ); );

56

Adiciona JButton; FlowLayout tratará o posicionamento

Método para configurar alinhamento– recebendocomo argumento o alinhamento à esquerda

Método disparado para ajustar o layout do container indicado, causando um realinhamento apósalguma indicação anterior

Adiciona JButton; FlowLayout tratará o posicionamento

Configura o alinhamento no centro

148

2005 by Pearson Education do Brasil

Resumo

FlowLayoutFrameFlowLayoutFrameFlowLayoutFrameFlowLayoutFrame.java.java.java.java

(3 de 3)

57 // reali // reali // reali // realinnnnha os componentes anexadosha os componentes anexadosha os componentes anexadosha os componentes anexados 58 layout.layoutContainer( container );layout.layoutContainer( container );layout.layoutContainer( container );layout.layoutContainer( container );

59 } } } } // // // // fim do métodofim do métodofim do métodofim do método actionPerformedactionPerformedactionPerformedactionPerformed 60 } } } } // // // // ffffim da classe interna anim da classe interna anim da classe interna anim da classe interna anônimaônimaônimaônima 61 ); ); ); ); // // // // ffffim da chamada paraim da chamada paraim da chamada paraim da chamada para addActionListener addActionListener addActionListener addActionListener 62 63 // // // // cccconfiguraonfiguraonfiguraonfigura rightJButton rightJButton rightJButton rightJButton eeee regist regist regist registrrrraaaa listener listener listener listener 64 rightJButton = rightJButton = rightJButton = rightJButton = newnewnewnew JButton( JButton( JButton( JButton( "Right" "Right" "Right" "Right" ); ); ); ); // cr// cr// cr// criiiiaaaa botbotbotbotão ão ão ão RightRightRightRight 65 add( rightJButton ); add( rightJButton ); add( rightJButton ); add( rightJButton ); // ad// ad// ad// adiiiicionacionacionaciona botbotbotbotão ão ão ão Right Right Right Right aaaaoooo frame frame frame frame 66 rightJButton.addActionListener( rightJButton.addActionListener( rightJButton.addActionListener( rightJButton.addActionListener(

67 68 newnewnewnew A A A ActionListener() ctionListener() ctionListener() ctionListener() // // // // classe classe classe classe interna interna interna interna ananananônimaônimaônimaônima 69 { { { {

70 // process // process // process // processa o eventoa o eventoa o eventoa o evento rightJButton rightJButton rightJButton rightJButton 71 publicpublicpublicpublic voidvoidvoidvoid actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event )

72 { { { {

73 layout.setAlignment( layout.setAlignment( layout.setAlignment( layout.setAlignment( FlowLayout.RIGHTFlowLayout.RIGHTFlowLayout.RIGHTFlowLayout.RIGHT ); ); ); );

74 75 // reali // reali // reali // realinnnnha os componentesha os componentesha os componentesha os componentes anexadosanexadosanexadosanexados 76 layout.layoutContainer( container );layout.layoutContainer( container );layout.layoutContainer( container );layout.layoutContainer( container );

77 } } } } // // // // fim do métodofim do métodofim do métodofim do método actionPerformedactionPerformedactionPerformedactionPerformed 78 } } } } // // // // ffffim daim daim daim da classe interna anônimaclasse interna anônimaclasse interna anônimaclasse interna anônima 79 ); ); ); ); // // // // ffffim da chamada para im da chamada para im da chamada para im da chamada para addActionListeneraddActionListeneraddActionListeneraddActionListener 80 } } } } // // // // ffffim do construtorim do construtorim do construtorim do construtor FlowLayoutFrame FlowLayoutFrame FlowLayoutFrame FlowLayoutFrame 81 } } } } // // // // fim da classefim da classefim da classefim da classe FlowLayoutFrameFlowLayoutFrameFlowLayoutFrameFlowLayoutFrame

Ajusta o layout

Adiciona JButton; FlowLayout tratará o posicionamento

Configura o alinhamento à direita

Ajusta o layout

Page 75: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

75

149

2005 by Pearson Education do Brasil

Resumo

FlowLayoutDemoFlowLayoutDemoFlowLayoutDemoFlowLayoutDemo.java.java.java.java

(1 de 2)

1 // Fig. 11.40: FlowLayoutDemo.java// Fig. 11.40: FlowLayoutDemo.java// Fig. 11.40: FlowLayoutDemo.java// Fig. 11.40: FlowLayoutDemo.java 2 // Test// Test// Test// Testaaaandondondondo FlowLayoutFrame. FlowLayoutFrame. FlowLayoutFrame. FlowLayoutFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass FlowLayoutDemo FlowLayoutDemo FlowLayoutDemo FlowLayoutDemo

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 FlowLayoutFrame flowLayoutFrame = FlowLayoutFrame flowLayoutFrame = FlowLayoutFrame flowLayoutFrame = FlowLayoutFrame flowLayoutFrame = newnewnewnew FlowLa FlowLa FlowLa FlowLayoutFrame(); youtFrame(); youtFrame(); youtFrame();

10 flowLayoutFrame.setDefaultCloseOperation( flowLayoutFrame.setDefaultCloseOperation( flowLayoutFrame.setDefaultCloseOperation( flowLayoutFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 flowLayoutFrame.setSize( flowLayoutFrame.setSize( flowLayoutFrame.setSize( flowLayoutFrame.setSize( 300300300300, , , , 75757575 ); ); ); ); // // // // cccconfigura o tamanho doonfigura o tamanho doonfigura o tamanho doonfigura o tamanho do frame frame frame frame 12 flowLayoutFrame.setVisible( flowLayoutFrame.setVisible( flowLayoutFrame.setVisible( flowLayoutFrame.setVisible( truetruetruetrue ); ); ); ); // // // // eeeexibe o xibe o xibe o xibe o frfrfrfraaaamemememe 13 } } } } // // // // ffffim dim dim dim de e e e mainmainmainmain 14 } } } } // // // // ffffim da classeim da classeim da classeim da classe FlowLayoutDemo FlowLayoutDemo FlowLayoutDemo FlowLayoutDemo

150

2005 by Pearson Education do Brasil

Resumo

FlowLayoutDemoFlowLayoutDemoFlowLayoutDemoFlowLayoutDemo.java.java.java.java

(2 de 2)

Page 76: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

76

151

2005 by Pearson Education do Brasil

11.17.2 BorderLayout• BorderLayout:

– Gerenciador de layout padrão de um JFrameJFrameJFrameJFrame.

– Organiza os componentes em cinco regiões —NORTH, SOUTH, EAST, WEST e CENTER.

– Implementa a interface LayoutManager2 (umasubinterface de LayoutManager, com novos métodos).

– Limita um Container a conter no máximo 5 componentes– um para cada região. No entanto cada componentetambém pode ser um Container, permitindo assim quemais componentes sejam adicionados.

– Fornece o espaçamento da lacuna horizontal e o espaçamento da lacuna vertical.

152

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.18

Todo contêiner pode ter apenas um gerenciador de layout. Os contêineres separados no mesmo aplicativo podem utilizar diferentes gerenciadores de layout.

Page 77: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

77

153

2005 by Pearson Education do Brasil

Observação sobre a aparência e comportamento 11.19

Se nenhuma região for especificada ao adicionar um ComponentComponentComponentComponent para um BorderLayoutBorderLayoutBorderLayoutBorderLayout, o gerenciador de layout assume que o ComponentComponentComponentComponent deve ser adicionado à região BorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTER.

154

2005 by Pearson Education do Brasil

Erro comum de programação 11.6

Quando mais de um componente é adicionado a uma região em um BorderLayoutBorderLayoutBorderLayoutBorderLayout, somente o último componente adicionado a essa região seráexibido. Não há nenhum erro que indica esse problema.

Page 78: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

78

155

2005 by Pearson Education do Brasil

Resumo

BorderLayoutBorderLayoutBorderLayoutBorderLayoutFrame.javaFrame.javaFrame.javaFrame.java

(1 de 2)

1 // Fig. 11.41: BorderLayoutFrame.java// Fig. 11.41: BorderLayoutFrame.java// Fig. 11.41: BorderLayoutFrame.java// Fig. 11.41: BorderLayoutFrame.java 2 // Demonstra// Demonstra// Demonstra// Demonstrannnndodododo BorderLayout. BorderLayout. BorderLayout. BorderLayout. 3 importimportimportimport java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout;

4 importimportimportimport java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener;

5 importimportimportimport java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent;

6 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

7 importimportimportimport javax.swing.JButton; javax.swing.JButton; javax.swing.JButton; javax.swing.JButton;

8 9 publicpublicpublicpublic classclassclassclass BorderLayoutFrame BorderLayoutFrame BorderLayoutFrame BorderLayoutFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame implementsimplementsimplementsimplements ActionListener ActionListener ActionListener ActionListener

10 {{{{

11 privateprivateprivateprivate JButton buttons[]; JButton buttons[]; JButton buttons[]; JButton buttons[]; // array // array // array // array dddde bote bote bote botões para ocultar ões para ocultar ões para ocultar ões para ocultar partespartespartespartes 12 privateprivateprivateprivate finalfinalfinalfinal String names[] = { String names[] = { String names[] = { String names[] = { "Hide North""Hide North""Hide North""Hide North", , , , "Hide South""Hide South""Hide South""Hide South", , , ,

13 "Hide East""Hide East""Hide East""Hide East", , , , "Hi"Hi"Hi"Hide West"de West"de West"de West", , , , "Hide Center""Hide Center""Hide Center""Hide Center" }; }; }; };

14 privateprivateprivateprivate BorderLayout layout; BorderLayout layout; BorderLayout layout; BorderLayout layout; // // // // objeto borderlayoutobjeto borderlayoutobjeto borderlayoutobjeto borderlayout

15 16 // // // // configura GUI e tratamento de eventoconfigura GUI e tratamento de eventoconfigura GUI e tratamento de eventoconfigura GUI e tratamento de evento

17 publicpublicpublicpublic BorderLayoutFrame() BorderLayoutFrame() BorderLayoutFrame() BorderLayoutFrame()

18 { { { {

19 supersupersupersuper( ( ( ( "BorderLayout Demo""BorderLayout Demo""BorderLayout Demo""BorderLayout Demo" ); ); ); );

20 21 layout = layout = layout = layout = newnewnewnew Border Border Border BorderLayout( Layout( Layout( Layout( 5555, , , , 5555 ); ); ); ); // 5 pixel gaps// 5 pixel gaps// 5 pixel gaps// 5 pixel gaps 22 setLayout( layout ); setLayout( layout ); setLayout( layout ); setLayout( layout ); // // // // configura o layout de frameconfigura o layout de frameconfigura o layout de frameconfigura o layout de frame 23 buttons = buttons = buttons = buttons = newnewnewnew JButton[ names.length ]; JButton[ names.length ]; JButton[ names.length ]; JButton[ names.length ]; // // // // configura o tamanho do arrayconfigura o tamanho do arrayconfigura o tamanho do arrayconfigura o tamanho do array

24 25 // // // // cria JButtons e registra cria JButtons e registra cria JButtons e registra cria JButtons e registra llllisteneristeneristeneristenerssss para eles para eles para eles para eles

26 forforforfor ( ( ( ( intintintint co co co count = unt = unt = unt = 0000; count < names.length; count++ ) ; count < names.length; count++ ) ; count < names.length; count++ ) ; count < names.length; count++ )

27 { { { {

28 buttons[ count ] = buttons[ count ] = buttons[ count ] = buttons[ count ] = newnewnewnew JButton( names[ count ] ); JButton( names[ count ] ); JButton( names[ count ] ); JButton( names[ count ] );

29 buttons[ count ].addActionListener( buttons[ count ].addActionListener( buttons[ count ].addActionListener( buttons[ count ].addActionListener( thisthisthisthis ); ); ); );

30 } } } } // // // // ffffim de im de im de im de forforforfor

Declara uma variável de instância BorderLayout

Cria BorderLayout, informando como argumentosos espaçamentos horizontal e vertical (em pixels, sendopadrão 1 pixel para cada)

Configura o layout da frame

Registra um handler de evento para um elemento do array de JButton

A própria janela frame implementaa interface ouvinte que irá tratar.

156

2005 by Pearson Education do Brasil

Resumo

BorderLayoutBorderLayoutBorderLayoutBorderLayoutFrame.javaFrame.javaFrame.javaFrame.java

(2 de 2)

31 32 add( buttons[ add( buttons[ add( buttons[ add( buttons[ 0000 ], ], ], ], BorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTH ); ); ); ); // // // // adiciona botão para o norteadiciona botão para o norteadiciona botão para o norteadiciona botão para o norte 33 add( buttons[ add( buttons[ add( buttons[ add( buttons[ 1111 ], ], ], ], BorderLayout.SOUTHBorderLayout.SOUTHBorderLayout.SOUTHBorderLayout.SOUTH ); ); ); ); // // // // adiciona botão para o suladiciona botão para o suladiciona botão para o suladiciona botão para o sul 34 add( buttons[ add( buttons[ add( buttons[ add( buttons[ 2222 ], ], ], ], BorderLayout.EASTBorderLayout.EASTBorderLayout.EASTBorderLayout.EAST ); ); ); ); // // // // adiciona botão para o lesteadiciona botão para o lesteadiciona botão para o lesteadiciona botão para o leste

35 add( buttons[ add( buttons[ add( buttons[ add( buttons[ 3333 ], ], ], ], BorderLayout.WEST BorderLayout.WEST BorderLayout.WEST BorderLayout.WEST ); ); ); ); // // // // adiciona botão para o oesteadiciona botão para o oesteadiciona botão para o oesteadiciona botão para o oeste

36 add( buttons[ add( buttons[ add( buttons[ add( buttons[ 4444 ], ], ], ], BorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTER ); ); ); ); // // // // adiciona botão para o centroadiciona botão para o centroadiciona botão para o centroadiciona botão para o centro

37 } } } } // // // // fim do construtorfim do construtorfim do construtorfim do construtor BorderLayoutFrame BorderLayoutFrame BorderLayoutFrame BorderLayoutFrame 38 39 // // // // trata eventos de botãotrata eventos de botãotrata eventos de botãotrata eventos de botão 40 publicpublicpublicpublic voidvoidvoidvoid actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event )

41 { { { {

42 // // // // verifica a origem de evento e o painel de conteúdo de layout correspondentementeverifica a origem de evento e o painel de conteúdo de layout correspondentementeverifica a origem de evento e o painel de conteúdo de layout correspondentementeverifica a origem de evento e o painel de conteúdo de layout correspondentemente

43 forforforfor ( ( ( ( JButtonJButtonJButtonJButton button : buttons ) button : buttons ) button : buttons ) button : buttons )

44 { { { {

45 ifififif ( event.getSource() ( event.getSource() ( event.getSource() ( event.getSource() == button )== button )== button )== button )

46 button.setVisible( button.setVisible( button.setVisible( button.setVisible( falsefalsefalsefalse ); ); ); ); // // // // oculta botão clicadooculta botão clicadooculta botão clicadooculta botão clicado 47 elseelseelseelse 48 button.setVisible( button.setVisible( button.setVisible( button.setVisible( truetruetruetrue ); ); ); ); // // // // mostra outros botõesmostra outros botõesmostra outros botõesmostra outros botões 49 } } } } // // // // fim de forfim de forfim de forfim de for 50 51 layout.layoutContainer( getContentPane() )layout.layoutContainer( getContentPane() )layout.layoutContainer( getContentPane() )layout.layoutContainer( getContentPane() ); ; ; ; // // // // painel de conteúdo de painel de conteúdo de painel de conteúdo de painel de conteúdo de layoutlayoutlayoutlayout 52 } } } } // // // // fim do método fim do método fim do método fim do método actionPerformedactionPerformedactionPerformedactionPerformed 53 } } } } // // // // fim dfim dfim dfim da classea classea classea classe BorderLayoutFrameBorderLayoutFrameBorderLayoutFrameBorderLayoutFrame

Adiciona botões à aplicação utilizando as constantes do gerenciador de layout paraposicionamento na tela.

Torna o botão invisível

Torna o botão visível

Atualiza o layout, após a mudançaindicada no código anterior

Para layouts mais complexos, sugere-se agrupar componentes em um JPanel, cada um com um gerenciador de layout separado. E colocar o(s) JPanel(s) criado(s) no JFrame.

Page 79: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

79

157

2005 by Pearson Education do Brasil

Resumo

BorderLayoutBorderLayoutBorderLayoutBorderLayoutDemo.javaDemo.javaDemo.javaDemo.java

(1 de 2)

1 // Fig. 11.42: BorderLayoutDemo.java// Fig. 11.42: BorderLayoutDemo.java// Fig. 11.42: BorderLayoutDemo.java// Fig. 11.42: BorderLayoutDemo.java 2 // Test// Test// Test// Testandoandoandoando BorderLayoutFrame. BorderLayoutFrame. BorderLayoutFrame. BorderLayoutFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass BorderLayoutDemo BorderLayoutDemo BorderLayoutDemo BorderLayoutDemo

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 BorderLayoutFrame borderLayoutFrame BorderLayoutFrame borderLayoutFrame BorderLayoutFrame borderLayoutFrame BorderLayoutFrame borderLayoutFrame = = = = newnewnewnew BorderLayoutFrame(); BorderLayoutFrame(); BorderLayoutFrame(); BorderLayoutFrame();

10 borderLayoutFrame.setDefaultCloseOperation( borderLayoutFrame.setDefaultCloseOperation( borderLayoutFrame.setDefaultCloseOperation( borderLayoutFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 borderLayoutFrame.setSize( borderLayoutFrame.setSize( borderLayoutFrame.setSize( borderLayoutFrame.setSize( 300300300300, , , , 200200200200 ); ); ); ); // // // // configura o tamanho doconfigura o tamanho doconfigura o tamanho doconfigura o tamanho do frame frame frame frame 12 borderLayoutFrame.setVisible( borderLayoutFrame.setVisible( borderLayoutFrame.setVisible( borderLayoutFrame.setVisible( truetruetruetrue ); ); ); ); // // // // exibe oexibe oexibe oexibe o frame frame frame frame 13 } } } } // // // // fim de fim de fim de fim de mainmainmainmain 14 } } } } // // // // fim da classe fim da classe fim da classe fim da classe BorderLayoutDemoBorderLayoutDemoBorderLayoutDemoBorderLayoutDemo

lacuna horizontal

lacuna vertical

158

2005 by Pearson Education do Brasil

Resumo

BorderLayoutBorderLayoutBorderLayoutBorderLayoutDemo.javaDemo.javaDemo.javaDemo.java

(2 de 2)

Page 80: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

80

159

2005 by Pearson Education do Brasil

11.17.3 GridLayout• GridLayout:

– Divide o contêiner em uma grade, de modo que oscomponentes podem ser colocados nas linhas e colunas. Começando na parte superior esquerda dagrade e prosseguindo da esquerda para a direita atéa linha estar cheia, quando se passa para a próximalinha.

– Todos os componentes têm a mesma largura e altura.

– Implamenta a interface LayoutManagerLayoutManagerLayoutManagerLayoutManager.

160

2005 by Pearson Education do Brasil

Resumo

GridLayoutGridLayoutGridLayoutGridLayoutFrame.javaFrame.javaFrame.javaFrame.java

(1 de 2)

1 // Fig. 11.43: GridLayoutFrame.java// Fig. 11.43: GridLayoutFrame.java// Fig. 11.43: GridLayoutFrame.java// Fig. 11.43: GridLayoutFrame.java 2 // Demonstr// Demonstr// Demonstr// Demonstrando ando ando ando GridLayout.GridLayout.GridLayout.GridLayout. 3 importimportimportimport java.awt.GridLayout; java.awt.GridLayout; java.awt.GridLayout; java.awt.GridLayout;

4 importimportimportimport java.awt.Container; java.awt.Container; java.awt.Container; java.awt.Container;

5 importimportimportimport java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener;

6 importimportimportimport java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent;

7 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

8 importimportimportimport javax.swing.JButton; javax.swing.JButton; javax.swing.JButton; javax.swing.JButton;

9 10 publicpublicpublicpublic classclassclassclass GridLayoutFrame GridLayoutFrame GridLayoutFrame GridLayoutFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame implementsimplementsimplementsimplements ActionListener ActionListener ActionListener ActionListener

11 {{{{

12 privateprivateprivateprivate JButton buttons[]; JButton buttons[]; JButton buttons[]; JButton buttons[]; // array // array // array // array de botõesde botõesde botõesde botões 13 privateprivateprivateprivate finalfinalfinalfinal String names[] = String names[] = String names[] = String names[] =

14 { { { { "one""one""one""one", , , , "two""two""two""two", , , , "three""three""three""three", , , , "four""four""four""four", , , , "five""five""five""five", , , , "six""six""six""six" }; }; }; };

15 privateprivateprivateprivate booleanbooleanbooleanboolean toggle = toggle = toggle = toggle = truetruetruetrue; ; ; ; // // // // alterna entre dois layoutsalterna entre dois layoutsalterna entre dois layoutsalterna entre dois layouts

16 privateprivateprivateprivate Container container; Container container; Container container; Container container; // cont // cont // cont // contêêêêinerinerineriner do frame do frame do frame do frame 17 privateprivateprivateprivate GridLayout gridLayout1; GridLayout gridLayout1; GridLayout gridLayout1; GridLayout gridLayout1; // // // // primeiroprimeiroprimeiroprimeiro gridlayout gridlayout gridlayout gridlayout 18 privateprivateprivateprivate GridLayout gridLayout2; GridLayout gridLayout2; GridLayout gridLayout2; GridLayout gridLayout2; // // // // segundosegundosegundosegundo grid grid grid gridlayoutlayoutlayoutlayout 19 20 // // // // construtor sem argumentoconstrutor sem argumentoconstrutor sem argumentoconstrutor sem argumento

21 publicpublicpublicpublic GridLayoutFrame() GridLayoutFrame() GridLayoutFrame() GridLayoutFrame()

22 { { { {

23 supersupersupersuper( ( ( ( "GridLayout Demo""GridLayout Demo""GridLayout Demo""GridLayout Demo" ); ); ); );

24 gridLayout1 = gridLayout1 = gridLayout1 = gridLayout1 = newnewnewnew GridLayout( GridLayout( GridLayout( GridLayout( 2222, , , , 3333, , , , 5555, , , , 5555 ); ); ); ); // // // // 2 por 3; lacunas de 52 por 3; lacunas de 52 por 3; lacunas de 52 por 3; lacunas de 5

25 gridLayout2 = gridLayout2 = gridLayout2 = gridLayout2 = newnewnewnew GridLayout( GridLayout( GridLayout( GridLayout( 3333, , , , 2222 ); ); ); ); // 3 // 3 // 3 // 3 porporporpor 2; 2; 2; 2; sem lacunassem lacunassem lacunassem lacunas 26 container = getContentPane(); container = getContentPane(); container = getContentPane(); container = getContentPane(); // // // // obtém painel de obtém painel de obtém painel de obtém painel de contcontcontconteúdoeúdoeúdoeúdo 27 setLayout( gridLayout1 ); setLayout( gridLayout1 ); setLayout( gridLayout1 ); setLayout( gridLayout1 ); // // // // configura layout do configura layout do configura layout do configura layout do JFrameJFrameJFrameJFrame 28 buttons = buttons = buttons = buttons = newnewnewnew JButton[ names.length ]; JButton[ names.length ]; JButton[ names.length ]; JButton[ names.length ]; // cr// cr// cr// criaiaiaia array array array array dededede JButtons JButtons JButtons JButtons 29

Declara duas variáveis de instância GridLayout

Cria GridLayout, informando a quantidade de linhas, de colunas e os espaçamentos horizontal e vertical. A instanciação pode ocorrer informandoapenas os dois primeiros valores também.

Configura o layout

Page 81: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

81

161

2005 by Pearson Education do Brasil

Resumo

GridLayoutGridLayoutGridLayoutGridLayoutFrame.javaFrame.javaFrame.javaFrame.java

(2 de 2)

30 forforforfor ( ( ( ( intintintint count = count = count = count = 0000; count < names.length; count++ ); count < names.length; count++ ); count < names.length; count++ ); count < names.length; count++ )

31 { { { {

32 buttons[ count ] = buttons[ count ] = buttons[ count ] = buttons[ count ] = newnewnewnew JButton( names[ count ] ); JButton( names[ count ] ); JButton( names[ count ] ); JButton( names[ count ] );

33 buttons[ count ].addActionListener( buttons[ count ].addActionListener( buttons[ count ].addActionListener( buttons[ count ].addActionListener( thisthisthisthis ); ); ); ); // regis// regis// regis// registratratratra listener listener listener listener 34 add( buttons[ count ] )add( buttons[ count ] )add( buttons[ count ] )add( buttons[ count ] ); ; ; ; // ad// ad// ad// adicionaicionaicionaiciona b b b botão ao otão ao otão ao otão ao JFrameJFrameJFrameJFrame 35 } } } } // // // // fim de fim de fim de fim de forforforfor 36 } } } } // // // // fim do construtorfim do construtorfim do construtorfim do construtor GridLayoutFrame GridLayoutFrame GridLayoutFrame GridLayoutFrame 37 38 // // // // trata eventos de botão alternando entre trata eventos de botão alternando entre trata eventos de botão alternando entre trata eventos de botão alternando entre layoutslayoutslayoutslayouts 39 publicpublicpublicpublic voidvoidvoidvoid actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event )

40 { { { {

41 ifififif ( tog ( tog ( tog ( toggle )gle )gle )gle )

42 container.setLayout( gridLayout2 ); container.setLayout( gridLayout2 ); container.setLayout( gridLayout2 ); container.setLayout( gridLayout2 ); // // // // configuraconfiguraconfiguraconfigura layout layout layout layout comocomocomocomo se se se segundogundogundogundo 43 elseelseelseelse 44 container.setLayout( gridLayout1 ); container.setLayout( gridLayout1 ); container.setLayout( gridLayout1 ); container.setLayout( gridLayout1 ); // // // // configuraconfiguraconfiguraconfigura layout layout layout layout como primeirocomo primeirocomo primeirocomo primeiro 45 46 toggle = !toggle; toggle = !toggle; toggle = !toggle; toggle = !toggle; // // // // alterna para valor opostoalterna para valor opostoalterna para valor opostoalterna para valor oposto

47 container.validate(); container.validate(); container.validate(); container.validate(); // // // // refaz o layout do contêinerrefaz o layout do contêinerrefaz o layout do contêinerrefaz o layout do contêiner

48 } } } } // // // // fim do método fim do método fim do método fim do método actionPerformedactionPerformedactionPerformedactionPerformed 49 } } } } // // // // fim da classe fim da classe fim da classe fim da classe GridLayoutFrameGridLayoutFrameGridLayoutFrameGridLayoutFrame

Utiliza o segundo layout

Utiliza o primeiro layout

Adiciona o botão ao JFrame

Recalcula o layout do container com base no gerenciador de layout atual para o container e o conjunto atual de componentesGUI exibidos.

162

2005 by Pearson Education do Brasil

Resumo

GridLayoutDemoGridLayoutDemoGridLayoutDemoGridLayoutDemo.java.java.java.java

1 // Fig. 11.44: GridLayoutDemo.java// Fig. 11.44: GridLayoutDemo.java// Fig. 11.44: GridLayoutDemo.java// Fig. 11.44: GridLayoutDemo.java 2 // Test// Test// Test// Testandoandoandoando GridLayoutFrame. GridLayoutFrame. GridLayoutFrame. GridLayoutFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass GridLayoutDemo GridLayoutDemo GridLayoutDemo GridLayoutDemo

6 {{{{

7 public static voidpublic static voidpublic static voidpublic static void main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 GridLayoutFrame gridLayoutFrame = GridLayoutFrame gridLayoutFrame = GridLayoutFrame gridLayoutFrame = GridLayoutFrame gridLayoutFrame = newnewnewnew Grid Grid Grid GridLayoutFrame(); LayoutFrame(); LayoutFrame(); LayoutFrame();

10 gridLayoutFrame.setDefaultCloseOperation( gridLayoutFrame.setDefaultCloseOperation( gridLayoutFrame.setDefaultCloseOperation( gridLayoutFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 gridLayoutFrame.setSize( gridLayoutFrame.setSize( gridLayoutFrame.setSize( gridLayoutFrame.setSize( 300300300300, , , , 200200200200 ); ); ); ); // // // // configura o tamanho do configura o tamanho do configura o tamanho do configura o tamanho do frameframeframeframe 12 gridLayoutFrame.setVisible( gridLayoutFrame.setVisible( gridLayoutFrame.setVisible( gridLayoutFrame.setVisible( truetruetruetrue ); ); ); ); // // // // exibe oexibe oexibe oexibe o frame frame frame frame 13 } } } } // // // // fim defim defim defim de mainmainmainmain 14 } } } } // // // // fim da classe fim da classe fim da classe fim da classe GridLayoutDemoGridLayoutDemoGridLayoutDemoGridLayoutDemo

Page 82: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

82

163

2005 by Pearson Education do Brasil

11.18 Utilizando painéis para gerenciar layouts mais complexos

• GUIs complexas frequentemente requerem múltiplos painéis para organizar seus componentes adequadamente em um layout específico.

• Um JPanelJPanelJPanelJPanel é um JComponentJComponentJComponentJComponent que estendeContainerContainerContainerContainer. Portanto um JPanelJPanelJPanelJPanel é um ContainerContainerContainerContainer e pode ter componentes. É umaboa saída para trabalhar com layouts complexos.

164

2005 by Pearson Education do Brasil

Resumo

PanelFrame.javaPanelFrame.javaPanelFrame.javaPanelFrame.java

(1 de 2)

1 // Fig. 11.45: PanelFrame.java// Fig. 11.45: PanelFrame.java// Fig. 11.45: PanelFrame.java// Fig. 11.45: PanelFrame.java 2 // // // // Utilizando um JPanel para ajudar a fazer o layout dos componentesUtilizando um JPanel para ajudar a fazer o layout dos componentesUtilizando um JPanel para ajudar a fazer o layout dos componentesUtilizando um JPanel para ajudar a fazer o layout dos componentes.... 3 importimportimportimport java.awt.GridLayout; java.awt.GridLayout; java.awt.GridLayout; java.awt.GridLayout;

4 importimportimportimport java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout;

5 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

6 importimportimportimport javax.swing.JPanel; javax.swing.JPanel; javax.swing.JPanel; javax.swing.JPanel;

7 importimportimportimport javax.swing.JButton; javax.swing.JButton; javax.swing.JButton; javax.swing.JButton;

8 9 pubpubpubpubliclicliclic classclassclassclass PanelFrame PanelFrame PanelFrame PanelFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

10 {{{{

11 privateprivateprivateprivate JPanel buttonJPanel; JPanel buttonJPanel; JPanel buttonJPanel; JPanel buttonJPanel; // pa// pa// pa// paiiiinel nel nel nel ppppara armazenar botara armazenar botara armazenar botara armazenar botõesõesõesões 12 privateprivateprivateprivate JButton buttons[]; JButton buttons[]; JButton buttons[]; JButton buttons[]; // array // array // array // array ddddeeee b b b boooottttõesõesõesões 13 14 // // // // cccconstrutor sem onstrutor sem onstrutor sem onstrutor sem argumentargumentargumentargumentosososos 15 publicpublicpublicpublic PanelFrame() PanelFrame() PanelFrame() PanelFrame()

16 { { { {

17 supersupersupersuper( ( ( ( "Panel Demo""Panel Demo""Panel Demo""Panel Demo" ); ); ); );

18 buttons = buttons = buttons = buttons = newnewnewnew JButton[ JButton[ JButton[ JButton[ 5555 ]; ]; ]; ]; // cr// cr// cr// cria array de botia array de botia array de botia array de botõesõesõesões 19 buttonJPanel = buttonJPanel = buttonJPanel = buttonJPanel = newnewnewnew JPanel(); JPanel(); JPanel(); JPanel(); // // // // cccconfigura painelonfigura painelonfigura painelonfigura painel 20 buttonJPanel.setLayout( buttonJPanel.setLayout( buttonJPanel.setLayout( buttonJPanel.setLayout( newnewnewnew GridLayout( GridLayout( GridLayout( GridLayout( 1111, buttons.length ) );, buttons.length ) );, buttons.length ) );, buttons.length ) );

21

Declara um JPanel para conter os botões

Cria o JPanel

Configura o layout para ser do tipo Grid com 1 linha e 1 colunapara cada button

Page 83: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

83

165

2005 by Pearson Education do Brasil

Resumo

PanelFrame.javaPanelFrame.javaPanelFrame.javaPanelFrame.java

(2 de 2)

22 // cr // cr // cr // criiiia e adiciona bota e adiciona bota e adiciona bota e adiciona botõesõesõesões 23 forforforfor ( ( ( ( intintintint count = count = count = count = 0000; count < buttons.length; count++ ) ; count < buttons.length; count++ ) ; count < buttons.length; count++ ) ; count < buttons.length; count++ )

24 { { { {

25 buttons[ count ] = buttons[ count ] = buttons[ count ] = buttons[ count ] = newnewnewnew JButton( JButton( JButton( JButton( "Button ""Button ""Button ""Button " + ( count + + ( count + + ( count + + ( count + 1111 ) ); ) ); ) ); ) );

26 buttonJPanel.add( buttons[ count ] ); buttonJPanel.add( buttons[ count ] ); buttonJPanel.add( buttons[ count ] ); buttonJPanel.add( buttons[ count ] ); // ad// ad// ad// adiiiiciona botciona botciona botciona botão ao painelão ao painelão ao painelão ao painel 27 } } } } // end for // end for // end for // end for 28 29 add( buttonJPanel, add( buttonJPanel, add( buttonJPanel, add( buttonJPanel, BorderLayout.SOUTHBorderLayout.SOUTHBorderLayout.SOUTHBorderLayout.SOUTH ); ); ); ); // ad// ad// ad// adiciona painel ao iciona painel ao iciona painel ao iciona painel ao JFrameJFrameJFrameJFrame 30 } } } } // // // // ffffim do construtorim do construtorim do construtorim do construtor PanelFrame PanelFrame PanelFrame PanelFrame 31 } } } } // // // // ffffim da classeim da classeim da classeim da classe PanelFrame PanelFrame PanelFrame PanelFrame

Adiciona um botão ao painel

Adiciona o painel à aplicação, na regiãosul

166

2005 by Pearson Education do Brasil

Resumo

PanelDemo.javaPanelDemo.javaPanelDemo.javaPanelDemo.java

1 // Fig. 11.46: PanelDemo.java// Fig. 11.46: PanelDemo.java// Fig. 11.46: PanelDemo.java// Fig. 11.46: PanelDemo.java 2 // Test// Test// Test// Testaaaandondondondo PanelFrame. PanelFrame. PanelFrame. PanelFrame. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass PanelDemo PanelDemo PanelDemo PanelDemo extendsextendsextendsextends JFrame JFrame JFrame JFrame

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 PanelFrame panelFrame = PanelFrame panelFrame = PanelFrame panelFrame = PanelFrame panelFrame = newnewnewnew PanelFrame(); PanelFrame(); PanelFrame(); PanelFrame();

10 panelFrame.setDefaultCloseOperation( panelFrame.setDefaultCloseOperation( panelFrame.setDefaultCloseOperation( panelFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 panelFrame.setSize( panelFrame.setSize( panelFrame.setSize( panelFrame.setSize( 450450450450, , , , 200200200200 ); ); ); ); // // // // cccconfigura o tamanho doonfigura o tamanho doonfigura o tamanho doonfigura o tamanho do frame frame frame frame 12 panelFrame.setVisible( panelFrame.setVisible( panelFrame.setVisible( panelFrame.setVisible( truetruetruetrue ); ); ); ); // // // // eeeexibe o xibe o xibe o xibe o frameframeframeframe 13 } } } } // // // // ffffim de im de im de im de mainmainmainmain 14 }}}} // // // // ffffim da im da im da im da classclassclassclasseeee PanelDemo PanelDemo PanelDemo PanelDemo

• A Classe JPanel não contém um painel de conteúdo.• A região SOUTH da frame é tão alta quanto os botões de buttonPanel• Um JPanel é dimensionado aos componentes que ele contém.

Page 84: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

84

167

2005 by Pearson Education do Brasil

11.19 JTextArea• JTextArea:

– Fornece uma área para manipular múltiplas linhas de texto.

– Subclasse de JComponentJComponentJComponentJComponent.

– Um texto fornecido pode ser selecionado pelo usuário(pode ser indicado como editável / não editável).

– Não tem evento de ação associado. E assim um eventoexterno indica quando processar o texto.

• Contêiner Box (javax.swing):

– Subclasse de Container.

– Utiliza um gerenciador de layout BoxLayout paraorganizar os componentes GUI horizontal ouverticalmente.

168

2005 by Pearson Education do Brasil

Observação sobre aparência e comportamento 11.20

Para fornecer a funcionalidade de mudança de linha automática para uma JTextAreaJTextAreaJTextAreaJTextArea, invoque o método JTextAreaJTextAreaJTextAreaJTextAreasetLineWrapsetLineWrapsetLineWrapsetLineWrap()()()() com um argumento truetruetruetrue.

Page 85: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

85

169

2005 by Pearson Education do Brasil

Resumo

TextAreaFrameTextAreaFrameTextAreaFrameTextAreaFrame.java.java.java.java

(1 de 2)

1 // Fig. 11.47: TextAreaFrame.java// Fig. 11.47: TextAreaFrame.java// Fig. 11.47: TextAreaFrame.java// Fig. 11.47: TextAreaFrame.java 2 // // // // Copiando texto selecionado de umCopiando texto selecionado de umCopiando texto selecionado de umCopiando texto selecionado de umaaaa textarea para textarea para textarea para textarea para a a a a outroutroutroutraaaa. . . . 3 importimportimportimport java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener;

4 importimportimportimport java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent;

5 importimportimportimport javax.swing.Box; javax.swing.Box; javax.swing.Box; javax.swing.Box;

6 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

7 importimportimportimport jav jav jav javax.swing.JTextArea;ax.swing.JTextArea;ax.swing.JTextArea;ax.swing.JTextArea;

8 importimportimportimport javax.swing.JButton; javax.swing.JButton; javax.swing.JButton; javax.swing.JButton;

9 importimportimportimport javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane;

10 11 publicpublicpublicpublic classclassclassclass TextAreaFrame TextAreaFrame TextAreaFrame TextAreaFrame extendsextendsextendsextends JFrame JFrame JFrame JFrame

12 {{{{

13 privateprivateprivateprivate JTextArea textArea1; JTextArea textArea1; JTextArea textArea1; JTextArea textArea1; // // // // exibe string exibe string exibe string exibe string demodemodemodemo 14 privateprivateprivateprivate JTextArea textArea2; JTextArea textArea2; JTextArea textArea2; JTextArea textArea2; ///// / / / texto destacado é copiado aquitexto destacado é copiado aquitexto destacado é copiado aquitexto destacado é copiado aqui 15 privateprivateprivateprivate JButton copyJButton; JButton copyJButton; JButton copyJButton; JButton copyJButton; // // // // começa a copiar o textocomeça a copiar o textocomeça a copiar o textocomeça a copiar o texto

16 17 // construtor // construtor // construtor // construtor sem argumentos sem argumentos sem argumentos sem argumentos 18 publicpublicpublicpublic TextAreaFrame() TextAreaFrame() TextAreaFrame() TextAreaFrame()

19 { { { {

20 supersupersupersuper( ( ( ( "TextArea Demo""TextArea Demo""TextArea Demo""TextArea Demo" ); ); ); );

21 Box box = Box.createHorizBox box = Box.createHorizBox box = Box.createHorizBox box = Box.createHorizontalBox(); ontalBox(); ontalBox(); ontalBox(); // cr// cr// cr// criiiia boxa boxa boxa box 22 String demo = String demo = String demo = String demo = "This is a demo string to"This is a demo string to"This is a demo string to"This is a demo string to\\\\n" n" n" n" + + + +

23 "illustrate copying text"illustrate copying text"illustrate copying text"illustrate copying text\\\\nfrom one textarea to nfrom one textarea to nfrom one textarea to nfrom one textarea to \\\\n"n"n"n" + + + +

24 "another textarea using an"another textarea using an"another textarea using an"another textarea using an\\\\nexternal eventnexternal eventnexternal eventnexternal event\\\\n"n"n"n";;;;

25 26 textArea1 = textArea1 = textArea1 = textArea1 = newnewnewnew JTextArea( dem JTextArea( dem JTextArea( dem JTextArea( demo, o, o, o, 10101010, , , , 15151515 ); ); ); ); // cr// cr// cr// criaiaiaia textarea1 textarea1 textarea1 textarea1 27 box.add( box.add( box.add( box.add( newnewnewnew JScrollPane( textArea1 ) ); JScrollPane( textArea1 ) ); JScrollPane( textArea1 ) ); JScrollPane( textArea1 ) ); // ad// ad// ad// adicionaicionaicionaiciona scrollpane scrollpane scrollpane scrollpane 28

Declara as variáveis de instância JTextArea

Cria um contêiner Box, na horizontal que organiza componentes da esquerdapara a direita na ordem em que elessão anexados

Cria uma área de texto e a adiciona à caixa, indicando que o texto ficará dentro de um componente de scroll.

O construtor de JTextArea aceita um texto iniciale valores para a quantidade de linhas e de colunas

170

2005 by Pearson Education do Brasil

Resumo

TextAreaFrameTextAreaFrameTextAreaFrameTextAreaFrame.java.java.java.java

(2 de 2)

29 copyJButton = copyJButton = copyJButton = copyJButton = newnewnewnew JButton( JButton( JButton( JButton( "Copy >>>""Copy >>>""Copy >>>""Copy >>>" ); ); ); ); // cr// cr// cr// cria botão de cópiaia botão de cópiaia botão de cópiaia botão de cópia 30 box.add( copyJButton ); box.add( copyJButton ); box.add( copyJButton ); box.add( copyJButton ); // // // // adiciona o botão de cópia à boxadiciona o botão de cópia à boxadiciona o botão de cópia à boxadiciona o botão de cópia à box

31 copyJButton.addActionListener( copyJButton.addActionListener( copyJButton.addActionListener( copyJButton.addActionListener(

32 33 newnewnewnew ActionListener() ActionListener() ActionListener() ActionListener() // // // // classe interna anônimaclasse interna anônimaclasse interna anônimaclasse interna anônima

34 { { { {

35 // // // // configura texto em textArea2 como texto selecionado de textArea1configura texto em textArea2 como texto selecionado de textArea1configura texto em textArea2 como texto selecionado de textArea1configura texto em textArea2 como texto selecionado de textArea1

36 publicpublicpublicpublic voidvoidvoidvoid actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event )

37 { { { {

38 textArea2.setText( textArea1.getSelectedText() );textArea2.setText( textArea1.getSelectedText() );textArea2.setText( textArea1.getSelectedText() );textArea2.setText( textArea1.getSelectedText() );

39 } } } } // // // // fim do método fim do método fim do método fim do método actionPerformedactionPerformedactionPerformedactionPerformed 40 } } } } // // // // fim dafim dafim dafim da classe interna anônimaclasse interna anônimaclasse interna anônimaclasse interna anônima

41 ); ); ); ); // // // // fim da chamada parafim da chamada parafim da chamada parafim da chamada para addActionListener addActionListener addActionListener addActionListener 42 43 textArea2 = textArea2 = textArea2 = textArea2 = newnewnewnew JTextArea( JTextArea( JTextArea( JTextArea( 10101010, , , , 15151515 ); ); ); ); // cr// cr// cr// cria segunda ia segunda ia segunda ia segunda textareatextareatextareatextarea 44 textArea2.textArea2.textArea2.textArea2.setEditable( setEditable( setEditable( setEditable( falsefalsefalsefalse ); ); ); ); // // // // desativa a ediçãodesativa a ediçãodesativa a ediçãodesativa a edição

45 box.add( box.add( box.add( box.add( newnewnewnew JScrollPane( textArea2 ) ); JScrollPane( textArea2 ) ); JScrollPane( textArea2 ) ); JScrollPane( textArea2 ) ); // ad// ad// ad// adicionaicionaicionaiciona scrollpane scrollpane scrollpane scrollpane 46 47 add( box ); add( box ); add( box ); add( box ); // ad// ad// ad// adiciona iciona iciona iciona box box box box ao frameao frameao frameao frame 48 } } } } // // // // fim do construtorfim do construtorfim do construtorfim do construtor TextAreaFrame TextAreaFrame TextAreaFrame TextAreaFrame 49 } } } } // // // // fim da classe fim da classe fim da classe fim da classe TextAreaFrTextAreaFrTextAreaFrTextAreaFrameameameame

Adiciona o botão à caixa

Copia o texto selecionado de uma área de texto para outra, através do usocombinado de dois métodos

Cria uma segunda área de texto e a adiciona à caixa, também através de um componente de scroll.

Indica que o texto não será editável.

Um componente JTextArea não muda de linha automaticamente. Se isso for necessário deverá ser indicado pelo próprio usuário.

Page 86: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

86

171

2005 by Pearson Education do Brasil

Resumo

TextAreaDemoTextAreaDemoTextAreaDemoTextAreaDemo.java.java.java.java

(1 de 2)

1 // Fig. 11.48: TextAreaDemo.java// Fig. 11.48: TextAreaDemo.java// Fig. 11.48: TextAreaDemo.java// Fig. 11.48: TextAreaDemo.java 2 // Cop// Cop// Cop// Copiiiiandoandoandoando texto texto texto texto selecselecselecselecionado ionado ionado ionado de umade umade umade uma textarea textarea textarea textarea ppppara aara aara aara a outra outra outra outra. . . . 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame;

4 5 publicpublicpublicpublic classclassclassclass TextAreaDemo TextAreaDemo TextAreaDemo TextAreaDemo

6 {{{{

7 publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] )

8 { { { {

9 TextAreaFrame textAr TextAreaFrame textAr TextAreaFrame textAr TextAreaFrame textAreaFrame = eaFrame = eaFrame = eaFrame = newnewnewnew TextAreaFrame(); TextAreaFrame(); TextAreaFrame(); TextAreaFrame();

10 textAreaFrame.setDefaultCloseOperation( textAreaFrame.setDefaultCloseOperation( textAreaFrame.setDefaultCloseOperation( textAreaFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); );

11 textAreaFrame.setSize( textAreaFrame.setSize( textAreaFrame.setSize( textAreaFrame.setSize( 425425425425, , , , 200200200200 ); ); ); ); // // // // cccconfigura o tamanho doonfigura o tamanho doonfigura o tamanho doonfigura o tamanho do frame frame frame frame 12 textAreaFrame.setVisible( textAreaFrame.setVisible( textAreaFrame.setVisible( textAreaFrame.setVisible( truetruetruetrue ); ); ); ); // // // // eeeexibe o xibe o xibe o xibe o frameframeframeframe 13 } } } } // // // // ffffim de im de im de im de mainmainmainmain 14 } } } } // // // // ffffim da im da im da im da classclassclassclasseeee TextAreaDemo TextAreaDemo TextAreaDemo TextAreaDemo

172

2005 by Pearson Education do Brasil

Resumo

TextAreaDemoTextAreaDemoTextAreaDemoTextAreaDemo.java.java.java.java

(2 de 2)

Page 87: Mariateixeira-livro Java-Como Programar.deitel.capítulo 11.Slides

87

173

2005 by Pearson Education do Brasil

• JScrollPane tem diretivas de barra de rolagem:– Diretivas horizontais:

• Sempre (HORIZONTAL_SCROLLBAR_ALWAYS).

• Conforme necessário (HORIZONTAL_SCROLLBAR_AS_NEEDED).

• Nunca (HORIZONTAL_SCROLLBAR_NEVER).

– Diretivas verticais:• Sempre (VERTICAL_SCROLLBAR_ALWAYS).

• Conforme necessário (VERTICAL_SCROLLBAR_AS_NEEDED).

• Nunca (VERTICAL_SCROLLBAR_NEVER).

– Os métodos necessários para alterar as diretivas de barra de rolagem são: setHorizontalScrollBarPolicysetHorizontalScrollBarPolicysetHorizontalScrollBarPolicysetHorizontalScrollBarPolicy() () () () e setVerticalScrollBarPolicysetVerticalScrollBarPolicysetVerticalScrollBarPolicysetVerticalScrollBarPolicy()()()()