Академический Документы
Профессиональный Документы
Культура Документы
1 Introdução
Em um Panel podemos inserir componentes para criarmos nossa janela.
Para posicionar nossos componentes usaremos ferramenta poderosa do Java,
LAYOUT. Os layouts organizam nossos componentes de maneira inteligente,
poupando tempo de programação, já que o próprio layout calcula o tamanho e
reorganização dos componentes caso nossa janela aumente ou diminua de
tamanho.
Esse layout nos ajuda a implementar uma área que contem diferentes
componentes a cada momento. Esse layout, por exemplo, pode ser controlado
por uma ComboBox, onde o estado dessa combo determina qual será o
conjunto de componentes mostrados pelo Card Layout.
2 Configurando um layout
Podemos modificar o layout do componente usando o método
setLayout().
public FramePrincipal() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
public FramePrincipal() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
public FramePrincipal() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
public FramePrincipal() {
...
add(panelPrincipal);
}
}
Muito bom, agora que temos nosso layout configurado vamos fazer
algumas experiências.
Vamos primeiro adicionar alguns componentes para possibilitar o
cadastro de clientes com nome, telefone e CPF.
public FramePrincipal() {
...
panelPrincipal.add(new JLabel("Nome:"));
_fieldNome = new JTextField(15);
panelPrincipal.add(_fieldNome);
panelPrincipal.add(new JLabel("Telefone:"));
_fieldTelefone = new JTextField(15);
panelPrincipal.add(_fieldTelefone);
panelPrincipal.add(new JLabel("CPF:"));
_fieldCPF = new JTextField(15);
panelPrincipal.add(_fieldCPF);
add(panelPrincipal);
}
}
Hum... não ficou muito bom. Isso acontece porque quando inserimos
componentes em um GridBagLayout sem configurar o layout para ele, os
componentes são organizados em uma linha apenas e como não é possível
desenhar todos os componentes em uma linha por falta de espaço,
automaticamente os JTextFields são configurados para seu tamanho mínimo.
Caso precisarmos modificar o tamanho mínimo para o componente iremos
usar o método setMinimumSize().
Se você expandir a tela, os componentes serão desenhados em seu
tamanho normal.
(x,y) Eixo X de 0 n
public FramePrincipal() {
...
gbc.gridx = 0;
gbc.gridy = 0;
panelPrincipal.add(new JLabel("Nome:"), gbc);
gbc.gridx = 0;
gbc.gridy = 1;
panelPrincipal.add(new JLabel("Telefone:"), gbc);
gbc.gridx = 0;
gbc.gridy = 2;
panelPrincipal.add(new JLabel("CPF:"), gbc);
add(panelPrincipal);
}
}
public FramePrincipal() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
add(toolBar, BorderLayout.PAGE_START);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(10, 10, 10, 10);
panelPrincipal.add(new JLabel("Nome:"), gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets(0, 10, 10, 10);
panelPrincipal.add(new JLabel("Telefone:"), gbc);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.insets = new Insets(0, 10, 10, 10);
panelPrincipal.add(new JLabel("CPF:"), gbc);
add(panelPrincipal);
}
}
4.3 Alinhando os lables (anchor)
Como os componentes têm tamanhos diferentes, os grids são ajustados
automaticamente com a largura do maior componente da coluna e com a
altura do maior componente na linha.
A propriedade anchor é usada quando o componente não ocupa todo o
espaço do grid e com ele podemos posicionar nosso componente em uma das
seguintes posições:
public FramePrincipal() {
...
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(10, 10, 10, 10);
gbc.anchor = GridBagConstraints.LINE_END;
panelPrincipal.add(new JLabel("Nome:"), gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets(0, 10, 10, 10);
gbc.anchor = GridBagConstraints.LINE_END;
panelPrincipal.add(new JLabel("Telefone:"), gbc);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.insets = new Insets(0, 10, 10, 10);
gbc.anchor = GridBagConstraints.LINE_END;
panelPrincipal.add(new JLabel("CPF:"), gbc);
add(panelPrincipal);
}
}
public FramePrincipal() {
...
Panel panelPrincipal = new Panel();
panelPrincipal.setLayout(new GridBagLayout());
...
gbc.gridx = 0;
gbc.gridy = 3;
gbc.insets = new Insets(0, 10, 10, 10);
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
panelPrincipal.add(panelBotões, gbc);
add(panelPrincipal);
}
}
Agora precisamos configurar para que o panel ocupe duas colunas e
inserir os botões.
public FramePrincipal() {
...
...
gbc.gridx = 0;
gbc.gridy = 3;
gbc.insets = new Insets(0, 10, 10, 10);
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = 2;
panelPrincipal.add(panelBotões, gbc);
add(panelPrincipal);
}
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Panel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;
public FramePrincipal() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
add(toolBar, BorderLayout.PAGE_START);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(10, 10, 10, 10);
gbc.anchor = GridBagConstraints.LINE_END;
panelPrincipal.add(new JLabel("Nome:"), gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets(0, 10, 10, 10);
gbc.anchor = GridBagConstraints.LINE_END;
panelPrincipal.add(new JLabel("Telefone:"), gbc);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.insets = new Insets(0, 10, 10, 10);
gbc.anchor = GridBagConstraints.LINE_END;
panelPrincipal.add(new JLabel("CPF:"), gbc);
panelBotões.add(new JButton("Processar"));
panelBotões.add(new JButton("Limpar"));
gbc.gridx = 0;
gbc.gridy = 3;
gbc.insets = new Insets(0, 10, 10, 10);
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = 2;
panelPrincipal.add(panelBotões, gbc);
add(panelPrincipal);
}
}