23
05/11/2008 1 Java Avançado Prof. Jucimar Souza [email protected] Interface Gráfica Interface Gráfica Objetivos Entender como utilizar as interface gráficas do Java Swing AWT Criação de formulário e inserir componentes visuais nos mesmos Programação de Eventos Gerenciamento básico de Layout Uso do NetBeans com a Interface Gráfica

AulaJava09 GUI

Embed Size (px)

DESCRIPTION

Objetivo da aula: Entender como utilizar as interface gráficas do JavaSwingAWTCriação de formulário e inserir componentes visuais nosmesmosProgramação de EventosGerenciamento básico de LayoutUso do NetBeans com a Interface Gráfica

Citation preview

Page 1: AulaJava09 GUI

05/11/2008

1

Java Avançado

Prof. Jucimar Souza

[email protected]

Interface GráficaInterface Gráfica

Objetivos

� Entender como utilizar as interface gráficas do Java� Swing� AWT

� Criação de formulário e inserir componentes visuais nos mesmos

� Programação de Eventos� Gerenciamento básico de Layout� Uso do NetBeans com a Interface Gráfica

Page 2: AulaJava09 GUI

05/11/2008

2

01 – Interfaces Gráficas no Java

� Atualmente Java suporta duas bibliotecas gráficas GUI – Graphical Unit Interface� AWT (Abstract Window Toolkit)

� Precursor do Swing� Declarado no pacote java.awt

� Swing� Componentes feitos em Java� São chamados de componentes leves� Usam os eventos da AWT

� São bibliotecas oficiais inclusas na JRE e/ou JDK� Existem bibliotecas desenvolvidas por terceiros como a SWT desenvolvida pela IBM

02 - Portabilidade

� As APIs de interface gráfica favorecem a portabilidade

� O look-and-feel do Swing é único em todas as plataformas onde roda. A interface a mesma em qualquer sistema operacional.

� Com Swing, não importa qual sistema operacional, qual resolução de tela, ou qual profundidade de cores: sua aplicação se comportará da mesma forma em todos os ambientes.

Page 3: AulaJava09 GUI

05/11/2008

3

03 – Começando com a Biblioteca Swing

� A classe JOptionPane contém caixa de diálogos de entrada e mensagens. São elas:� showInputDialog(“Mensagem”) que é um método estático que retorna uma string.

� Ex:� String resp=JOptionPane.showInputDialog(“Nome “);

� showMessageDialog(classePai, Mensagem,Titulo,Icone);

� Ex:� JOptionPane.showMessageDialog(null,”O nome digitado foi “+resp,”Mostra Nome”, JOptionPane.PLAN_MESSAGE)

03 – Começando com a Biblioteca Swing (cont)

Javadoc da classe JOptionPane referente aos métodos showInputDialog

Page 4: AulaJava09 GUI

05/11/2008

4

03 – Começando com a Biblioteca Swing (cont)

Campo de texto em que

o usuário digita um

valor

Prompt para o

usuário

Quando o usuário

clica em OK,

showInputDialogshowInputDialogshowInputDialogshowInputDialogretorna ao programa o

nome digitado pelo

usuário como uma

StringStringStringString.

barra de

título

Quando o usuário clique em

OK, o diálogo de

mensagem é fechado (é

removido da tela)

03 – Começando com a Biblioteca Swing (cont)

Javadoc da classe JOptionPane referente aos métodos showMessageDialog

Page 5: AulaJava09 GUI

05/11/2008

5

03 – Começando com a Biblioteca Swing (cont)

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. �ormalmente, esse diálogo exige uma

resposta, como clicar em um botão YesYesYesYes ou NoNoNoNo. PLAIN_MESSAGEPLAIN_MESSAGEPLAIN_MESSAGEPLAIN_MESSAGE

�enhum ícone

Um diálogo que contém uma mensagem, mas

nenhum ícone..

Constantes JOptionPane static para diálogos de mensagem.

04 – Criando um formulário

� Para criar uma formulário podemos fazer conforme o código abaixo:� JFrame meuForm = new JFrame(“ titulo do formulario”);

� O método setSize(largura,altura) indica o tamanho do formulário.

