aulajava09 gui
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áficaTRANSCRIPT
05/11/2008
1
Java Avançado
Prof. Jucimar Souza
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
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.
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
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
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
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.
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
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.
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.
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)
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
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.
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.
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
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,
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
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
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
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
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.
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
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
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.