1. 1
Swing
Fernando Goulart
Maristela Holanda
Leila de Fátima Carvalho
Java e Interfaces Gráficas
Desktop WEB Móvel
Dados
Dados
_____________
_____________
_____________
_____________
____________
Outra
Aplicação
ou
Legado
ApresentaApresentaççãoão
NegNegóóciocio
Dados ouDados ou
PersistênciaPersistência
AWT x Swing
Java fornece um suporte para construção de
aplicações gráficas por meio de duas interfaces:
AWT (Abstract Windowing Toolkit) . Inicialmente o
único tipo de ferramentas, até a versão 1.1. Todas as
classes estão no pacote java.awt. É bastante incompleta:
faltam Table, TabbedPane, Slider etc. Dependente de
plataforma (peer-model) e comportamento heterogêneo.
Swing/JFC (Java Foundation Class) – surgiu na versão
JDK1.2. Substituiu AWT, mas ainda compartilham partes
fundamentais (como eventos). Atualmente as classes estão
no pacote javax.swing. São “lightweight components”,
independentes de plataforma.
AWT x Swing/JFC
Há compatibilidade entre os componentes AWT e Swing
Há componentes Swing que herdam de componentes
AWT. Exemplo: o componente JFrame, que fornece a
janela principal da aplicação, é derivado da classe Frame.
Os nomes dos componentes JFC/Swing sempre começam
com “J”.
Não mais utilizar os componentes AWT: usar os
componentes correspondentes criados no Swing.
São dois grandes exemplos de reuso: não é necessário
reescrever código, mas apenas utilizar as funcionalidades
implementadas nesses pacotes.
Os 3 elementos AWT/Swing
Componentes gráficos: são elementos que o
usuário manipula com o mouse ou com o teclado.
Gerenciadores de layout: governam a
maneira pela qual os componentes aparecem na tela.
Eventos: assinalam ações do usuário consideradas
importantes, como o click do mouse em um botão.
Java adota o tipo de programação dirigida por
eventos: um evento ocorrido é tratado por event
listener, uma categoria especial de classes.
Componentes
2. 2
Gerenciadores de layout Eventos
JWindow
Dialog
Frame
JLabel
AbstractButton
JPanel
JRootPane
JDialog
JFrame
JButton
Window
JComponent
ContainerComponent
Hierarquia JComponent – totalmente Swing/JFC
1 - Uma aparência (”pluggable look and feel ”) que pode ser especificada
pelo programador ou (opcionalmente) selecionada pelo usuário em
tempo de execução.
3. 3
JComponent
2 - Diversos tipos de borda, que também definem os limites do
componente.
JComponent
3 - A habilidade para definir o tamanho máximo, mínimo e preferido de
um componente, mesmo se a tela for redimensionada.
4 - ToolTip: faixa de texto que aparece quando o cursor passa sobre o
componente.
JFrame
É o tipo mais especializado de janela Java.
Possui uma barra de título e uma borda.
JFrame é derivado do controle da AWT.
Permite interações através de teclado e
mouse.
Incluir no código: import javax.swing.*;
É um container: pode conter outros
componentes.
JFrame
Possui 5 subcontainers. Por isso, é
ligeiramente incompatível com
java.awt.Frame, que não possui
subcontainers.
um gerenciador de layout é
automaticamente associado a cada um de
seus subcontainers.
Os containers de JFrame
Consulte: http://java.sun.com/products/jfc/tsc/articles/containers/index.html
J
J
ContentPane
Os containers de JFrame
11 -- JRootPaneJRootPane: container principal de JFrame, gerencia os demais
subcontainers.
Consulte:
http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html
22 -- JLayeredPaneJLayeredPane: adiciona profundidade a um container, permitindo
sobreposição de componentes, quando necessário. Veja exemplos em:
http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.
html#layeredpane.
4. 4
Os containers de JFrame
3 - MenuBar: encapsula os conceitos da plataforma para os limites da
barra de menu. Para associar uma barra de menu à janela, chamar
setMenuBar. O gerenciador de layout default é o BoxLayout.
Consulte:
http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html
44 -- GlassPane: o painel de vidro, a vidraça. Permite interceptar ou
impedir eventos de mouse, torna os componentes gráficos inacessíveis,
embora visíveis. Consulte:
http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.h
tml#glasspane
Os containers de JFrame
55 -- ContentPaneContentPane: é área de trabalho onde adicionamos diretamente nossos
componentes. O gerenciador de layout default é o BorderLayoutBorderLayout. Para obter
este componente, execute objJanela.getContentPane( ). Consulte:
http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html
JFrame - exemplo
import javax.swing.JFrame;
public class MeuPrimeiroFrame extends JFrame{
public MeuPrimeiroFrame(){
super("Meu Primeiro JFrame");
this.setSize(200, 200);
this.setVisible(true);
}
public static void main(String[] args) {
MeuPrimeiroFrame frame = new MeuPrimeiroFrame();
}
}
JFrame
import javax.swing.JFrame;
public class MeuSegundoFrame {
JFrame quadro;
public MeuSegundoFrame(){
quadro = new JFrame("Meu Segundo Frame");
quadro.setSize(200,200);
quadro.setVisible(true);
}
public static void main(String args[]){
MeuSegundoFrame janela = new MeuSegundoFrame();
}
}
Interfaces gráficas - boas
práticas
Os atributos de instância devem ter visibilidade
private.
Os métodos de instância devem ter visibilidade
public.
Por legibilidade, declare os atributos
preferencialmente logo no início da classe.
Também podem ser declarados ao final, após
todos os métodos.
Instancie os atributos dentro do construtor, ou
nos métodos correspondentes chamados por ele.
Interfaces gráficas - boas práticas
Configure agrupadamente todas as
características de um atributo. Para tratar o
próximo atributo, salte uma linha e recomece
o mesmo processo.
Deixe para o final da classe a área de
adicionar atributos aos containers, isto é, a
chamada dos métodos add .
O setVisible(true) deve aparecer como última
instrução.
5. 5
Interfaces gráficas - boas práticas - exemplo
//imports
import ...
public class BoasPraticas {
//declaração
private JPanel p;
private Jframe j;
public BoasPraticas () {
//instanciação
p = new JPanel();
...
//configuração de cada atributo
p.setBackground(Color.GREEN);
...
//adição aos containers
c.add(p);
....
j.setVisible(true);
}
public static void main(String args[]){
BoasPraticas tela = new BoasPraticas ( );
} }
Alguns componentes
Classes Básicas (Color, Font, etc...)
Color: atribui cor (frente ou fundo) ao componente, através da
composição primária de vermelho, verde e azul (padrão RGB). Use:
1 - o construtor Color(int red, int green, int blue);
2 - ou as Constantes (também em minúsculas):
BLACK BLUE CYAN
DARK_GRAY GRAY GREEN
LIGHT_GRAY MAGENTA ORANGE
PINK RED WHITE
YELLOW
Exemplo: Color c = new Color (255, 51, 0); //red
Font
Font: determina a fonte (letra) em que os rótulos serão
escritos.
Use o construtor
Font(String nome, int estilo, int tamanho).
Estilo: PLAIN, BOLD, ITALIC (use o + para juntar
estilos)
Exemplo: Font f = new Font(“arial”, Font.BOLD, 14);
Font f = new Font(“arial”, Font.BOLD + Font.ITALIC, 14);
Diálogos Pré-definidos
O Swing oferece um conjunto de
diálogos simples pré-definidos para uso
em interações breves com o usuário
mensagens de erro, de alerta
obtenção de uma confirmação
entrada de um único campo de texto
Classe JOptionPane
Estrutura básica:
ícone
mensagem
entrada de dados
botões de opção
6. 6
MessageDialog
Exibe uma mensagem e aguarda OK do
usuário
INFORMATION
QUESTION
WARNING
ERROR
PLAIN
Exemplo de MessageDialog
JOptionPane.showMessageDialog(null,
"Vamos estudar pessoal !!!",
"Dica do Dia",
JOptionPane.WARNING_MESSAGE);
ConfirmDialog
Exibe uma mensagem e obtém uma confirmação
(YES/NO, OK/CANCEL)
Conjuntos de botões de opção (optionType):
JOptionPane.DEFAULT_OPTION
JOptionPane.YES_NO_OPTION
JOptionPane.YES_NO_CANCEL_OPTION
JOptionPane.OK_CANCEL_OPTION
Exemplo de ConfirmDialog
int resp = JOptionPane.showConfirmDialog(null,
"Vamos estudar?",
"Escolha uma opção",
JOptionPane.YES_NO_OPTION );
InputDialog
Exibe uma mensagem e obtém um valor de entrada do
usuário
String nome = JOptionPane.showInputDialog(null,
"Qual é o seu nome?",
"Identifique-se",
JOptionPane.QUESTION_MESSAGE);
OptionDialog
Exibe uma mensagem (ou objeto) e
obtém uma opção escolhida pelo
usuário
O número de botões e seus textos são
configuráveis
A opção default é configurável
7. 7
Exemplo de OptionDialog
Object[] opcoes = {"Sim", "Não", "Mais Tarde",
"Amanhã", "Sei lá!"};
int resp1 = JOptionPane.showOptionDialog(null,
"Vamos Estudar?",
"Escolha uma opção",
JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
opcoes,
opcoes[0]);
Painel de Conteúdo
import java.awt.Container;
import javax.swing.JFrame;
public class MeuPainelConteudo {
JFrame quadro;
Container c;
public MeuPainelConteudo(){
quadro = new JFrame();
quadro.setSize(200,200);
// Painel de conteúdo
c = quadro.getContentPane();
quadro.setVisible(true);
}
}
JLabel
Utilizado para colocar texto e Imagem
em uma Tela
JLabel
public class CriandoLabels {
private JLabel titulo1;
private JFrame quadro;
private Container c;
public CriandoLabels(){
quadro = new JFrame("Criando Labels");
quadro.setSize(300, 200);
// recebendo um Container
c = quadro.getContentPane();
c.setLayout(new FlowLayout());
c.setBackground(Color.YELLOW);
// Criando os Labels
titulo1 = new JLabel("Meu Primeiro Label");
c.add(titulo1);
quadro.setVisible(true);
}
public static void main (String args[]){
CriandoLabels rotulos = new CriandoLabels();}}
JLabel
// Criando os Labels configurando com o outro formato
titulo2 = new JLabel("Meu Label em Negrito");
titulo2.setFont(new Font ("Chiller", Font.BOLD ,20));
c.add(titulo2);
JLabel
titulo3 = new JLabel("Meu label vermelho");
titulo3.setOpaque(true);
titulo3.setBackground(Color.red);
titulo3.setToolTipText("Isso é um label com o background vermelho...");
c.add(titulo3);
8. 8
JLabel
java.net.URL imgURL = CriandoLabels.class.getResource("duke-guitar.png");
ImageIcon imagem = new ImageIcon(imgURL, "Duke muito feliz");
titulo4 = new JLabel("SOu o DuKe",imagem, JLabel.CENTER);
c.add(titulo4);
JTextField
// Criando um JTextField
JTextField texto1 = new JTextField(10);
c.add(texto1);
// Criando um JTextField
JTextField texto2 = new JTextField("Sou o texto 2");
c.add(texto2);
// Criando um JTextField
JTextField texto3 = new JTextField("Sou o texto 2", 20);
c.add(texto3);
JTextArea
// Criando Area de Textos
JTextArea areaTexto = new JTextArea(5,20);
c.add(areaTexto);
JTextArea com JScrollPane
// Criando Area de Textos
JTextArea areaTexto = new JTextArea(5,20);
JScrollPane scrollPane = new JScrollPane(areaTexto);
scrollPane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
c.add(scrollPane);
JRadioButton
// Criando os Radio Button
JRadioButton botaoF = new JRadioButton("Feminino");
c.add(botaoF);
JRadioButton botaoM = new JRadioButton("Masculino");
c.add(botaoM);
// Agrupar os Botoes
ButtonGroup botoes = new ButtonGroup();
botoes.add(botaoF);
botoes.add(botaoM);
JPane
public class CriandoPane extends JFrame {
public CriandoPane(){
super("Criando Pane");
this.setSize(300, 300);
Container c = this.getContentPane();
c.setLayout(new FlowLayout());
JPanel painelAzul = new JPanel();
painelAzul.setPreferredSize(new Dimension(300,100));
painelAzul.setBackground(Color.BLUE );
c.add(painelAzul);
...
9. 9
JPane
JPanel painelVermelho = new JPanel();
painelVermelho.setPreferredSize(new Dimension(300,100));
painelVermelho.setBackground(Color.RED );
// Criando uma Borda
Border borda = BorderFactory.createLineBorder(Color.YELLOW);
TitledBorder bordaComTitulo = BorderFactory.createTitledBorder(borda,"Meu Painel");
painelVermelho.setBorder(bordaComTitulo);
c.add(painelVermelho);
this.setVisible(true);
}
public static void main(String args[]){
CriandoPane programa = new CriandoPane();}}