SWING
Cleyton Caetano de Souza
IFPB – Campus Monteiro
cleyton.caetano.souza@gmail.com
Roteiro
• JOptionPane
• SWING
– Containers: JFrame e Jpanel
– Componentes: JLabel, JTextField, JButton, etc.
• Eventos e Ouvintes
• Gerenciadores de Layout
Interação com o Usuá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
Entrada e Saída via Console
• Usamos para interagir com o usuário
• Saída
– System.out.println(“”);
• Entrada
– Scanner(System.in);
Entrada e Saída gráficas
• Uma alternativa simples e mais “atraente” de
interação é o uso de “janelas de diálogo”
JOptionPane
• Classe em Java 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
Métodos
Método: showMessageDialog
• Função:
– Exibir mensagens de texto
• Exemplo
• Resultado
Analisando a caixa de diálogo
Título da caixa de diálogo
Ícone da caixa de diálogo
Mensagem da caixa de diálogo
Analisando a caixa de 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?
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
Método: showMessageDialog
• Assinatura
• Exemplo de uso
• Resultado
Tipos de Mensagem
• O parâmetro messageType define o ícone que
aparecerá na janela, podendo assumir
qualquer um dos seguintes valores:
Ícone
• Ainda é possível trocar o ícone que será
exibido por qualquer outra imagem utilizando
outra versão do showMessageDialog.
Método: showConfirmDialog
• O método anterior serve apenas para exibir
mensagens na tela
• O showConfirmDialog retorna um valor
resultante da interação com usuário
Método: showConfirmDialog
• O showConfirmDialog 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: showConfirmDialog
• Exemplo de uso
Método: showConfirmDialog
• Todos os elementos destacados podem ser
configurados, utilizando as versões
sobrecarregadas do método
Método: showConfirmDialog
Mensagem
Título
Opções de Botões
Ícone
OptionType
• Possíveis valores para o parâmetro
OptionType, que define os botões que
aparecerão no confirmDialog
Retornos
• Possíveis retornos do método confirmDialog
– O retorno corresponde ao botão clicado pelo
usuário
Método: showInputDialog
• Caixa de 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
Método: showInputDialog
• Exemplo de 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
Método: showInputDialog
• O showInputDialog é 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
Método: showInputDialog
• Existe uma 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: showInputDialog
• O retorno dessa variação é um objeto do valor
escolhido
Método: showOptionDialog
• O showOptionDialog é 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
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
Método: showOptionDialog
• Exemplo de uso
Documentação
• Para mais informações, acesse a
documentação
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/JOptionPane.html
Interface Gráfica em Java
• 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
Interface Gráfica em Java
• 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
Editores Visuais
• Existem IDEs que fornecem editores visuais do
estilo clique e arraste para montar essas
interfaces gráficas
Editores Visuais
• Embora seja 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
Editores Visuais
• Embora seja 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
*as classes do pacote javax.swing aparecem em azul; elas começam sempre com J
Hierarquia de Classes
• Existem dois grupos principais de classes
• Você consegue identificá-los?
Hierarquia de Classes
• Existem dois grupos principais de classes
• Você consegue identificá-los?
Hierarquia de Classes
• Containers
– É utilizado para conter componentes
• Componentes
– São combinados dentro dos containers para
formar as telas da nossa aplicação
Hierarquia das Classes
Containers Componentes
JFrame
• JFrame é uma classe que fornece os recursos
para criar uma Janela
– O que é uma janela?
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
JFrame
• Como criar uma 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
JFrame
• Outros elementos que 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
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?
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
JFrame
Impede a janela
de ser
redimensionada Faz com que a
janela apareça no
centro da janela.
Remove o
configurador de
layout da janela
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.
Componentes
• Vamos estudar alguns componentes e
adicioná-los na tela em branco
– JLabel
– JTextField
– JButton
– JMenuBar, JMenu, JMenuItem
– JComboBox
– JFormattedTextField
– JTable
JLabel
• javax.swing.JLabel;
• Consiste na classe que representa rótulos de
texto na interface.
• Construtores
– JLabel()
– JLabel(texto)
– JLabel(icone, alinhamento)
– JLabel(texto, icone, alinhamento)
– JLabel(texto, alinhamento)
JLabel – Exemplo de Utilização
JLabel – Exemplo de 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á.
JLabel – Resultado da Execução
Documentação
• Para mais informações sobre o JLabel,
consulte a documentação.
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/JLabel.html
JTextField
• javax.swing.JTextField
• Consiste em 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 – Exemplo de Utilização
JTextField
• É possível recuperar 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.
Documentação
• Para mais informações sobre o JTextField,
consulte a documentação.
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/ JTextField.html
JButton
• javax.swing.Jbutton
• Corresponde a um botão, onde o usuário
pode clicar!
• Construtores
– JButton()
– JButton(icone)
– JButton(texto)
– JButton(icone, texto)
Exemplo de Utilização
Documentação
• Para mais informações sobre o JButton,
consulte a documentação.
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/JButton.html
JButton
• Para que serve um botão?
JButton
• Para que serve um botão?
– Botões servem para ser clicados
• O que acontecerá quando clicarmos nesse
botão?
JButton
• Para que serve um botão?
– Botões servem para ser clicados
• O que acontecerá quando clicarmos nesse
botão?
– Nada!
Ações
• Para que aconteç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
Listeners
• Nossa classe ouvinte do botão deve
obrigatoriamente implementar a interface
ActionListener
Listeners
• Por essa razão, ela será obrigada a
implementar um método chamado
actionPerformed
Listeners
• Esse é o método que será executado sempre
que o botão que ela estiver “observando” for
clicado
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
ActionEvent
• O método actionPerformed recebe como
parâmetro um objeto do tipo ActionEvent
• Por meio desse objeto, podemos obter
algumas informações interessantes
relacionadas ao evento
ActionEvent
Objeto que representa o 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.
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...
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
“Reagindo” a outros tipos de eventos
• Crie o ouvinte do evento em que você está
interessado.
Esse ouvinte se interessa por
mudança de foco nos
componentes.
“Reagindo” a outros tipos 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.
“Reagindo” a outros tipos de eventos
• Crie o ouvinte do evento em que você está
interessado.
Esses objetos representam a
mudança de foco.
“Reagindo” a outros tipos 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.
“Reagindo” a outros tipos 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.
“Reagindo” a outros tipos de eventos.
Conectando o ouvinte ao objeto que ele “prestará
atenção”.
Documentação
• Para mais informaçõ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
• Representa a barra de menus de uma Janela
JMenu
• Representa uma das opções do menu
JMenuItem
• Representa os itens do menu
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
Exemplo de Utilização
Cria a barra de menu.
Cria o menu “Novo”
Cria as opções Nova
Tarefa e Novo Evento
no menu “Novo”
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.
Exemplo de Uso
Adicionando o
mesmo ouvinte
nas duas 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?
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.
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 1
Exemplo 2
Usamos o objeto que representa o evento para
decidir qual ação realizar.
Documentação
• Para mais informaçõ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
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
Exemplo
O construtor da classe
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
MaskFormater
• Esse objeto exige 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
MaskFormater
• Para mais informações, consulte a
documentação
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/text/MaskFormatter.html
Documentação
• Para mais informações, consulte a
documentação
– https://docs.oracle.com/javase/7/docs/api/javax/
swing/JFormattedTextField.html
JTextArea
• Corresponde a uma á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)
Exemplo de Uso
Esse o 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.
Documentação
• Para mais informações, acesse a
documentação
– http://docs.oracle.com/javase/7/docs/api/java/a
wt/TextArea.html
JPasswordField
• É um campo 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)
Exemplo de Uso
JPasswordField
• Embora o JPasswordField 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
Documentação
• Para mais informações, consulte a
documentação
– http://docs.oracle.com/javase/7/docs/api/javax/s
wing/JPasswordField.html
JComboBox
• Apresenta uma lista 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)
Exemplo de Uso – Construtor com Strings
JComboBox
• Para recuperar o í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
JComboBox
• E se eu precisar criar uma lista de pessoas? De
datas? De telefones? De tarefas? De objetos?
Resultado
JComboBox
• O JComboBox imprime 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.
Resultado
Documentação
• Para mais detalhes, consulte a documentação
– https://docs.oracle.com/javase/6/docs/api/javax/
swing/JComboBox.html
JCheckBox
• É um componente 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
JCheckBox
• O checkbox possui 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.
Documentação
• Para mais informações, consulte a
documentação
– https://docs.oracle.com/javase/7/docs/api/javax/
swing/JCheckBox.html
JRadioButton
• Outro tipo especial 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
JRadioButton
Essa operação define
quais botões farão parte
do grupo.
Documentação
• Para mais informações, consulte a
documentação
– https://docs.oracle.com/javase/7/docs/api/javax/
swing/JRadioButton.html
JTable
• JTable é a classe que vai representar as nossas
tabelas
• Para poder criar uma tabela, entretanto,
precisaremos da “ajuda” de outra classe:
DefaultTableModel
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á?
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?
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?
DefaultTableModel
• Se DefaultTableModel faz 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 – Exemplo de Uso
• Tabela de Pessoas
Tabela – Exemplo de Uso
• Vamos criar a Janela que exibirá a tabela
Tabela – Exemplo de Uso
• 1º Passo – Fazer o modelo descrever a tabela
Tabela – Exemplo de Uso
• 1º Passo – Fazer o modelo descrever a tabela
Descrevi as colunas que minha
tabela terá!
Tabela – Exemplo de 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
Tabela – Exemplo de Uso
• 2º Passo – Adicionar as linhas da tabela em
um modelo.
Tabela – Exemplo de 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
Tabela – Exemplo de Uso
• 3º Passo – adiciona-se a tabela na Janela
Resultado - Tabela
Resultado - Tabela
Notem que a tabela apareceu sem o
nome das colunas.
Como fazer com que o nome das
colunas apareçam?
Tabela – Exemplo de 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.
Resultado - Tabela
Documentação
• Para saber mais, 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
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
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.
BorderLayout
• Divide a tela 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
BorderLayout – Exemplo de Uso
BorderLayout – Resultado da Execução
Documentação
• Para mais informações, consulte a
documentação
– http://docs.oracle.com/javase/7/docs/api/java/a
wt/BorderLayout.html
GridLayout
• O GridLayout divide 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)
GridLayout – Exemplo de Uso
GridLayout – Resultado da Execução
GridLayout – Resultado da Execução
3
linhas
2 colunas
} espaçamento vertical
}
espaçamento
horizontal
Documentação
• Para mais informações, consulte a
documentação
– http://docs.oracle.com/javase/7/docs/api/java/a
wt/GridLayout.html
FlowLayout
• O FlowLayout funciona 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”.
FlowLayout
• No construtor é possível definir o alinhamento
que os elementos terão.
– Construtores
• FlowLayout()
• FlowLayout(alinhamento)
– FlowLayout.LEFT
– FlowLayout.CENTER
– FlowLayout.RIGHT
FlowLayout – Exemplo de Uso
FlowLayout – Resultado da Execução
Documentação
• Para mais informações, consulte a
documentação
– http://docs.oracle.com/javase/7/docs/api/java/a
wt/FlowLayout.html
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)
BoxLayout – Exemplo de Uso
BoxLayout – Resultado da Execução
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
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?
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!
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)
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
Exemplo de Combinação de 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
Exemplo de Combinação de Painéis
Como cada painel restante está sendo gerenciado?
Combinando Painéis
O painel desse JFrame
é gerenciado por um
BoxLyout
Combinando Painéis
JPanel painel = (JPanel) this.getContentPane();
BoxLayout gerenciador = new BoxLayout(painel, BoxLayout.Y_AXIS);
painel.setLayout(gerenciador);
Combinando Painéis
Esse é um outro
painel, gerenciado por
um FlowLayout
(centralizado)
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);
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
JPanel painelCodigoEBotao = new JPanel();
painelCodigoEBotao.setLayout(new GridLayout(1, 2));
painelCodigoEBotao.setBackground(Color.BLUE);
this.add(painelCodigoEBotao);
Combinando Painéis
Esse painel se 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.
Combinando Painéis
Um label e um
campo de texto
Um painel gerenciado por
um Flowlayout que alinha
os elementos a esquerda
Inserindo os
elementos no painel
Combinando Painéis
PainelFormulario painelFormularioCodigo = new PainelFormulario("Código", 10);
painelFormularioCodigo.setBackground(Color.CYAN);
painelCodigoEBotao.add(painelFormularioCodigo);
Combinando Painéis
JPanel painelBotaoConsultar = new JPanel();
painelBotaoConsultar.setLayout(new FlowLayout(FlowLayout.RIGHT));
painelBotaoConsultar.add(new JButton("Consultar"));
painelBotaoConsultar.setBackground(Color.GREEN);
painelCodigoEBotao.add(painelBotaoConsultar);
Combinando Painéis
Todos esses painéis são “Painéis
de Formulário”, a classe que
acabamos de criar.
Combinando Painéis
PainelFormulario painelNome = new
PainelFormulario("Nome", 20);
painelNome.setBackground(Color.YELLOW);
this.add(painelNome);
PainelFormulario painelEstado = new
PainelFormulario("Estado", 20);
painelEstado.setBackground(Color.GRAY);
this.add(painelEstado);
PainelFormulario painelCidade = new
PainelFormulario("Cidade", 20);
painelCidade.setBackground(Color.ORANGE);
this.add(painelCidade);
Combinando Painéis
PainelFormulario painelBairro = new
PainelFormulario("Bairro", 20);
painelBairro.setBackground(Color.LIGHT_GRAY);
this.add(painelBairro);
PainelFormulario painelLogradouro = new
PainelFormulario("Logradouro", 20);
painelLogradouro.setBackground(Color.PINK);
this.add(painelLogradouro);
PainelFormulario painelComplemento = new
PainelFormulario("Complemento", 20);
painelComplemento.setBackground(Color.WHITE);
this.add(painelComplemento);
Combinando Painéis
JPanel painelBotoes = new JPanel();
painelBotoes.setBackground(Color.MAGENTA);
painelBotoes.setLayout(new
FlowLayout(FlowLayout.RIGHT));
painelBotoes.add(new JButton("Novo"));
painelBotoes.add(new JButton("Salvar"));
painelBotoes.add(new JButton("Apagar"));
this.add(painelBotoes);
Próxima aula
?

SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB

  • 1.
    SWING Cleyton Caetano deSouza IFPB – Campus Monteiro cleyton.caetano.souza@gmail.com
  • 2.
    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
  • 7.
  • 8.
    Método: showMessageDialog • Função: –Exibir mensagens de texto • Exemplo • Resultado
  • 9.
    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!
  • 11.
    Método: showMessageDialog • ShowMessageDiaologé um método sobrecarregado – O que isso significa?
  • 12.
    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
  • 13.
  • 14.
    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
  • 18.
  • 19.
    Método: showConfirmDialog • Todosos elementos destacados podem ser configurados, utilizando as versões sobrecarregadas do método
  • 20.
  • 21.
    OptionType • Possíveis valorespara o parâmetro OptionType, que define os botões que aparecerão no confirmDialog
  • 22.
    Retornos • Possíveis retornosdo método confirmDialog – O retorno corresponde ao botão clicado pelo usuário
  • 23.
    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!
  • 27.
    Método: showInputDialog • Oretorno dessa variação é um objeto do valor escolhido
  • 28.
    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
  • 30.
  • 31.
    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
  • 37.
    Hierarquia de Classes *asclasses do pacote javax.swing aparecem em azul; elas começam sempre com J
  • 38.
    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
  • 41.
  • 42.
    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)
  • 52.
    JLabel – Exemplode Utilização
  • 53.
    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á.
  • 54.
    JLabel – Resultadoda Execução
  • 55.
    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)
  • 57.
    JTextField – Exemplode Utilização
  • 58.
    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
  • 60.
    JButton • javax.swing.Jbutton • Correspondea um botão, onde o usuário pode clicar! • Construtores – JButton() – JButton(icone) – JButton(texto) – JButton(icone, texto)
  • 61.
  • 62.
    Documentação • Para maisinformações sobre o JButton, consulte a documentação. – http://docs.oracle.com/javase/7/docs/api/javax/s wing/JButton.html
  • 63.
    JButton • Para queserve um botão?
  • 64.
    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
  • 82.
    JMenuBar • Representa abarra de menus de uma Janela
  • 83.
    JMenu • Representa umadas opções do menu
  • 84.
  • 85.
    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
  • 86.
  • 87.
    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.
  • 89.
    Exemplo de Uso Adicionandoo mesmo ouvinte nas duas opções do menu
  • 90.
    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.
  • 93.
  • 94.
    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
  • 97.
  • 98.
    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)
  • 106.
  • 107.
    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)
  • 110.
    Exemplo de Uso– Construtor com Strings
  • 111.
    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?
  • 113.
  • 114.
    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.
  • 115.
  • 116.
    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)
  • 118.
  • 119.
    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
  • 122.
    JRadioButton Essa operação define quaisbotões farão parte do grupo.
  • 123.
    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ó!
  • 129.
    Tabela – Exemplode Uso • Tabela de Pessoas
  • 130.
    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
  • 137.
  • 138.
    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.
  • 140.
  • 141.
    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
  • 145.
  • 146.
  • 147.
    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)
  • 149.
  • 150.
  • 151.
    GridLayout – Resultadoda Execução 3 linhas 2 colunas } espaçamento vertical } espaçamento horizontal
  • 152.
    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
  • 155.
  • 156.
  • 157.
    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)
  • 159.
  • 160.
  • 161.
    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
  • 167.
    Exemplo de Combinaçãode Painéis Como cada painel restante está sendo gerenciado?
  • 168.
    Combinando Painéis O paineldesse JFrame é gerenciado por um BoxLyout
  • 169.
    Combinando Painéis JPanel painel= (JPanel) this.getContentPane(); BoxLayout gerenciador = new BoxLayout(painel, BoxLayout.Y_AXIS); painel.setLayout(gerenciador);
  • 170.
    Combinando Painéis Esse éum outro painel, gerenciado por um FlowLayout (centralizado)
  • 171.
    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.
  • 173.
    Combinando Painéis JPanel painelCodigoEBotao= new JPanel(); painelCodigoEBotao.setLayout(new GridLayout(1, 2)); painelCodigoEBotao.setBackground(Color.BLUE); this.add(painelCodigoEBotao);
  • 174.
    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
  • 176.
    Combinando Painéis PainelFormulario painelFormularioCodigo= new PainelFormulario("Código", 10); painelFormularioCodigo.setBackground(Color.CYAN); painelCodigoEBotao.add(painelFormularioCodigo);
  • 177.
    Combinando Painéis JPanel painelBotaoConsultar= new JPanel(); painelBotaoConsultar.setLayout(new FlowLayout(FlowLayout.RIGHT)); painelBotaoConsultar.add(new JButton("Consultar")); painelBotaoConsultar.setBackground(Color.GREEN); painelCodigoEBotao.add(painelBotaoConsultar);
  • 178.
    Combinando Painéis Todos essespainéis são “Painéis de Formulário”, a classe que acabamos de criar.
  • 179.
    Combinando Painéis PainelFormulario painelNome= new PainelFormulario("Nome", 20); painelNome.setBackground(Color.YELLOW); this.add(painelNome); PainelFormulario painelEstado = new PainelFormulario("Estado", 20); painelEstado.setBackground(Color.GRAY); this.add(painelEstado); PainelFormulario painelCidade = new PainelFormulario("Cidade", 20); painelCidade.setBackground(Color.ORANGE); this.add(painelCidade);
  • 180.
    Combinando Painéis PainelFormulario painelBairro= new PainelFormulario("Bairro", 20); painelBairro.setBackground(Color.LIGHT_GRAY); this.add(painelBairro); PainelFormulario painelLogradouro = new PainelFormulario("Logradouro", 20); painelLogradouro.setBackground(Color.PINK); this.add(painelLogradouro); PainelFormulario painelComplemento = new PainelFormulario("Complemento", 20); painelComplemento.setBackground(Color.WHITE); this.add(painelComplemento);
  • 181.
    Combinando Painéis JPanel painelBotoes= new JPanel(); painelBotoes.setBackground(Color.MAGENTA); painelBotoes.setLayout(new FlowLayout(FlowLayout.RIGHT)); painelBotoes.add(new JButton("Novo")); painelBotoes.add(new JButton("Salvar")); painelBotoes.add(new JButton("Apagar")); this.add(painelBotoes);
  • 182.