O layout manager padrão para os containers é BorderLayout. Para demonstrar o funcionamento deste layout vamos rodar o exemplo abaixo:
Com se pode ver nas chamadas acima nem todos os gerenciadores estão disponíveis em todos os ambientes. A linha acima foi rodada no Linux e o layout Windows não pode ser aberto.
Exemplo com METAL
Exemplo com MOTIF
Exemplo com SYSTEM
Note que este último é exatamente o formato adotado no ambiente linux (compare com a tela do terminal no início deste post).
Como é o código fonte que gera estas telas?
/*
* ExemploBorderLayout.java
*
* baseado em http://docs.oracle.com/javase/tutorial/uiswing/examples/layout/BorderLayoutDemoProject/src/layout/BorderLayoutDemo.java
* Mostra como utilizar o gerenciador de layout BorderLayout
*/
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
public class ExemploBorderLayout {
public static boolean RIGHT_TO_LEFT = false;
public static void addComponentsToPane(Container painel) {
// verifica se o gerenciador de layout está correto
// obviamente está funcionando porque é o default
if (!(painel.getLayout() instanceof BorderLayout)) {
painel.add(new JLabel("Container nao utiliza BorderLayout!"));
return;
}
if (RIGHT_TO_LEFT) {
painel.setComponentOrientation(
java.awt.ComponentOrientation.RIGHT_TO_LEFT);
}
JButton botao = new JButton("Botao 1 (PAGE_START)");
painel.add(botao, BorderLayout.PAGE_START);
botao = new JButton("Botao 2 (CENTER)");
botao.setPreferredSize(new Dimension(200, 100));
painel.add(botao, BorderLayout.CENTER);
botao = new JButton("Botao 3 (LINE_START)");
painel.add(botao, BorderLayout.LINE_START);
botao = new JButton("Botao 4 (PAGE_END)");
painel.add(botao, BorderLayout.PAGE_END);
botao = new JButton("Botao 5 (LINE_END)");
painel.add(botao, BorderLayout.LINE_END);
}
private static void createAndShowGUI() {
//cria a JFrame
JFrame janela = new
JFrame("Exemplo utilizando BorderLayout - (Constantes de posicionamento)");
// define a saída do programa ao fechar
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//cria um content pane para colocarmos os botões que serão arranjados
addComponentsToPane(janela.getContentPane());
// o formato default do gerenciador de layouts é BorderLayout,
// por isto não é necessária linha abaixo:
//setLayout(new BorderLayout());
// mostra o frame
janela.pack();
janela.setVisible(true); // mostra
}
public static int achaIndex(String[] tipo, String s) {
for(int i = 0; i < tipo.length; i++)
if (tipo[i].equalsIgnoreCase(s)) {
return i;
}
return -1; // não achou --> seleciona system
}
public static void main(String[] args) {
String[] tipoLF = {"system", "Windows", "Motif", "GTK", "Metal"};
// sugiro testar os diversos tipos para você ver como ficam
try {
int indice;
if (args.length < 1) {
indice = -1;
} else {
indice = achaIndex(tipoLF, args[0]);
}
switch ( indice ) {
case 1:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case 2:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
case 3:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
break;
case 4:
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
default:
// utiliza uma chamada a UIManager.getSystemLookAndFeelClassName
// para obter o layout manager do sistema
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
// pega as exceções
} catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
} catch (InstantiationException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
// desliga o uso das fontes BOLD para L&F metal
// com usamos botões para demarcar as áreas, desligamos BOLD para as
// letras nos botoes aparecerem normais nos textos
UIManager.put("swing.boldMetal", Boolean.FALSE);
// esta é a forma geral de abrir uma thread para rodar
// cria o JFrame e abre a tela
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
Vamos retirar o botão 2 e trocar por:
JPanel painelInterno = new JPanel(new BorderLayout());
painelInterno.setPreferredSize(new Dimension(200, 100));
painelInterno.add(new JButton("PAGE_START"), BorderLayout.PAGE_START);
painelInterno.add(new JButton("LINE_START"), BorderLayout.LINE_START);
painelInterno.add(new JButton("PAGE_END"), BorderLayout.PAGE_END);
painelInterno.add(new JButton("LINE_END"), BorderLayout.LINE_END);
painelInterno.add(new JButton("CENTER"), BorderLayout.CENTER);
// adiciona no painel externo
painel.add(painelInterno, BorderLayout.CENTER);
E temos uma janela com outro conjunto de botões no meio da tela:
Nenhum comentário:
Postar um comentário