GridBagLayout no braço help

6 respostas
drcelo

Dae galera,

So novato to fazendo uma interface gráfica com swing no braço, tenho alguns JRadioButton e JLabel mas não consigo alinhar eles em tela fica tudo “torto”:

Se alguem souber como faço e puder dar essa help agradeço:

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

import javax.swing.<em>;

import java.awt.</em>;

import java.util.<em>;

import java.awt.GridBagLayout;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;

import java.awt.</em>;

import java.awt.event.<em>;

import javax.swing.</em>;

public class Janela2 extends JFrame implements ActionListener{

private JRadioButton e1,e2,e3,e4;
private ButtonGroup egrupo;
private JLabel exercicio;
private JRadioButton s1,s2,s3,s4;
private ButtonGroup esono;
private JLabel sono;
private JRadioButton r1,r2,r3;
private ButtonGroup erefeição;
private JLabel refeição;
private JRadioButton i1,i2,i3,i4;
private ButtonGroup eintervalo;
private JLabel intervalo;
private JRadioButton t1,t2,t3;
private ButtonGroup etipo;
private JLabel tipo;

public Janela2(){
    // Definição do meu layout
    GridBagLayout layout= new GridBagLayout();
    GridBagConstraints c=new GridBagConstraints();
    getContentPane().setLayout(layout);          
    // Botões referentes a primeira pergunta
    e1=new JRadioButton("Não pratico",false);
    e2=new JRadioButton("Duas vezes por semana",false);
    e3=new JRadioButton("Quatro vezes por semana",false);
    e4=new JRadioButton("Diariamente",false);
    // Agrupamento dos botões da primeira pergunta
    egrupo=new ButtonGroup();
    egrupo.add(e1);
    egrupo.add(e2);
    egrupo.add(e3);
    egrupo.add(e4);
    exercicio=new JLabel(">> Exercícios:");
    // Botões referentes a segunda pergunta
    s1=new JRadioButton("Menos de 4 Horas");
    s2=new JRadioButton("Entre 6 e 8 Horas");
    s3=new JRadioButton("Entre 4 e 6 Horas");
    s4=new JRadioButton("Acima de 8 Horas");
    // Agrupamento dos botões referentes a segunda pergunta
    esono=new ButtonGroup();
    esono.add(s1);
    esono.add(s2);
    esono.add(s3);
    esono.add(s4);
    sono=new JLabel(">> Horas de sono diárias:");
    // Botões referentes a terceira pergunta
    r1=new JRadioButton("Menos de 3 refeições");
    r2=new JRadioButton("Entre 3 e 5 refeições");
    r3=new JRadioButton("Acima de 5 refeições");
    // Agrupamento dos botões referentes a terceira pergunta
    erefeição=new ButtonGroup();
    erefeição.add(r1);
    erefeição.add(r2);
    erefeição.add(r3);
    refeição=new JLabel(">> Quantidade de refeição diárias:");
    // Botões referentes a quarta pergunta
    i1=new JRadioButton("Não controlo");
    i2=new JRadioButton("2 Horas");
    i3=new JRadioButton("4 Horas");
    i4=new JRadioButton("6 Horas");
    // Agrupamento dos botões referentes a quarta pergunta
    eintervalo=new ButtonGroup();
    eintervalo.add(i1);
    eintervalo.add(i2);
    eintervalo.add(i3);
    eintervalo.add(i4);
    intervalo=new JLabel(">> Intervalo entre as refeições:");
    // Botões referentes a quinta pergunta
    t1=new JRadioButton("Pouco saudável");
    t2=new JRadioButton("Saudável");
    t3=new JRadioButton("Adequada");
    // Agrupamento dos botões referentes a quinta pergunta
    etipo=new ButtonGroup();
    etipo.add(t1);
    etipo.add(t2);
    etipo.add(t3);
    tipo=new JLabel(">> Tipo de alimentação:");
    // Posicionamento na tela
    c.gridy=0; 
    c.gridx=0; 
    layout.setConstraints(exercicio, c);
    getContentPane().add(exercicio);
    c.gridy=1;
    c.gridx=0;
    layout.setConstraints(e1,c);
    getContentPane().add(e1);
    c.gridy=1;
    c.gridx=1;
    layout.setConstraints(e2,c);
    getContentPane().add(e2);
    c.gridy=1;
    c.gridx=2;
    layout.setConstraints(e3,c);
    getContentPane().add(e3);
    c.gridy=1;
    c.gridx=3;
    layout.setConstraints(e4,c);
    getContentPane().add(e4);
    c.gridy=2;
    c.gridx=0;
    layout.setConstraints(sono,c);
    getContentPane().add(sono);  
    c.gridy=3;
    c.gridx=0;
    layout.setConstraints(s1,c);
    getContentPane().add(s1);   
    c.gridy=3;
    c.gridx=1;
    layout.setConstraints(s2,c);
    getContentPane().add(s2);   
    c.gridy=3;
    c.gridx=2;
    layout.setConstraints(s3,c);
    getContentPane().add(s3);  
    c.gridy=3;
    c.gridx=3;
    layout.setConstraints(s4,c);
    getContentPane().add(s4); 
    c.gridy=4;
    c.gridx=0;
    layout.setConstraints(refeição,c);
    getContentPane().add(refeição);    
    c.gridy=5;
    c.gridx=0;
    layout.setConstraints(r1,c);
    getContentPane().add(r1);     
    c.gridy=5;
    c.gridx=1;
    layout.setConstraints(r2,c);
    getContentPane().add(r2);   
    c.gridy=5;
    c.gridx=2;
    layout.setConstraints(r3,c);
    getContentPane().add(r3);    
    c.gridy=6;
    c.gridx=0;
    layout.setConstraints(intervalo,c);
    getContentPane().add(intervalo);
    c.gridy=7;
    c.gridx=0;
    layout.setConstraints(i1,c);
    getContentPane().add(i1);  
    c.gridy=7;
    c.gridx=1;
    layout.setConstraints(i2,c);
    getContentPane().add(i2);
    c.gridy=7;
    c.gridx=2;
    layout.setConstraints(i3,c);
    getContentPane().add(i3);  
    c.gridy=7;
    c.gridx=3;
    layout.setConstraints(i4,c);
    getContentPane().add(i4);    
    c.gridy=8;
    c.gridx=0;
    layout.setConstraints(tipo,c);
    getContentPane().add(tipo);    
    c.gridy=9;
    c.gridx=0;
    layout.setConstraints(t1,c);
    getContentPane().add(t1);  
    c.gridy=9;
    c.gridx=1;
    layout.setConstraints(t2,c);
    getContentPane().add(t2);  
    c.gridy=9;
    c.gridx=2;
    layout.setConstraints(t3,c);
    getContentPane().add(t3);          
    // Definição do tamanho da minha janela
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(700,450);
    setLocation(350,280);
    setTitle("JNutri 1.0");        
    setVisible(true);
}
public void actionPerformed(ActionEvent e) {
}

}