� O método setVisible(true) indica que o formulario ficará visivel para o usuário

� O método setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) fecha o formulário quando o usuário

clica para fechar o formulário.

� Vejamos o programa ExForm1.java

Page 6: AulaJava09 GUI

05/11/2008

6

04 – Criando um formulario com Herança

� Você pode criar um classe que é um formalário através de herança conforme codigo do programa ExFormHer01.java.

05 – Uma visão geral dos componentes Swing

� Componentes Swing GUI:� Declarado no pacote javax.swingjavax.swingjavax.swingjavax.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 7: AulaJava09 GUI

05/11/2008

7

05 – Uma visão geral dos componentes Swing

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.

06 – Adicionando componentes no formulário

� Declarando e instanciando uma etiqueta (JLabel)� JLabel meuLabel = new JLabel(“texto do Label”);

� Declarando e instanciando um Campo de Texto (JTextField) de tamanho 20.� JTextField meuJText = new JTextField(20);

� Declarando e instanciando um botão (JButton)� JButton meuBtn = new JButton(“Texto do Botao”);

� Um formulario precisa de um organizador de layout. Vamos usar o método setLayout para defini-lo� meuForm.setLayout(new FlowLayout());

� Vejamos o código ExForm02.java

Page 8: AulaJava09 GUI

05/11/2008

8

07 – Para criar uma GUI é simples

1. Crie uma moldura (um objeto JFrame)� JFrame meuFrame = new JFrame();

2. Crie os elementos gráficos (botão, campo de texto, etc )

3. Configure o Layout do Formulario� setLayout( padrão do Layout);

4. Adicione os elementos na moldura� meuForme.add(botao1);

5. Exiba o Form (forneça o tamanho e torne-o visível)

� meuForm.setSize(larg,alt);� meuForm.setVisible(true);

08 – Superclasses dos componetes leves GUI

� Classe ComponentComponentComponentComponent (pacote javajavajavajava.awtawtawtawt):� Subclasse de ObjectObjectObjectObject.

� Declara muitos comportamentos e atributos comuns a componentes GUI.

� Classe ContainerContainerContainerContainer (pacote javajavajavajava.awtawtawtawt):� Subclasse de ComponentComponentComponentComponent.

� Organiza ComponentComponentComponentComponents.

� Classe JComponentJComponentJComponentJComponent (pacote javax.swingjavax.swingjavax.swingjavax.swing):� Subclasse de ContainerContainerContainerContainer.

� Superclasse de todos os componentes Swing leves.

Page 9: AulaJava09 GUI

05/11/2008

9

08 – Superclasses dos componetes leves GUI

09 – Controle de Eventos

� GUIs são baseadas em evento:� Uma interação com o usuário cria um evento.

� 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 chama (invoca) um tratador de evento.

Page 10: AulaJava09 GUI

05/11/2008

10

10 – Configurando um botão

� Para configurar um botão precisamos:1. Um método a ser chamado quando o usuário

clicar no botão2. Uma maneira de saber quando acionar esse

método.

� Vamos alterar o programa anterior para ao clicar mostrar uma janela com um JOptionPane para mostrar o conteúdo do JTextField.

10 – Configurando um botão (cont)

� Para capturar um evento de um botão (ActionEvent)

1. Implemente a interface ActionListener2. Registre o botão (isto indica que você

quer escutar o evento do botão)3. Defina o método de manipulação dos

eventos (implemente o método actionPerformed() da interface ActionListener)

Page 11: AulaJava09 GUI

05/11/2008

11

10 – Configurando um botão (cont)

import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.JButton;import javax.swing.JOptionPane;import java.awt.FlowLayout;import java.awt.event.*;

