terça-feira, 10 de fevereiro de 2009

Artigo: Múltiplos layouts em um JFrame.

Muitas vezes queremos fazer um JFrame com diferentes layouts, e não apenas com uma forma só de apresentar os objetos. Uma solução para isso é adicionar Panel de diferentes layouts em diferentes posições do JFrame.

Entre os vários layouts estão:

BorderLayout: você pode adicionar os objetos na posição norte, sul, leste, oeste e centro.

FlowLayout: adiciona os objetos linearmente, e quando ultrapassa o tamanho do frame ele quebra a linha, pode-se escolher se quer da esquerda pra direita, da direita pra esquerda ou centro, o padrão é esquerda-direita.

GridLayout: especifica-se o total de linhas e colunas, os objetos são adicionados até preencher todas as colunas da primeira linha, depois todas as colunas da segunda linha e assim sucessivamente.

Apesar de apenas ter comentado esses, que são os que eu vou usar nesse artigo, possui muitos outros como GridBagLayout que você determina o tanto de colunas e linhas que o componente irá utilizar.

Vamos ao exemplo:
Pra começar precisamos importar:

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

O JFrame para nossa classe que será a janela estender, JButton para adicionar botões, o JPanel para podermos criar os painéis, e os layouts que utilizaremos.

Criando a nossa janela:

public class Janela extends JFrame{
// botoes que serao inseridos no panelNorte que possui FlowLayout
private JButton button1Norte;
private JButton button2Norte;
private JButton button3Norte;
private JButton button4Norte;

// botoes que serao inseridos no panelSul que possui GridLayout
private JButton button1Sul;
private JButton button2Sul;
private JButton button3Sul;
private JButton button4Sul;

//panel com FlowLayout
private JPanel panelNorte;
private JPanel panelSul;

public Janela()
{
super("Janela com multiplos layouts");
this.Init();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 500);
this.setVisible(true);
}

private void Init()
{
//inicializa os botoes
this.button1Norte = new JButton("Botao1Norte");
this.button1Sul = new JButton("Botao1Sul");
this.button2Norte = new JButton("Botao2Norte");
this.button2Sul = new JButton("Botao2Sul");
this.button3Norte = new JButton("Botao3Norte");
this.button3Sul = new JButton("Botao3Sul");
this.button4Norte = new JButton("Botao4Norte");
this.button4Sul = new JButton("Botao4Sul");

// inicializa os JPanels com os layouts
this.panelNorte = new JPanel(new FlowLayout());

//GridLyout com duas linhas e duas colunas
this.panelSul = new JPanel(new GridLayout(2, 2));

//insere os botoes na panelNorte, por ser FlowLayout sera inserido da esquerda para a direita
this.panelNorte.add(this.button1Norte);
this.panelNorte.add(this.button2Norte);
this.panelNorte.add(this.button3Norte);
this.panelNorte.add(this.button4Norte);

//insere os botoes no panelSul, por ser GridLayout ele preenche a primeira linha, depois a
// segunda
// e assim por diante
this.panelSul.add(this.button1Sul);
this.panelSul.add(this.button2Sul);
this.panelSul.add(this.button3Sul);
this.panelSul.add(this.button4Sul);
//insere os panels na janela, o BorderLayout indica a posicao podendo ser
//norte, sul, leste, oeste ou centro
this.add(this.panelNorte, BorderLayout.NORTH);
this.add(this.panelSul ,BorderLayout.SOUTH);
}
}

As primeiras linhas eu declaro os botoes e os painéis onde os botões serão adicionados.

Na função Init() eu inicializo todos os botões, a string no construtor será o text mostrado em cada botão. Cada Panel é inicializado com um tipo de layout. Feito isso adiciono cada botão em seu determinado Panel.

Pronto agora é só adicionar cada Panel em seu lugar no Frame.

Iniciamos então a nossa classe Janela no Main:
public class Main {
public static void main(String[] args) {
new Janela();
}
}

O resultado:



A tela não terá funcioinalidade pois não adicionei eventos, use a imaginação e até a próxima.

Nenhum comentário:

Postar um comentário