6 Respostas

java_Regi

Opá;

cara…

seta o Layout como Nulo…
setLayout( null );

ai vc add os campos na tela com o SEUCOMPONENTE.setBounds( x, y, w, z );

x = _________________
aonde ele ira na tela…
y = |
|
|
aonde ira para baixo da tela…

w = tamanho…
z = largura…

tenta ai…

java_Regi

tenho um exemplo básico aqui de uma tela com um botão

public class Tela extends JFrame implements ActionListener {
	
	private static final long serialVersionUID = 1L;

	private final JButton bt = new JButton("Nova Tela");
	
	public Tela(){

		setTitle( "Tela 1" );
		setVisible( true );
		setSize( 500, 400 );
		setLocation( 200, 100 );
	
		
		add(bt); // adiciona o botão na tela...
		bt.setBounds( 10, 10, 100, 20 ); // diz aonde sera posicionado o botão
		setLayout( null ); // seta o layout como Nuloo
		bt.addActionListener( this );
	}
	public static void main(String[] args ){
		
		new Tela();
	}
}
Paulo_de_Tarso

Seguinte,

Em www.larces.uece.br/~ze está um projeto de software desktop.

Na seção downloads, você pode pegar os fontes (projeto do Eclipse).

Aí no pacote visao.paineis, tem vários exemplos de JPanel com GridBagLayout.

