Interfaces Gráficas: layout manager
João B. Rocha-‐Junior
joao@ecomp.uefs.br
Departamento de Ciências Exatas Universidade Estadual de Feira de Santana
Layout manager João B. Rocha-‐Junior
•
JFC (Java FoundaNon Classes)
•
Swing
– componentes
•
Gerênciamento de Layout
– BoderLayout, FlowLayout, ...
Agenda
1
Layout manager João B. Rocha-‐Junior
•
JFC (Java FoundaNon Classes)
– grupo de classes para auxiliar no
desenvolvimento de interfaces gráficas (GUIs) – independente de plataforma
•
JFC versus AWT e Swing
– AWT e Swing fazem parte do JFC
•
Swing versus AWT
– AWT foi a solução adotada inicialmente, enquanto Swing é a plataforma atual – Swing usa parte do AWT
JFC (Java FoundaNon Classes)
2 Layout manager João B. Rocha-‐Junior
JFC
• Componentes do Swing
– componentes como botão e lista • Pluggable Look and Feel • Acessibilidade
– tecnologias assisNvas, como leitores de tela e displays Braille • Java 2D
– tecnologias para incorporar gráficos e imagem • Internacionalização
– suporte para aplicações que permitem interagir com usuários que falam diferentes línguas
3
Componentes do Swing
Pluggable Look and Feel
• As figuras abaixo são extraídas de um mesmo programas com diferentes look and feel
Layout manager João B. Rocha-‐Junior
Java 2D
http :// st en dh al ga me .o rg /6 Layout manager João B. Rocha-‐Junior
•
Vários componentes
– listas, menus, áreas de texto, botões, ...
•
Os componentes são organizados em um
hierarquia de armazenamento (containers)
– containers de nível mais alto, ex: JFrame – containers intermediário, ex: JPanel
•
Um container é um componente que pode
conter outros componentes
– descendem da classe java.awt.Container
Swing
7
Layout manager João B. Rocha-‐Junior
•
Todo programa que uNliza o Swing tem ao
menos um container de nível mais alto
•
O container de nível mais alto é quem provê
todo o suporte para pintar os componentes e
gerenciar os eventos
•
Existem três container de nível mais alto
– JFrame (janela principal)
– JDialog (janela secundária)
– JApplet (executa dentre de um browser)
Containers de nível mais alto
8 Layout manager João B. Rocha-‐Junior 9
Layout manager João B. Rocha-‐Junior
Containers de nível mais alto
• Todo container de nível mais alto tem– um container de conteúdo (ContentPane) – um container de menu (MenuBar)
Frame MenuBar ContentPane
10 Layout manager João B. Rocha-‐Junior
JFrame
• JFrame é uma janela que tem uma borda, ltulo e botões para fechá-‐la e minimizá-‐la
• Aplicações para Desktop em Java uNlizam ao menos um JFrame
• Métodos principais
– void setTitle(String title): define um ltulo
– void setVisible(boolean v): torna o frame visível
– void setDefaultCloseOperation(int op) : realiza
uma determinada operação ao fechar. Mais comum: JFrame.EXIT_ON_CLOSE
Layout manager João B. Rocha-‐Junior
•
Todo container de nível mais alto contém um
container de conteúdo (content pane)
•
Os componentes (JBupon, JLabel, ...) devem
ser adicionados ao container de conteúdo e
não ao container de nível mais alto!
– componentes são adicionados no container através do método add
– os containers uNlizam um layout manager para posicionar os componentes adicionados
Container de conteúdo
12 Layout manager João B. Rocha-‐Junior
Exemplo
import javax.swing.*; import java.awt.*; public class HelloWorld {
public static void main(String[] args){
JFrame frame = new JFrame("HelloWorld"); frame.setSize(100,100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("Hello world!", Jlabel.CENTER); frame.getContentPane().add(label); frame.setVisible(true); } } 13 Container de nível mais alto
Container de conteúdo
Layout manager João B. Rocha-‐Junior
•
JComponent é a classe base para todos os
componentes Swing como JBupon
•
Todos os componentes que herdam de
JComponent devem ser adicionados a
hierarquia de containers
•
A classe JComponent provê
– look and feel, tratamento de eventos de teclado,
ferramenta para exibir dica (toolNp), infra-‐ estrutura para desenho, suporte a bordas, etc.
JComponent
14 Layout manager João B. Rocha-‐Junior
•
JBupon e JLabel: botão e rótulo
– setText/getText para atualizar e ler o texto
•
JTextField: caixa de texto
– construtor: JTextField(int columns) – setText/getText para atualizar e ler o texto
•
Inicialmente os componentes não tem ação
•
Adicionando informação a um JComponent
– putClientProperty(key:Object,value:Object);
– Object getClientProperty(key:Object);
Componentes
15
•
Também conhecidos como panels e panes
•
Eles simplificam o posicionamento de outros
componentes que são adicionados neles
•
Exemplos de containers de conteúdo
– JPanel (mais comum) – JScrollPane – JTabbedPane
•
Você pode definir o layout de um container
através do método setLayout()
Containers de conteúdo
•
Definição
– processo que consiste em determinar o tamanho e a posição dos componentes na tela
•
Em Java, o gerenciamento de layout é feito
através dos Layout Managers
•
Existem vários Layout Managers pré-‐definidos
– absoluto (não tem gerenciador de layout)
– Alguns: BorderLayout, GridLayout, FlowLayout, BoxLayout, GridBagLayout, CardLayout
Gerenciamento de Layout
Layout manager João B. Rocha-‐Junior
•
O tamanho e a posição de cada componente
deve ser especificado pelo programador
•
Não ajusta bem quando o container top-‐level
muda de tamanho
•
Requer um ajuste complexo quando
mudamos de sistema operacional
– problemas devido a resoluções, tamanhos de fonte, etc.
•
Deve ser evitado!
Absoluto (sem Layout Manager)
18 Layout manager João B. Rocha-‐Junior
•
O Layout Manager decide onde os
componentes devem ser posicionados na tela
– isso é feito automaNcamente quando adicionamos um componente no panel/pane
•
Exemplo
– BorderLayout (posição relaNva) add(label,BorderLayout.CENTER); – FlowLayout GridLayout (ordem de adição)
add(label);
Usando um Layout Manager (1)
19
Layout manager João B. Rocha-‐Junior
BorderLayout
• Cinco áreas para armazenar componentes
– north, south, east, west, e center
– north, south, east, west tem um atributo fixo
– center fica com todo o espaço restante
20 Layout manager João B. Rocha-‐Junior
Exemplo
Container container = new JPanel(new BorderLayout()); JFrame frame = new JFrame("BorderLayoutExample"); frame.setSize(300,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(container);
JLabel label = new JLabel("Center",JLabel.CENTER); container.add(label, BorderLayout.CENTER);
container.add(new JButton("North"), BorderLayout.NORTH); container.add(new JButton("South"), BorderLayout.SOUTH); container.add(new JButton("East"), BorderLayout.EAST); container.add(new JButton("West"), BorderLayout.WEST); frame.setVisible(true);
21
Layout manager João B. Rocha-‐Junior
•
Os componentes são adicionados no panel/
pane da esquerda para direita
– iniciam uma nova linha caso necessário
•
Os componentes tem tamanho default
•
Este é o Layout default de JPanel
FlowLayout
22 Layout manager João B. Rocha-‐Junior
GridLayout
• Posiciona os componentes em um grid – o programador define o número de linhas e colunas • Os componentes são adicionados da esquerda para
direta, e do topo para baixo
• Força os componentes a assumirem o tamanho da célula do grid
Layout manager João B. Rocha-‐Junior
BoxLayout
• Os objetos são alinhados em uma linha ou coluna • Os objetos usam o tamanho default
• Criando um BoxLayout
Box.createHorizontalBox(); Box.createVerticalBox();
24 Layout manager João B. Rocha-‐Junior
CardLayout
• Permitem que vários componentes (JPanel) comparNlhem a mesma área na tela
• Conceitualmente cada JPanel corresponde a uma carta. As cartas ficam uma sobre as outras
– o usuário decide a carta que deseja exibir
25
Layout manager João B. Rocha-‐Junior
GridBagLayout
• GridBagLayout é o mais flexível e complexo Layout
Manager
• Os componentes são adicionados seguindo um grid – alguns componentes podem ocupar mais de uma célula – colunas e linhas podem ter tamanhos (width/length)
diferentes
26 Layout manager João B. Rocha-‐Junior
•
Vários Layout Managers podem ser
combinados para compor telas complexas
Combinando Layout Managers
27
•
Swing tem vários componentes
•
Os componentes são organizados em um
hierarquia de armazenamento (containers)
– um container pode conter outros componentes
– componentes uNlizam um layout manager
•
Gerenciamento de layout
– processo que consiste em determinar o tamanho
e a posição dos componentes na tela
Resumindo (1)
Créditos
• Alguns slides uNlizados nesta apresentação foram
baseados nos seguintes slides – Adam Carmi, "IntroducNon to JFC Swing"
– Ricardo Linden, "Interfaces Gráficas (GUIs) em Java usando Swing Parte I -‐ O básico"
– Ricardo Linden, "Interfaces Gráficas (GUIs) em Java usando Swing Parte II – Tratando Eventos"