class Formulario extends JFrame implements ActionListener{

private JTextField txtFldNome;private JLabel lblNome;private JButton btnExibir;

Neste pacote estão localizadas as

interfaces de tratamento de eventos

ActionListener e ActionEvent

A implementação da interface

indica que a classe Formulario

fornecerá métodos para tratar

eventos do botão

10 – Configurando um botão (cont)

Formulario() {super("Meu primeiro formulario em Java");

lblNome = new JLabel("Nome: ");txtFldNome = new JTextField(20);btnExibir = new JButton("Exibir ");

btnExibir.addActionListener(this);

// Adiciona os objetos no FormuláriosetLayout(new FlowLayout());add(lblNome);add(txtFldNome);add(btnExibir);

//setSize(400,200);pack();setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

Registra que este botão fara parte

dos ouvinte da inteface

ActionListener

Page 12: AulaJava09 GUI

05/11/2008

12

10 – Configurando um botão (cont)

public void actionPerformed(ActionEvent evento){

JOptionPane.showMessageDialog(this,"O nome digitado foi"+txtFldNome.getText());}

}

public class ExForm2Button {

public static void main(String args[]){Formulario meuForm = new Formulario();

}}

� Execute o programa ExForm2Button.java

Este deve ser implementado para

tratar os evcntos da action listener

11 – Um pouco mais de Eventos

� JTextFieldJTextFieldJTextFieldJTextField e JPasswordFieldJPasswordFieldJPasswordFieldJPasswordField:

� Pressionar Enter dentro de um desses campos causa um ActionEventActionEventActionEventActionEvent.

� Processado pelos objetos que implementam a interface ActionListenerActionListenerActionListenerActionListener.

� O método actionPerformed é acionado todo vez que O método actionPerformed é acionado todo vez que O método actionPerformed é acionado todo vez que O método actionPerformed é acionado todo vez que um ActionEvent acontece.um ActionEvent acontece.um ActionEvent acontece.um ActionEvent acontece.

� A fonte do evento pode ser determinada pelo método A fonte do evento pode ser determinada pelo método A fonte do evento pode ser determinada pelo método A fonte do evento pode ser determinada pelo método

getSourcegetSourcegetSourcegetSource

� O texto em um JTextFieldJTextFieldJTextFieldJTextField pode ser adquirido utilizando getActionCommandgetActionCommandgetActionCommandgetActionCommand

� O texto em um JPasswordFieldJPasswordFieldJPasswordFieldJPasswordField pode ser adquirido utilizando getPasswordgetPasswordgetPasswordgetPassword.

Page 13: AulaJava09 GUI

05/11/2008

13

12 – Tratantando eventos de vários objetos

� Quando existe varios objetos que geram o mesmo tipo de evento você pode usar o método para verificar isto.

� Um exemplo disto pode ser visto no programa : TextFieldFrame.java e TestaTextFieldFrame.java

� Vamos analisar o código

13 –Gerenciador de Layout

� É um objeto que está associado a um componente de plano de fundo (container)

� Controla os componentes que se encontram dentro dele.

� Objetos da classe JFrame e JPanel são conteiner. E os componentes são adicionados nestes objetos através do método add.

� Pode existir painéis dentro de painéis.

Page 14: AulaJava09 GUI

05/11/2008

14

13.1 – Gerenciador BorderLayout

� Divide um componente de plano de fundo em cinco regiões.

� Só permite adicionar um componente por região e um plano de fundo controlado por um gerenciador de BorderLayout.

� BorderLayout é o gerenciador de layout padrão para uma moldura (JFrame)

� Veja o exemplo JFrameLayoutUm.java e TestaLayoutUm.java

13.2 – Gerenciador FlowLayout

� Cada componente recebe o tamanho que deseja, e eles são disposto da esquerda para direita e conforme preenche a largura do conteiner os objetos são colocados na linha de baixo.

� O FlowLayout é o layout padrão para um panel.

� Veja o exemplo do programa JFrameLayoutDois.java e TestaLayoutDois.java

Page 15: AulaJava09 GUI

05/11/2008

15

13.3 – Gerenciador GridLayout

� Divide o contêiner em uma grade.� Todos os componentes têm a mesma largura e altura.

� Vejamos os programas JFrameLayoutTres.java e TestaLayoutTres.java

13.4 – Gerenciador BoxLayout

� Organiza componentes GUI horizontalmente ao longo de um eixo x ou verticalmente ao longo do eixo y do contêiner.

� Veja o exemplo JFrameLayoutQuatro.java e TestaLayoutQuatro.java

� Você pode fazer combinações veja os exemplos JFrameLayoutMix.java,

Page 16: AulaJava09 GUI

05/11/2008

16

Exercicio com Layout

� Faça uma classe que tenha a interface conforme a figura abaixo:

� Obs: Não precisa implementar os botões

14 – Botões que mantem estado

� Botões de estado:� O Swing contém três tipos de botões de estado:

� JToggleButtonJToggleButtonJToggleButtonJToggleButton, JCheckBoxJCheckBoxJCheckBoxJCheckBox e JRadioButtonJRadioButtonJRadioButtonJRadioButton.

� JCheckBoxJCheckBoxJCheckBoxJCheckBox e JRadioButtonJRadioButtonJRadioButtonJRadioButton são subclasses de JToggleButtonJToggleButtonJToggleButtonJToggleButton

Page 17: AulaJava09 GUI

05/11/2008

17

14.1 - JCheckBox

� JCheckBoxJCheckBoxJCheckBoxJCheckBox:

� Contém um rótulo de caixa de seleção que aparece à direita da caixa de seleção por padrão.

� Gera um ItemEventItemEventItemEventItemEvent quando é clicado.� ItemEventItemEventItemEventItemEvents são tratados por um ItemListenerItemListenerItemListenerItemListener.

� Passado para o método itemStateChangeditemStateChangeditemStateChangeditemStateChanged.

� O método isSelectedisSelectedisSelectedisSelected retorna se uma caixa de seleção está selecionada (truetruetruetrue) ou não (falsefalsefalsefalse).

14.2 - JRadioButton

� JRadioButtonJRadioButtonJRadioButtonJRadioButton::::� 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 ButtonGroupButtonGroupButtonGroupButtonGroup.� Declara o método addaddaddadd para adicionar um JRadioButtonJRadioButtonJRadioButtonJRadioButtonao grupo.

� Normalmente, representa opções mutuamente exclusivas.

� Verificar exemplo TestaCheckRadio.java

Page 18: AulaJava09 GUI

05/11/2008

18

15- JComboBox

� Caixa de combinação:� Às vezes, também chamada lista drop-down.� Implementada pela classe JComboBoxJComboBoxJComboBoxJComboBox.

� Cada item na lista tem um índice.� setMaximumRowCountsetMaximumRowCountsetMaximumRowCountsetMaximumRowCount configura o número máximo de linhas mostradas de cada vez.

� JComboBoxJComboBoxJComboBoxJComboBox fornece uma barra de rolagem e setas para cima e para baixo para percorrer a lista.

16 – Usando uma classe interna anônima

� Classe interna anônima:� Forma especial de classe interna.� Declarada sem nome.� Em geral, aparece dentro de uma chamada de método.

� Tem acesso limitado a variáveis locais.

� Vejamos o exemplo TestaCombo.java

Page 19: AulaJava09 GUI

05/11/2008

19

17 - JList

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

� Implementada pela classe JlistJlistJlistJlist.

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

� Um ListSelectionEventListSelectionEventListSelectionEventListSelectionEvent ocorre quando um item é selecionado.

� Tratado por um ListSelectionListenerListSelectionListenerListSelectionListenerListSelectionListener e passado para o método valueChangedvalueChangedvalueChangedvalueChanged.

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

Page 20: AulaJava09 GUI

05/11/2008

20

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 ScrollPanee a adiciona à aplicação

Cria JList

Obtém o índice do item selecionado

18 – JList com multipla seleção

� Lista de seleção múltipla:� Permite que usuários selecionem vários itens.

� Seleção de um único intervalo que permite apenas um intervalo contínuo de itens.

� Seleção de múltiplos intervalos que permite que qualquer conjunto de elementos seja selecionado.

Page 21: AulaJava09 GUI

05/11/2008

21

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

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 setListDatae getSelectedValues para

copiar valores de uma JList para

outra

Page 22: AulaJava09 GUI

05/11/2008

22

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

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 23: AulaJava09 GUI

05/11/2008

23

Exercício

� Faça um formulário para entrada de dados conforme a classe ContaCorrentedesenvolvida na aula de Arquivos.

� Coloque botões para:� Incluir um contato no array (cuidado com o limite do array)

� Salvar os dados no arquivo (pode ser serialização)

� Recuperar dados armazenados no arquivo.