Atenciosamente,

Metaleiro

[color=darkblue]Segue a maneira como utilizo :[/color]

panelButton.setLayout(new GridBagLayout());
        TitledBorder border = new TitledBorder("Atualizar");
        border.setTitleColor(Color.BLACK);
        border.setBorder(BorderFactory.createLineBorder(Color.BLUE, 1));
        panelButton.setBorder(border);
        
        panelButton.add(new JLabel("Atualização : "),
                new GridBagConstraints(0, 1, 1, 1, 0, 0,
                        GridBagConstraints.WEST, GridBagConstraints.NONE,
                        new Insets(10, 10, 5, 5), 0, 0));
        panelButton.add(textWay,
                new GridBagConstraints(1, 1, 1, 1, 1, 0,
                        GridBagConstraints.CENTER,
                        GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5,
                                5), 0, 0));
        panelButton.add(importar,
                new GridBagConstraints(2, 1, 1, 1, 1, 0,
                        GridBagConstraints.CENTER,
                        GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5,
                                5), 0, 0));
        panelButton.add(confirmar,
                new GridBagConstraints(1, 3, 1, 1, 1, 0,
                        GridBagConstraints.CENTER,
                        GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5,
                                5), 0, 0));

        setLayout(new BorderLayout(0, 0));
        
        JPanel pnlParametro = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
        
        pnlParametro.add(panelButton);
fenrir

Drcelo,

Primeira dica: coloque o código sempre entre as tags "code". :)

Segue abaixo o seu código alterado para que pareça mais "arrumado" na tela:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;

public class Janela2 extends JFrame implements ActionListener{

    private JRadioButton e1,e2,e3,e4;
    private ButtonGroup egrupo;
    private JLabel exercicio;
    private JRadioButton s1,s2,s3,s4;
    private ButtonGroup esono;
    private JLabel sono;
    private JRadioButton r1,r2,r3;
    private ButtonGroup erefeição;
    private JLabel refeição;
    private JRadioButton i1,i2,i3,i4;
    private ButtonGroup eintervalo;
    private JLabel intervalo;
    private JRadioButton t1,t2,t3;
    private ButtonGroup etipo;
    private JLabel tipo;


    public static void main(String[] args) {
        new Janela2().show();
    }

