Prévia do material em texto
Aula 4 – Componentes Básicos do Swing
Prof. Milton Escóssia
2018
PROGRAMAÇÃO II - CCT0418
Java Swing Framework
O Swing é um framework que disponibiliza um
conjunto de elementos gráficos para ser utilizado na
plataforma Java.
Árvore de Componentes Swing
Classes da
API AWT
Classes da
API SWING
Containers Básicos do SWING
As classes SWING que herdam da classe Container:
JFrame,
Container top-level do tipo janela com barra de título e bordas,
mas sem menubar.
Pode conter outros components como button, textfield etc.
JPanel
Container simples que não possui barra de título nem barra de
menu e nem bordas.
Pode conter outros components como button, textfield etc.
Métodos básicos de um Container
Método Descrição
public void add(Component c) Insere um componente no container.
public void setSize(int largura,int
altura)
Determina as dimensões (largura e altura) do
container.
public void setLayout(LayoutManager
m)
Define o gerenciador de layout para o container.
public void setVisible(boolean status) Altera a visibilidade do container. Por default o
valor é “false”.
A Classe JComponent
Todos os components da
API Swing iniciam com a
letra "J“ e são descendentes
da classe JComponent.
Ex: JPanel, JScrollPane,
Jbutton, JTable.
A classe JComponent herda da class Container, o
qual herda de Component.
A classe Component prove layout hints para suportar
pintura e eventos.
Possui suporte que permite adicionar componentes para
um container.
Principais Componentes do Swing
Containers
JFrame (1)
JPanel (2)
Saída de Dados
JLabel (3)
Entrada de Dados
JTextField (4)
JPasswordField (5)
JTextArea (6)
JCheckBox (7)
JRadioButton (8)
Listas
JComboBox (9)
JList (10)
Ação
JButton (11)
Métodos comuns nos Componentes Swing
get/setPreferredSize
get/setSize
get/setLocation
getLength/Width
repaint
setBackground(Color)
setFont(Font)
isEnabled / setEnabled(boolean)
isVisible / setVisible(boolean)
Componentes Básicos do Swing
JLabel
JTexfField
JButton
JLabel
Representa um rótulo de texto ou imagem.
Principais métodos :
void setText(String) - que altera o texto
String getText() - retorna o texto atual.
void setIcon(ImageIcon) – atribui uma imagem ao rótulo.
Icon getIcon() - retorna a imagem atual.
Exemplo com Texto - Estrutura do Projeto
ProgII
JanelaSimpl
esComTexto
JFrame
A Classe Principal
Exemplo com Texto - A janela
Exemplo com Imagem - Estrutura do Projeto
ProgII
JanelaSimplesC
omImagem
JFrame
A Classe Principal
Exemplo com Imagem - A janela
JTextField
Representa um campo de texto onde o usuário pode
informar um texto em uma linha.
Construtores:
JTextField( )
JTextField(int tamanho)
JTextField(String frase)
JTextField(String frase, int tamanho)
Principais métodos:
void setText(String) - altera o texto
String getText() - retorna o texto atual
Outras Propriedades
Background: cor de fundo do componente.
Editable: Propriedade que se estiver marcada permite a inserção/remoção pelo teclado.
Font: Definir fonte tamanho e estilo de texto.
Foreground: Cor do texto.
horizontalAlignment: Alinhamento do texto dentro do componente.
Text: texto que está dentro do campo.
toolTipText: texto que aparece sobre cursor quando é posicionado sobre o componente. Como
um hint.
Cursor: define o cursor que aparece sobre o componente.
Border: define a borda para o componente.
selectedTextColor: cor do texto quando estiver selecionado.
selectionColor: cor da seleção do texto.
Exemplo com Input - Estrutura do Projeto
ProgII
JanelaSimplesC
omInput
JFrame
A Classe Principal
Exemplo com Input - A janela
JButton
É uma região gráfica que permite tratar diversos
eventos como: click, mouse over, mouse out, etc.
Permite ao usuário solicitar a execução de uma
ação na aplicação.
Pertence ao pacote: import javax.swing.JButton
JButton – Construtores
Construtor Descrição
JButton - Principais Métodos
Descrição Método
JButton - ActionCommand
Permite atribuir uma string (“tag”) ao botão para
posterior identificação.
Métodos:
public void setActionCommand(String actionCommand)
public String getActionCommand()
Componentes do JButton
Texto
Imagem
Texto e Imagem
Exemplo com Botão - Estrutura do Projeto
ProgII
JanelaSimplesC
omBotao
JFrame
A Classe Principal
Exemplo com Botão - A janela
Outros Exemplos de Uso de Botões
JButton com Texto
Instanciando:
JButton com Imagem
Instanciando:
JButton com Texto e Imagem
Instanciando:
Como posso fazer para exibir os
componentes JLabel, JTextField e JButton
num JFrame ?
Como Dispor Vários Componentes em um
mesmo Container
O posicionamento de componentes dentro de um
container pode ser realizado de duas formas
básicas:
Posicional
Uso de Gerenciadores de Layout
Posicionamento Absoluto do Componente
Sistema de Coordenadas de uma Janela:
+x
+y
(0, 0)
Posicionamento Absoluto do Componente
Pode-se utilizar o método “setBounds(x, y, largura,
altura)” para especificar a posição e o tamanho do
componente da GUI.
O método “setBounds” é utilizado para definer uma
área retangular de um componente.
A posição (x, y) determina as coordenadas do canto
superior esquerdo do componente.
Para posicionar um componente temos como
premissa:
Deve-se atribuir o valor “null” ao layout do container.
Posicionamento Absoluto do Componente
+x
+y
(0, 0)
Nome Completo
(0, 0)
(10, 30)
JLabel rotulo = new JLabel(“Nome Completo:");
rotulo.setBounds(10, 30, 40, 20);
40px
20px
Exemplo de Posicionamento Absoluto
Estrutura do projeto no NetBeans:
Exemplo de Posicionamento Absoluto
Definindo as posições dos componentes:
Exemplo de Posicionamento Absoluto
A classe executável:
Exemplo de Posicionamento Absoluto
A classe janela:
Exemplo de Posicionamento Absoluto
A classe janela (continuação):
Uso de Gerenciadores de Layout
Organiza os componentes em regiões em um
container.
Dividir a tela em regiões para posicionamento dos
elementos de tela.
Permite o auto ajuste dos elementos da tela em
caso de redimensionamento da tela, ou mudança na
resolução do display.
Determinando Um Gerenciador de Layout
É atribuído a um container de objetos (JFrame ou
um JPanel).
O método “setLayout( )” permite definir qual
gerenciador de layout será atribuído ao container.
Exemplo de gerenciadores de layout básicos:
FlowLayout
BorderLayout
GridLayout
Gerenciadores de Layout Padrão
Os container possuem por padrão um gerenciador
de layout atribuído:
O gerenciador de layout padrão do JFrame é o
BorderLayout.
O gerenciador de layout padrão do JPanel é o
FlowLayout.
FlowLayout
Gerenciador de layout que organiza os
componentes uma fila, colocados da esquerda para
a direita,por ordem de adição ao layout.
Quando a borda do contêiner é alcançada, os
componentes continuarão a ser exibidos na próxima
linha.
Os componentes podem ser alinhados:
à esquerda,
centralizados (padrão)
alinhados à direita.
FlowLayout
FlowLayout
BorderLayout
Gerenciador de layout que organiza os
componentes em 5 regiões:
NORTH
SOUTH
EAST
WEST
CENTER
BorderLayout
Exercício 1
Reproduza a janela abaixo utilizando:
A) Solução baseada com FlowLayout
B) Solução baseada com BorderLayout
Exercício 2
Reproduza a janela abaixo utilizando:
A) Solução baseada em posicionamento
B) Solução baseada com FlowLayout
C) Solução baseada com BorderLayout
Para resolver o exercício 2B preciso
determinar o tamanho de cada componente
dentro do gerenciador de layout. É possível
fazer isso ?
Usando setSize( ) x setPreferredSize( )
Existe uma outra forma de adicionar
diversos componentes Swing em uma
Janela (JFrame) ?
Sim!!! Similar a forma como se organiza
uma gaveta!
Sim!!! Similar a forma como se organiza
uma gaveta! Usando ORGANIZADORES!
No Swing usa-se o Container JPanel
Usando o Container JPanel
Outra forma de adicionar elementos a JFrame é
fazer uso de um JPanel.
Para exibir vários componentes organizadamente é
preciso usar um painel para agrupar esses componentes:
o JPanel.
Um JPanel permite colocar uma infinidade de elementos
(JComponents) dentro dele.
A ordem em que os componentes são adicionados importa.
Exibindo o Conteúdo de um JPanel
Após adicionar componentes a um JPanel deve-se
adicioná-lo ao JFrame. Isso possibilita a criação de
layouts mais complexos.
Os componentes adicionados ao JPanel estão apenas na
memória, não visíveis ainda.
Para exibir esses componentes na tela gráfica (GUI) é
necessário adicionar o JPanel ao JFrame. Este é responsável
em exibir uma janela gráfica.
Usando o Container JPanel
Um panel é um container que pode-se usar (além do
JFrame)
Principais métodos:
public JPanel(): Cria um JPanel com o gerenciador de layout
padrão.
O gerenciador de layout padrão do JPanel é o FlowLayout.
public JPanel(LayoutManager layout): Cria um Jpanel com o
gerenciador de layout especificado.
Um JPanel pode depois ser acrescentado em um
JFrame para melhorar o layout das telas.
Exemplo JPanel – Adicionando
Componentes
Exemplo JPanel – Determinando o Layout
Exemplo JPanel – Determinando o Layout
no Construtor
Exemplo JPanel – Determinando o Layout
no Construtor
Exercício 3
Crie um Projeto chamado CalculadoraSimples de forma
a reproduzir a janela segundo as regras abaixo:
Utilize somente os containers: JFrame e Jpanel
O JFrame possui como dimensões:
LARGURA = 250;
ALTURA = 350;
Utilize apenas os gerenciadores de layout:
FlowLayout e BorderLayout.
Utilize os componentes:
JTextField
JButton
Como fazer com que ao clicar no botão ele
exiba uma mensagem num JOptionPane ?
Tratamento de Eventos
Eventos podem ser disparados por usuários,
sistema operacional, ou por outras aplicações.
Aplicações baseadas em GUIs são baseadas em
eventos.
Eventos são tarefas realizadas quando um usuário
interage com algum componente GUI.
Tratamento de Eventos
As ações do usuário são convertidas em eventos.
Exemplo no Java:
Quando ocorre uma ação (ActionEvent);
Clique do mouse (MouseEvent);
Apertar em uma tecla (KeyEvent);
Fechar uma janela (WindowEvent);
Tratamento de Eventos
As tarefas de respostas realizadas em um evento
são conhecidas como handler de evento e o
processo total de responder a eventos é conhecido
como tratamento de evento.
Cada tipo de evento precisa ser implementada uma
interface de escuta.
As informações de evento são armazenadas em um
objeto de uma classe que herda da classe
AWT.Event.
Classes de Evento do pacote java.awt
Fonte: https://www.devmedia.com.br/trabalhando-com-eventos-na-gui-do-java/25898
Interfaces Ouvintes de Eventos dos Pacotes
javax.swing.event.
Fonte: https://www.devmedia.com.br/trabalhando-com-eventos-na-gui-do-java/25898
Elementos do Evento
Existem três elementos para o funcionamento do
tratamento de evento:
Origem do Evento: é o componente GUI com qual o
usuário interage.
Objeto do Evento: contém os dados do evento invocado,
sendo como uma referência à origem do evento e
quaisquer informações específicas do evento que podem
ser exigidas pelo ouvinte para testar o evento.
Ouvinte do Evento: é um objeto que é notificado pela
origem de evento quando um evento ocorre.
Tratando Eventos de Clique no Botão
Quando um usuário clica em um botão, é necessário
informar ao componente JButton que há um
interesse em tratar esse evento.
O tratamento ao evento é implementado usando a
interface ActionListener.
Tratando um Evento com ActionListener
Deve-se habilitar o componente para “ouvir” o
eventos através do método addActionListener().
Deve-se passar como parâmetro a referência ao
container que receberá o evento.
Consiste na referência do objeto da classe que
implementa a interface ActionListener.
Tratando um Evento com ActionListener
Consiste em definir o método de manipulação de
evento da interface ActionListener:
public void actionPerformed(ActionEvent evento) {
// Aqui deve conter o código do tratamento do evento.
}
Formas de Tratamento de Evento
Por Classe Anônima
Por Implementação de Interface
Por Handler
Tratamento do Evento por Classe Anônima
Tratamento do Evento por Implementação
da Interface Listener
Tratamento do Evento por Implementação
de um Handler
Referenciando o Handler para Tratamento
do Evento
Faz a chamada
a instância do
BotãoHanfler
Exemplo 1
Implementar uma janela com o botão “Exibir
Mensagem”. Ao clicar no botão deverá exibir uma
janela de diálogo com a mensagem “Boa noite
pessoal !!!”.
Exemplo 1 – Classe Executora
Exemplo 1 – A Classe Janela
Exemplo 1 – O método Configurar Janela
Exemplo 1 – O método Inicializar
Componentes
Exemplo 1 – O método Criar Botão
Mensagem (tratamento por classe Anônima)
Exercício 4
Altere o exemplo 1 (anterior) para que o tratamento
de evento da clique sobre o botão seja realizado por
implementação da interface ActionListener na classe
Janela.
Exercício 5
Altere o exercício 4 (anterior) adicionando 5 botões,
de forma que ao clicar sobre cada botão, onde cada
botão deverá exibir uma mensagem diferente.
Exercício 6
Altere o exercício 5 (anterior) realizando o
tratamento de evento por classe externa (Handler).
Exercício 7 - Calculadora
Altere o Projeto chamado CalculadoraSimples de
forma a seguir as regras do slide seguinte:
Utilize somente os containers: JFrame e JPanel
Utilize apenas os gerenciadores de layout: FlowLayout e
BorderLayout.
Utilize os componentes:
JTextField
JButton
Exercício 7 - Calculadora
Construção da interface
Usar componentes: JFrame, JPanel, Layout, JTextField,
JButton
Deverá conter botões representando:
Os dígitos de 0 a 9
As operações C, +, - , *, / e = Implementar a lógica da calculadora
Usar somente uma caixa de entrada
A caixa de entrada deverá estar bloqueada para digitação.
Ao clicar no botão do nº deverá inserir o nº na caixa de
entrada.
Ao clicar na operação deverá exibir limpar a tela para entrada
de novo valor, caso já tenha um valor exibir o resultado da
operação.
Exercício 8 – Formulário de Cadastro de
Alunos
Crie um projeto chamado CadastroAluno e crie o
formulário abaixo:
Ao clicar no botão salvar deverá validar os campos
obrigatórios: Nome do aluno, Fone e Endereço
Matricula: Nome do Aluno*:
Emai: Telefone*:
Endereço*:
Salvar Carregar Foto
Referências
SWING - Componentes mais importantes e suas
propriedades
https://www.devmedia.com.br/swing-componentes-mais-
importantes-e-suas-propriedades/16113
Propriedades do JLabel - Java Swing componentes
NetBeans – Parte 6
https://www.devmedia.com.br/propriedades-do-jlabel-java-
swing-componentes-netbeans-parte-6/21807
Java Swing: Propriedades do JTextField
https://www.devmedia.com.br/java-swing-propriedades-do-
jtextfield/21207
Apostilas - Java Swing
Caelum – FJ-16:Laboratório Java com Testes, XML
e Design Patterns
Disponível em:
http://www.caelum.com.br/apostila-java-
testes-xml-design-patterns/
Capítulos:
Capítulo 5 - Interfaces gráficas com Swing
Capítulo 8 - Mais Swing: layout managers, mais componentes e
detalhes
Capítulo 11 - Apêndice - Mais swing e recursos avançados