GridBagLayout no braço help

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.;
import java.awt.
;
import java.util.;
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.
;
import java.awt.event.;
import javax.swing.
;

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) {
}

}

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…

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

[code]

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();
}

}[/code]

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,

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

[code] 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);

[/code]

Drcelo,

Primeira dica: coloque o código sempre entre as tags “code”. :slight_smile:

Segue abaixo o seu código alterado para que pareça mais “arrumado” na tela:

[code]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) {
}

}[/code]

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.

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