    public Janela2() {
        // Definição do meu layout
        GridBagLayout layout = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        getContentPane().setLayout(layout);
        // Botões referentes a primeira pergunta
        e1 = new JRadioButton("Não pratico", false);
        e2 = new JRadioButton("Duas vezes por semana", false);
        e3 = new JRadioButton("Quatro vezes por semana", false);
        e4 = new JRadioButton("Diariamente", false);
        // Agrupamento dos botões da primeira pergunta
        egrupo = new ButtonGroup();
        egrupo.add(e1);
        egrupo.add(e2);
        egrupo.add(e3);
        egrupo.add(e4);
        exercicio = new JLabel(">> Exercícios:");
        // Botões referentes a segunda pergunta
        s1 = new JRadioButton("Menos de 4 Horas");
        s2 = new JRadioButton("Entre 6 e 8 Horas");
        s3 = new JRadioButton("Entre 4 e 6 Horas");
        s4 = new JRadioButton("Acima de 8 Horas");
        // Agrupamento dos botões referentes a segunda pergunta
        esono = new ButtonGroup();
        esono.add(s1);
        esono.add(s2);
        esono.add(s3);
        esono.add(s4);
        sono = new JLabel(">> Horas de sono diárias:");
        // Botões referentes a terceira pergunta
        r1 = new JRadioButton("Menos de 3 refeições");
        r2 = new JRadioButton("Entre 3 e 5 refeições");
        r3 = new JRadioButton("Acima de 5 refeições");
        // Agrupamento dos botões referentes a terceira pergunta
        erefeição = new ButtonGroup();
        erefeição.add(r1);
        erefeição.add(r2);
        erefeição.add(r3);
        refeição = new JLabel(">> Quantidade de refeição diárias:");
        // Botões referentes a quarta pergunta
        i1 = new JRadioButton("Não controlo");
        i2 = new JRadioButton("2 Horas");
        i3 = new JRadioButton("4 Horas");
        i4 = new JRadioButton("6 Horas");
        // Agrupamento dos botões referentes a quarta pergunta
        eintervalo = new ButtonGroup();
        eintervalo.add(i1);
        eintervalo.add(i2);
        eintervalo.add(i3);
        eintervalo.add(i4);
        intervalo = new JLabel(">> Intervalo entre as refeições:");
        // Botões referentes a quinta pergunta
        t1 = new JRadioButton("Pouco saudável");
        t2 = new JRadioButton("Saudável");
        t3 = new JRadioButton("Adequada");
        // Agrupamento dos botões referentes a quinta pergunta
        etipo = new ButtonGroup();
        etipo.add(t1);
        etipo.add(t2);
        etipo.add(t3);
        tipo = new JLabel(">> Tipo de alimentação:");

        // Posicionamento na tela
        c.anchor = GridBagConstraints.WEST;
        c.fill = GridBagConstraints.BOTH;
        c.gridwidth = GridBagConstraints.REMAINDER;
        getContentPane().add(exercicio, c);

        c.gridwidth = 1;
        getContentPane().add(e1, c);
        getContentPane().add(e2, c);
        getContentPane().add(e3, c);
        c.gridwidth = GridBagConstraints.REMAINDER;
        getContentPane().add(e4, c);

        getContentPane().add(sono, c);

        c.gridwidth = 1;
        getContentPane().add(s1, c);
        getContentPane().add(s2, c);
        getContentPane().add(s3, c);
        c.gridwidth = GridBagConstraints.REMAINDER;
        getContentPane().add(s4, c);

        getContentPane().add(refeição, c);

        c.gridwidth = 1;
        getContentPane().add(r1, c);
        getContentPane().add(r2, c);
        c.gridwidth = GridBagConstraints.REMAINDER;
        getContentPane().add(r3, c);

        getContentPane().add(intervalo, c);

        c.gridwidth = 1;
        getContentPane().add(i1, c);
        getContentPane().add(i2, c);
        getContentPane().add(i3, c);
        c.gridwidth = GridBagConstraints.REMAINDER;
        getContentPane().add(i4, c);

        getContentPane().add(tipo, c);

        c.gridwidth = 1;
        getContentPane().add(t1, c);
        getContentPane().add(t2, c);
        c.gridwidth = GridBagConstraints.REMAINDER;
        getContentPane().add(t3, c);

        // Definição do tamanho da minha janela
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(700, 450);
        setLocation(350, 280);
        setTitle("JNutri 1.0");
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
    }

}

Apenas alterei a parte que coloca os elementos na tela.
Como você pode perceber, está bem diferente do que você fez. A sua primeira pergunta talvez seja porque eu retirei os gridy e gridx. A resposta é simples: eles não são necessários se você coloca os elementos no container na ordem certa. Para determinar a mudança de linha, é utilizado o gridwidth. A cada início de linha ele está sendo definido com o valor 1, que significa que aquele elemento ocupará uma coluna, e o último elemento da coluna recebe o valor constante REMAINDER, que indica que ele deve preencher o espaço que sobrar até o final da linha, e que o próximo elemento irá na linha seguinte.

Também usei o anchor para indicar que os elementos devem ser alinhados à esquerda.

Sugiro que você leia o que está no seguinte link para aprender a mexer com o GridBagLayout: http://www.javafree.org/javabb/viewtopic.jbb?t=5792

Ele é complicado mesmo, não se assuste. Mas muito poderoso.

drcelo

Ae pessoal agora entendi valeu pela ajuda de todos vocês. :smiley:

Criado 18 de maio de 2007
Ultima resposta 20 de mai. de 2007
Respostas 6
Participantes 5