Roteiro
• JOptionPane
• SWING
–Containers: JFrame e Jpanel
– Componentes: JLabel, JTextField, JButton, etc.
• Eventos e Ouvintes
• Gerenciadores de Layout
3.
Interação com oUsuário
• A interação com o usuário é uma parte
fundamental da maioria dos programas.
• Entrada e Saída
– O usuário pode inserir dados no programa
– O programa pode exibir dados ao usuário
4.
Entrada e Saídavia Console
• Usamos para interagir com o usuário
• Saída
– System.out.println(“”);
• Entrada
– Scanner(System.in);
5.
Entrada e Saídagráficas
• Uma alternativa simples e mais “atraente” de
interação é o uso de “janelas de diálogo”
6.
JOptionPane
• Classe emJava que implementa as janelas de
diálogo.
• Pacote
– Javax.swing
• Possui uma série de métodos estáticos, ou
seja, não é preciso instanciar objetos para
utilizar o JoptionPane
Analisando a caixade diálogo
Título da caixa de diálogo
Ícone da caixa de diálogo
Mensagem da caixa de diálogo
10.
Analisando a caixade diálogo
Título da caixa de diálogo
Ícone da caixa de diálogo
Mensagem da caixa de diálogo
Todos esses elementos podem ser alterados!
Método: showMessageDialog
• ShowMessageDiaologé um método
sobrecarregado
– O que isso significa?
– Resposta: Que existem diferentes versão dele
dentro da mesma classe
• Existe uma versão do showMessageDialog que
nos permite alterar cada um desses
parâmetros
Tipos de Mensagem
•O parâmetro messageType define o ícone que
aparecerá na janela, podendo assumir
qualquer um dos seguintes valores:
15.
Ícone
• Ainda épossível trocar o ícone que será
exibido por qualquer outra imagem utilizando
outra versão do showMessageDialog.
16.
Método: showConfirmDialog
• Ométodo anterior serve apenas para exibir
mensagens na tela
• O showConfirmDialog retorna um valor
resultante da interação com usuário
17.
Método: showConfirmDialog
• OshowConfirmDialog disponibiliza botões
padrões para que o usuário possa interagir
– Há um botão para OK, CANCEL, YES e NO
• O método retorna o botão que o usuário
apertou
– Na verdade um código numérico que representa
esse botão
Método: showInputDialog
• Caixade diálogo que permite que o usuário
realize alguma entrada de dados.
– O método retorna uma String representando a
entrada do usuário
24.
Método: showInputDialog
• Exemplode Uso
• O retorno do método corresponde ao valor
digitado pelo usuário, após ele clicar em OK
– null, caso o usuário clique em Cancelar
25.
Método: showInputDialog
• OshowInputDialog é um método
sobrecarregado
• Existem diferentes versões dele, as quais
permitem configurar os elementos da caixa de
diálogo
– Mensagem
– Título
– Ícone
– Valor inicial
26.
Método: showInputDialog
• Existeuma versão dele que permite alterar o
tipo de entrada
– Ao invés de o usuário digitar texto livre, ele
escolhe uma entre algumas opções disponíveis
– O retorno continua sendo uma String!
Método: showOptionDialog
• OshowOptionDialog é uma combinação do
três anteriores, pois
– Ele pode ser usado apenas exibir uma mensagem
– Ele retorna o índice representando o botão que foi
clicado
– Ele permite configurar a lista de botões que será
apresentada
29.
Método: showOptionDialog
• Assinatura
•Esse método não é sobrecarregado
• O método retorna um valor que representa a
opção escolhida pelo usuário
– Caso a lista de opções seja nula, é retornado o
código do botão pressionado
Documentação
• Para maisinformações, acesse a
documentação
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/JOptionPane.html
32.
Interface Gráfica emJava
• Infância da API gráfica em Java
– Abstract Window Toolkit (AWT)
– Pacote: java.awt
– Pacote de ferramentas gráficas em Java
– Execução vinculada ao Sistema Operacional
33.
Interface Gráfica emJava
• SWING
– Consiste pacote de classes que nos fornece os
componentes necessários para elaborar a
interface gráfica das nossas aplicações
– Pacote: java.swing
– Execução independente de plataforma
• 100% escrito em java
34.
Editores Visuais
• ExistemIDEs que fornecem editores visuais do
estilo clique e arraste para montar essas
interfaces gráficas
35.
Editores Visuais
• Emboraseja tentador utilizar esses editores
visuais, eles também tem suas desvantagens
– A automação na geração do código torna o
desenvolvedor refém do editor visual
– Em geral, o jovem programador usa o editor visual
como muleta e deixa de entender como as classes
funcionam
36.
Editores Visuais
• Emboraseja tentador utilizar esses editores
visuais, eles também tem suas desvantagens
– A automação na geração do código torna o
desenvolvedor refém do editor visual
– Em geral, o jovem programador usa o editor visual
como muleta e deixa de entender como as classes
funcionam
• Por isso, vamos aprender a codificar essas
telas usando código, ao invés de editores
visuais
Hierarquia de Classes
•Existem dois grupos principais de classes
• Você consegue identificá-los?
39.
Hierarquia de Classes
•Existem dois grupos principais de classes
• Você consegue identificá-los?
40.
Hierarquia de Classes
•Containers
– É utilizado para conter componentes
• Componentes
– São combinados dentro dos containers para
formar as telas da nossa aplicação
JFrame
• JFrame éuma classe que fornece os recursos
para criar uma Janela
– O que é uma janela?
43.
JFrame
• O queé uma janela?
– Consiste em uma área em branco
– Com os botões de minimizar, maximizar e fechar
– Título
– Espaço para adicionar
componentes
44.
JFrame
• Como criaruma Janela?
– Devemos configurar alguns parâmetros para a
Janela ter alguma identidade
• setSize: configura as dimensões da janela
• setVisible: torna a janela visível
• setDefaultCloseOperation: determina o
que acontecerá quando o botão fechar for
pressionado
45.
JFrame
• Outros elementosque podem ser
configurados
– setTitle – configura o título da janela
– setResibleVisible – determina se a janela pode ser redimencionada
– setLocationRelativeTo – determina o ponto de referência para o centro
46.
JFrame
• Na verdade,essa não é a forma “mais” correta
para criarmos nossas telas
– Por quê?
• Resposta: Porque se precisarmos usar essa janela em
outra parte do código, teremos que configurar todos os
parâmetros de novo.
– Qual a forma mais recomendada?
47.
JFrame
• Na verdade,essa não é a forma “mais” correta
para criarmos nossas telas
– Por quê?
• Resposta: Porque se precisarmos usar a mesma janela
em outra parte do código, teremos que configurar
todos os parâmetros de novo.
– Qual a forma mais recomendada?
• Resposta: Utilizar herança. Criamos uma classe que
representará a tela com as características que
desejamos e sempre que precisarmos usá-la
instanciamos essa classe, ao invés de usar JFrame
48.
JFrame
Impede a janela
deser
redimensionada Faz com que a
janela apareça no
centro da janela.
Remove o
configurador de
layout da janela
49.
Gerenciadores de Layout
•O gerenciador de Layout vai decidir
automaticamente onde os componentes
devem ser posicionados na tela em branco
• Ao setar esse atributo para null, “apagamos” o
gerenciador de layout e para adicionar
componentes somos obrigados a dizer onde o
componente deve ser posicionado.
50.
Componentes
• Vamos estudaralguns componentes e
adicioná-los na tela em branco
– JLabel
– JTextField
– JButton
– JMenuBar, JMenu, JMenuItem
– JComboBox
– JFormattedTextField
– JTable
51.
JLabel
• javax.swing.JLabel;
• Consistena classe que representa rótulos de
texto na interface.
• Construtores
– JLabel()
– JLabel(texto)
– JLabel(icone, alinhamento)
– JLabel(texto, icone, alinhamento)
– JLabel(texto, alinhamento)
JLabel – Exemplode Utilização
O método setBounds é um método que
todo componente possui. Os dois
primeiros parâmetros determinam a
posição em que o componente será
renderizado. Os dois últimos representam
as dimensões que o componente terá.
Documentação
• Para maisinformações sobre o JLabel,
consulte a documentação.
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/JLabel.html
56.
JTextField
• javax.swing.JTextField
• Consisteem um campo de texto livre, onde o
usuário pode inserir alguma informação na
forma de uma String
• Construtores
– JTextField()
– JTextField(tamanho)
– JTextField(texto)
– JTextField(texto, tamanho)
JTextField
• É possívelrecuperar o texto digitado na
campo de texto chamando o método getText()
– Esse método retorna uma String, que
corresponde ao texto digitado no campo texto.
59.
Documentação
• Para maisinformações sobre o JTextField,
consulte a documentação.
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/ JTextField.html
JButton
• Para queserve um botão?
– Botões servem para ser clicados
• O que acontecerá quando clicarmos nesse
botão?
65.
JButton
• Para queserve um botão?
– Botões servem para ser clicados
• O que acontecerá quando clicarmos nesse
botão?
– Nada!
66.
Ações
• Para queaconteça algo quando o botão for
clicado é necessário criar uma classe chamada
“ouvinte” que vai ficar prestando atenção no
botão
– Esses ouvintes seguem um padrão de projeto
chamado Observer
– O ouvinte vai “observar” o botão
• Quando ele for clicado, o ouvinte vai perceber
e realizar alguma ação
67.
Listeners
• Nossa classeouvinte do botão deve
obrigatoriamente implementar a interface
ActionListener
68.
Listeners
• Por essarazão, ela será obrigada a
implementar um método chamado
actionPerformed
69.
Listeners
• Esse éo método que será executado sempre
que o botão que ela estiver “observando” for
clicado
70.
Listener
• Agora, precisamos
–(1)criar um objeto do nosso
ouvinte e
– (2) dizer ao botão quem o
está observando
• A partir desse momento,
sempre que o botão for
clicado o método
actionPerformed do nosso
ouvinte será invocado
71.
ActionEvent
• O métodoactionPerformed recebe como
parâmetro um objeto do tipo ActionEvent
• Por meio desse objeto, podemos obter
algumas informações interessantes
relacionadas ao evento
72.
ActionEvent
Objeto que representao evento
que acabou de acontecer (o clique
no botão).
Esse objeto possui atributos que
representam as características
do evento: instante, titulo do
botão, próprio botão, etc.
73.
Eventos e Ouvintes
•Para cada tipo de evento, existe um tipo
específico de ouvinte e atributos específicos
que podem ser solicitados
– Existe um evento que representa o clique do
botão, existe um ouvinte interessado em ouvir
cliques do botão
– Existe um evento que representa o clique de uma
tecla, existe um evento interessado em ouvir
cliques do teclado
– Etc...
74.
Eventos e Ouvintes
•Para cada tipo de evento, existe um tipo
específico de ouvinte e atributos específicos
que podem ser solicitados
Hierarquia dos Eventos Hierarquia dos Ouvintes
75.
“Reagindo” a outrostipos de eventos
• Crie o ouvinte do evento em que você está
interessado.
Esse ouvinte se interessa por
mudança de foco nos
componentes.
76.
“Reagindo” a outrostipos de eventos
• Crie o ouvinte do evento em que você está
interessado.
Quando um componente de texto
ganhar ou perder o foco, esses
métodos serão invocados.
77.
“Reagindo” a outrostipos de eventos
• Crie o ouvinte do evento em que você está
interessado.
Esses objetos representam a
mudança de foco.
78.
“Reagindo” a outrostipos de eventos
• Crie o ouvinte do evento em que você está
interessado.
Quando o campo de texto recebe
o foco, ele muda seu conteúdo
atual.
79.
“Reagindo” a outrostipos de eventos
• Crie o ouvinte do evento em que você está
interessado.
Quando o campo de texto perde o
foco, ele muda seu estilo
dependendo do conteúdo que
estiver digitado nele.
80.
“Reagindo” a outrostipos de eventos.
Conectando o ouvinte ao objeto que ele “prestará
atenção”.
81.
Documentação
• Para maisinformações sobre os ouvintes e
eventos existentes, consulte a documentação
– https://docs.oracle.com/javase/7/docs/api/java/u
til/EventListener.html
JMenuBar, JMenu, JMenuItem
•Esses itens devem ser combinados a fim de
formar a barra de menus
• Os elementos dos botões funcionam como
botões, para atribuir uma ação a eles é
necessário criar e cadastrar um ouvinte que
representa a ação da opção do Menu
Exemplo de Utilização
Criaa barra de menu.
Cria o menu “Novo”
Cria as opções Nova
Tarefa e Novo Evento
no menu “Novo”
88.
JMenuItem + Listeners
•As opções do menu funcionam como botões
• Para fazer com que as opções realizem ações
deve-se adicionar ouvintes para as opções do
menu.
JMenuItem + Listeners
•É possível fazer com que comportamentos
diferentes sejam executados para o cada
opção do menu que for clicada.
• Como fazer isso?
91.
JMenuItem + Listeners
•É possível fazer com que comportamentos
diferentes sejam executados para cada opção
do menu que for clicada.
• Como fazer isso?
– Resposta: Uma solução é criar dois ouvintes
diferentes, uma para cada opção do menu.
92.
JMenuItem + Listeners
•É possível fazer com que comportamentos
diferentes sejam executados para cada opção
do menu que for clicada.
• Como fazer isso?
– Resposta 1: Uma solução é criar dois ouvintes
diferentes, uma para cada opção do menu.
– Resposta 2: Outra solução é dependendo do menu
clicado executar uma ação diferente.
Exemplo 2
Usamos oobjeto que representa o evento para
decidir qual ação realizar.
95.
Documentação
• Para maisinformações, consulte a documentação
– JMenuBar:
https://docs.oracle.com/javase/6/docs/api/javax/swin
g/JMenuBar.html
– JMenu:
https://docs.oracle.com/javase/6/docs/api/javax/swin
g/JMenu.html
– JMenuItem:
– https://docs.oracle.com/javase/6/docs/api/javax/swin
g/JMenuItem.html
96.
JFormattedTextField
• O JFormattedTextField(campo formatado para
texto) é um tipo especial de campo de texto
• A formatação do campo texto é definida por
um objeto do tipo MaskFormater
Exemplo
O construtor daclasse
MaskFormatter recebe
como parâmetro a
máscara que será
utilizada no campo
Se essa máscara for inválida, é lançada
uma ParserException, logo, é necessário
tratar a exceção colocando esse construtor
em um bloco de try... catch
99.
MaskFormater
• Esse objetoexige a definição da máscara caractere por
caractere (não é possível usar expressão regular).
– Código para números #
– Código para letras em caixa baixa L
– Código para letras em caixa alta U
– Código para qualquer tipo de letra ?
– Qualquer letra ou número A
– Código para qualquer tipo de caractere *
• No máximo, é possível configurar caracteres válidos e
inválidos
– setInvalidCharacters
– setValidCharacters
100.
MaskFormater
• Para maisinformações, consulte a
documentação
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/text/MaskFormatter.html
101.
Documentação
• Para maisinformações, consulte a
documentação
– https://docs.oracle.com/javase/7/docs/api/javax/
swing/JFormattedTextField.html
102.
JTextArea
• Corresponde auma área de texto com múltiplas
linhas
– Da mesma forma que o JTextField, o JTextArea possui
um método getText para recuperar o valor digitado
• Construtores
– TextArea()
– TextArea(linhas, colunas)
– TextArea(texto)
– TextArea(texto, linhas, colunas)
103.
Exemplo de Uso
Esseo método
determina que as linhas
serão puladas
automaticamente.
Esse método determina
que se uma palavra não
couber na linha, ela será
colocada na próxima linha.
104.
Documentação
• Para maisinformações, acesse a
documentação
– http://docs.oracle.com/javase/7/docs/api/java/a
wt/TextArea.html
105.
JPasswordField
• É umcampo de texto que oculta a informação
que está sendo digitada
– Ideal para ser utilizado em uma janela de login e
senha, por exemplo.
• Construtores
– JPasswordField()
– JPasswordField(tamanho)
– JPasswordField(texto, tamanho)
JPasswordField
• Embora oJPasswordField possua um método getText
para recuperar o valor digitado no campo de texto,
recomenda-se o uso do método getPassword para
tanto
– Esse método retorna uma array de char, que deve ser
transformado em String
108.
Documentação
• Para maisinformações, consulte a
documentação
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/JPasswordField.html
109.
JComboBox
• Apresenta umalista de elementos, entre os
quais o usuário pode escolher uma opção
• O JComboBox grava o índice da opção
escolhida pelo usuário.
• Construtores
– JComboBox()
– JComboBox<T>(T[] items)
– JComboBox(ComboBoxModel model)
JComboBox
• Para recuperaro índice da opção escolhida,
usa-se o método getSelectedIndex
• Para recuperar o item escolhido usa-se o
método getSelectedItem
– O retorno do método getSelectedItem é um
Object, por isso é necessário fazer o casting
112.
JComboBox
• E seeu precisar criar uma lista de pessoas? De
datas? De telefones? De tarefas? De objetos?
JComboBox
• O JComboBoximprime na tela o resultado da
chamada do método toString
• Ao sobrescrevermos o método para uma
representação mais apurada do objeto, o
resultado será mais satisfatório
Método toString
sobrescrito.
Documentação
• Para maisdetalhes, consulte a documentação
– https://docs.oracle.com/javase/6/docs/api/javax/
swing/JComboBox.html
117.
JCheckBox
• É umcomponente que pode ser marcado ou
desmarcado e que apresenta seu estado para
o usuário
• Construtores
– JCheckBox(Icon icon)
– JCheckBox(String text)
– JCheckBox(String text, boolean selected)
– JCheckBox(String text, Icon icon)
– JCheckBox(String text, Icon icon, boolean selected)
JCheckBox
• O checkboxpossui o
método isSelected que
retorna true se o
componente está
“marcado” ou false se
não está marcado.
• Na prática, o JCheckBox é
um tipo “especial” de
botão
– É possível definir ações que
acontecerão quando ele
mudar de estado, como
em um botão.
120.
Documentação
• Para maisinformações, consulte a
documentação
– https://docs.oracle.com/javase/7/docs/api/javax/
swing/JCheckBox.html
121.
JRadioButton
• Outro tipoespecial de botão, muito parecido
com o checkbox, é o radio button
• Conceitualmente, um radio button deve fazer
parte de um grupo
– Dentro desse grupo, apenas um radio button pode
estar selecionado
• Construtores
– Possui os mesmos construtores do JCheckBox
Documentação
• Para maisinformações, consulte a
documentação
– https://docs.oracle.com/javase/7/docs/api/javax/
swing/JRadioButton.html
124.
JTable
• JTable éa classe que vai representar as nossas
tabelas
• Para poder criar uma tabela, entretanto,
precisaremos da “ajuda” de outra classe:
DefaultTableModel
125.
DefaultTableModel
• DefaultTableModel éa classe que
representará o modelo de dados da tabela
• i.e., Definirá as características da tabela
– Quantas colunas a tabela terá?
126.
DefaultTableModel
• DefaultTableModel éa classe que
representará o modelo de dados da tabela
• i.e., Definirá as características da tabela
– Quantas colunas a tabela terá?
– Qual o nome de cada coluna?
127.
DefaultTableModel
• DefaultTableModel éa classe que
representará o modelo de dados da tabela
• i.e., Definirá as características da tabela
– Quantas colunas a tabela terá?
– Qual o nome de cada coluna?
– Quais os elementos de cada linha?
128.
DefaultTableModel
• Se DefaultTableModelfaz tudo isso, para que
serve a JTable?
– Resposta: a tabela serve para renderizar o modelo
de dados.
• O modelo de dados vai descrever tudo que a
JTable deve renderizar
• A JTable vai: (1) receber o modelo de dados,
(2) ser inserida na janela.
– Só!
Tabela – Exemplode Uso
• Vamos criar a Janela que exibirá a tabela
131.
Tabela – Exemplode Uso
• 1º Passo – Fazer o modelo descrever a tabela
132.
Tabela – Exemplode Uso
• 1º Passo – Fazer o modelo descrever a tabela
Descrevi as colunas que minha
tabela terá!
133.
Tabela – Exemplode Uso
• 2º Passo – Adicionar as linhas da tabela em
um modelo.
– Cada elemento do array pessoas corresponderá a uma
linha da tabela
– Para adicionar uma linha chamamos o método addRow
– O método addRow recebe um array de Object
• Cada elemento desse array será um valor da célula daquela linha
134.
Tabela – Exemplode Uso
• 2º Passo – Adicionar as linhas da tabela em
um modelo.
135.
Tabela – Exemplode Uso
• 2º Passo – Adicionar as linhas da tabela em
um modelo. Cada elemento do array
pessoas corresponderá a uma
linha da tabela
Para adicionar uma linha
chamamos o método addRow
O método addRow recebe um
array de Object
Cada elemento desse array
será um valor da célula
daquela linha
136.
Tabela – Exemplode Uso
• 3º Passo – adiciona-se a tabela na Janela
Resultado - Tabela
Notemque a tabela apareceu sem o
nome das colunas.
Como fazer com que o nome das
colunas apareçam?
139.
Tabela – Exemplode Uso
• 4º Passo – Cria-se um JScrollPane (um tipo de conteiner) e adiciona-se a
tabela dentro deste objeto.
• 5º Passo – Adiciona-se o JScrollPane na janela ao invés da tabela.
Documentação
• Para sabermais, acesse a documentação das
classes
– DefaultTableModel
• http://docs.oracle.com/javase/7/docs/api/javax/swing/table
/DefaultTableModel.html
– JTable
• http://docs.oracle.com/javase/7/docs/api/javax/swing/JTabl
e.html
– JScrollPane
• http://docs.oracle.com/javase/7/docs/api/javax/swing/JScro
llPane.html
142.
Gerenciadores de Layout
•São objetos que podem ficar responsáveis pelo
posicionamento dos elementos dentro do
contêiner.
• Cada contêiner pode ser gerenciado por um
único gerenciador
• Principais gerenciadores de layout
– BorderLayout
– GridLayout
– FlowLayout
– BoxLayout
143.
Gerenciadores de Layout
•São objetos que podem ficar responsáveis
pelo posicionamento dos elementos nas telas.
• Principais gerenciadores de layout
– BorderLayout
– GridLayout
– FlowLayout
– BoxLayout
Nesses dois gerenciadores, o componente
é dimensionado para ocupar todo o
espaço destinado a ele
Nesses dois gerenciadores, o componente
ocupa o espaço que ele “deseja” ocupar,
i.e., seu tamanho preferido.
144.
BorderLayout
• Divide atela em 5 áreas: norte, sul, leste,
oeste e centro.
• Deve-se definir explicitamente a região em
que cada elemento será inserido na tela.
• Cada região pode conter apenas um elemento
• Recomendado para projetos simples
Documentação
• Para maisinformações, consulte a
documentação
– http://docs.oracle.com/javase/7/docs/api/java/a
wt/BorderLayout.html
148.
GridLayout
• O GridLayoutdivide a área da janela em um
formato de tabela
– As dimensões da tabela são determinadas na
instanciação do GridLayout
• Construtores
– GridLayout()
– GridLayout(linhas, colunas)
– GridLayout(linhas, colunas, espaçamento
horizontal, espaçamento vertical)
Documentação
• Para maisinformações, consulte a
documentação
– http://docs.oracle.com/javase/7/docs/api/java/a
wt/GridLayout.html
153.
FlowLayout
• O FlowLayoutfunciona como um editor de
texto
– Ele vai empilhar, a partir do início da janela, os
elementos em uma “linha” e, quando não houver
mais espaço para elementos, ele,
automaticamente, pulará uma “linha” e passará a
empilhar elementos na próxima “linha”.
154.
FlowLayout
• No construtoré possível definir o alinhamento
que os elementos terão.
– Construtores
• FlowLayout()
• FlowLayout(alinhamento)
– FlowLayout.LEFT
– FlowLayout.CENTER
– FlowLayout.RIGHT
Documentação
• Para maisinformações, consulte a
documentação
– http://docs.oracle.com/javase/7/docs/api/java/a
wt/FlowLayout.html
158.
BoxLayout
• O BoxLayouté similar ao FlowLayout, a
diferença é que ele não “pula”
automaticamente para a próxima linha
quando não cabem mais elementos na janela
• Além disso, é possível definir se o fluxo de
inserção será horizontal ou vertical.
– Construtor
• BoxLayout(conteiner, eixo)
Gerenciadores de Layout
•Esses gerenciadores de layout são
relativamente simples e limitados
• Parece impossível criar uma interface gráfica
mais elaborada utilizando qualquer um deles
162.
Gerenciadores de Layout
•Como criar interfaces gráficas elaboradas
fazendo uso desses gerenciadores de layout
mais simples?
– Resposta: Combinando eles!
– Como se um container só pode ser gerenciado por
um gerenciador?
163.
Gerenciadores de Layout
•Como criar interfaces gráficas elaboradas
fazendo uso desses gerenciadores de layout
mais simples?
– Resposta: Combinando eles!
– Como se um container só pode ser gerenciado por
um gerenciador?
• Resposta: Combinando diversos containers com
diferentes gerenciadores de layout!
164.
Painéis
• Para isso,precisaremos trabalhar com painéis!
• Um painel é um container, assim como a janela,
entretanto ele não possui os recursos que uma
janela possui (botões pré-definidos, área para
barra de menus, etc.)
– Ele pode ser entendido como um quadro em branco
• Como containers também são componentes um
container (janela) pode conter outros containers
(painéis)
165.
JPanel
• JPanel éa classe que representa um painel
• Para interfaces elaboradas, pensamos no seu
design como a combinação de painéis
gerenciados por diferentes gerenciadores de
layout
• Inserimos os componentes nos painéis
• Inserimos os painéis na janela
166.
Exemplo de Combinaçãode Painéis
A Janela é gerenciada pelo BoxLayout – empilhando componentes no eixo Y
Os componentes que serão empilhados verticalmente são todos esses painéis
Combinando Painéis
JPanel painelTopo= new JPanel();
painelTopo.setBackground(Color.RED);
painelTopo.setLayout(new FlowLayout(FlowLayout.CENTER));
painelTopo.add(new JLabel("Cadastro de Cliente"));
this.add(painelTopo);
172.
Combinando Painéis
Esse éum painel que está
sendo gerenciado por um
GridLayout. Nele estão dois
outros painéis, gerenciados
por outros gerenciadores de
layout.
Combinando Painéis
Esse painelse parece bastante
com todos os outros de baixo
(um JLabel seguido por um
JTextField, alinhados a
esquerda). Criando uma classe
para representar esse tipo de
painel, podemos simplificar um
pouco nossa lógica.
175.
Combinando Painéis
Um labele um
campo de texto
Um painel gerenciado por
um Flowlayout que alinha
os elementos a esquerda
Inserindo os
elementos no painel