Usando GridBagLayout()

Por favor, preciso colocar os 4 botões que criei do lado esquerdo do frame. Como fazer? Já tentei diversas maneiras e diversos parâmetros no GridLayout(). Alguém poderia dar um força?
Vejam o código:

[code]import javax.swing.;
import java.awt.
;
import java.awt.Color;

public class FramePrincipal extends JFrame{
private Botoes bt;
private JLabel l1, l2;

public FramePrincipal(){
setTitle(“ACADEMIA FORÇA ATIVA”);
bt = new Botoes();

Icon bug = new ImageIcon("travelbug.gif");   
l1 = new JLabel ("ACADEMIA FORÇA ATIVA",bug,SwingConstants.CENTER);   
add(l1); 
l1.setForeground(Color.red);

getContentPane().setBackground(Color.CYAN);
getContentPane().setLayout(new GridLayout(6,0);
getContentPane().add(bt);

setVisible(true);
setSize(700, 500);
setLocation(400, 200);	

}

}[/code]

[code]import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.event.ActionListener;

public class Botoes extends JPanel{
private JButton b1, b2, b3, b4;
private TratarBotoes tr;

public Botoes(){
	tr = new TratarBotoes();
	b1 = new JButton("CADASTRAR ALUNOS");
	b2 = new JButton("FAZER CONSULTAS");
	b3 = new JButton("EXIBIR RELATÓRIOS");
	b4 = new JButton("SAIR DO SISTEMA");
	 
	b1.addActionListener(tr);
	b2.addActionListener(tr);
	b3.addActionListener(tr);
	b4.addActionListener(tr); 

	add(b1);
	add(b2);
	add(b3);
	add(b4);
	
	setLayout(new GridLayout());
	
}

}[/code]

Boa noite Daniel35

A melhor forma de voce resolver isto, é usar GridBagLayout do que o GridLayout. O GridLayout vai dispondo os componentes conforme voce os vai acrescentando, Já com o GridBagLayout voce pode colocar seus componentes especificando linha e coluna, e tambem especificar quantas colunas o componente vai ocupar e quantas linhas vai ocupar.

Eu criei uma classe diagramadora, ou seja, ela é uma diagramação do GridBagLayout, eis a classe:

package componentes;

import java.awt.Color;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JPanel;

public class ContentLayout extends JPanel {

    // Definição do Layout e constraints do Layout
    private GridBagLayout layout;
    private GridBagConstraints constraints;
    public final int horizontal = GridBagConstraints.HORIZONTAL;
    public final int both = GridBagConstraints.BOTH;

    //Construtor do objeto (como o mesmo nome da classe)
    public ContentLayout(){
       layout = new GridBagLayout();
       setLayout(layout);
       constraints = new GridBagConstraints();
       constraints.weightx = 0;
       constraints.weighty = 0;
       constraints.insets = new Insets(5,5,5,5);
    }

    // Método que posiciona o componente no Frame
    public void addComponent(Component comp, int row, int column, int width, int height, int fill){
        constraints.fill = fill;
        constraints.gridx = column;
        constraints.gridy = row;
        constraints.gridwidth = width;
        constraints.gridheight = height;
        layout.setConstraints(comp, constraints);
        add(comp);
    }

    // Método que define a borda do Frame
    public void setBorda(Color color, int thickness){
        setBorder(BorderFactory.createLineBorder(color, thickness));
    }

}

Agora voce vai colocar o diagramador no Frame Principal desta forma:

import javax.swing.*;   
import java.awt.*;   
import java.awt.Color;
import java.awt.event.ActionListener;
import componentes.ContentLayout;    
  
public class FramePrincipal extends JFrame implements ActionListener{   
    private JButton b1, b2, b3, b4; 
    private JLabel l1, l2;     
  
    public FramePrincipal(){   
        setTitle("ACADEMIA FORÇA ATIVA");     
        getContentPane().setBackground(Color.CYAN); 
  
        // define o layout
       setContentPane(getContainer());
       // Substitui o setSize e o setLocation 
       setBounds(400,200,700,500);
       setVisible(true);      
       
    }
    
    // Método que vai diagramar os componentes
    private ContentLayout getContainer(){
       ContentLayout container = new ContentLayout();
       Icon bug = new ImageIcon("travelbug.gif");     
       l1 = new JLabel ("ACADEMIA FORÇA ATIVA",bug,SwingConstants.CENTER);
       l1.setForeground(Color.red);   

       // Adiciona o "l1" na linha 0, coluna 0, ocupando 3 colunas e 1 linha de forma horizontal
       container.addComponent(l1,0,0,3,1,container.horizontal);

       b1 = new JButton("CADASTRAR ALUNOS");
       b1.addActionListener(this);
       // Adiciona o "b1" na linha 1, coluna 0, ocupando 1 coluna e 1 linha de forma horizontal
       container.addComponent(b1,1,0,1,1,container.horizontal);
          
       b2 = new JButton("FAZER CONSULTAS");
       b2.addActionListener(this);
       // Adiciona o "b2" na linha 2, coluna 0, ocupando 1 coluna e 1 linha de forma horizontal
       container.addComponent(b1,2,0,1,1,container.horizontal);
   
       b3 = new JButton("EXIBIR RELATÓRIOS");
       b3.addActionListener(this);
       // Adiciona o "b3" na linha 3, coluna 0, ocupando 1 coluna e 1 linha de forma horizontal
       container.addComponent(b1,3,0,1,1,container.horizontal);
   
       b4 = new JButton("SAIR DO SISTEMA");
       b4.addActionListener(this);
       // Adiciona o "b4" na linha 4, coluna 0, ocupando 1 coluna e 1 linha de forma horizontal
       container.addComponent(b1,4,0,1,1,container.horizontal);

       // Define a borda
       container.setBorda(new Color(0,0,0), 1);
       
       // retorna o layout montado do frame
       return container;
    }   
}  

Espero ter ajudado

Muito obrigado pela ajuda e atenção, mas está ocorrendo alguns erros do tipo: cannot find symbol class ContentLayout nas linhas 5, 24, 25, 25. Teria como analisá-los? Eu tentei importar outros componentes mas não consegui resolver.

erro na linha 05:

import componentes.ContentLayou

erro na linha 24:

private ContentLayout getContainer(){  

erro na linha 25:

ContentLayout container = new ContentLayout();  

obrigado pela ajuda.

Boa tarde Daniel35.

Em que pacote voce colocou a classe ContentLayout que te passei :?:

Se colocou no mesmo pacote que o FramePrincipal então exclua a linha nº 05 abaixo:

    import componentes.ContentLayout;

Agora se voce colocou em um pacote diferente do FramePrincipal, neste caso voce deve usar o import com o nome do pacote seguido de um ponto e nome da classe ContentLayout, assim:

  ...
  import meupacote.ContentLayout;
  ...

No meu caso, eu coloquei a classe ContentLayout no pacote “componentes” e por isso o “import componentes.ContentLayout”, e talvez seja esse o erro, de não haver o pacote “componentes” no seu projeto.

PESSOAL… TO TENTANDO FAZER UMA TELA D ELOGIN Q TEM UM JPG NO FUNDO E OS TEXTFIELDS NA FRENTE DA IMAGEM… MAS DE MANEIRA NENHUMA TA DANDO CERTO… ALGUEM DA UMA OLHADAD AÍ E ME AJUDA P FAVORRRRRRRRRRRRR


[code]
public class Tela_login extends JFrame{

private JLabel log = new JLabel("Login: ");
private JLabel sen = new JLabel("Senha: ");
private JTextField login = new JTextField(20);
private JPasswordField senha = new JPasswordField(20);
private JButton entrar = new JButton("Entrar");
private Icon back = new ImageIcon(getClass().getResource("/br/edu/anglo/JLABRO/imag/back.jpg"));
private JLabel backg = new JLabel(back);
private JPanel p = new JPanel();
private Layout lay = new Layout();

public Tela_login(){
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setSize(560,480);
	setLocation((int) Centralizar.meioframes(560, 480).getWidth(),(int) Centralizar.meioframes(560, 480).getHeight());
	setVisible(true);
	
	backg.setBounds(Centralizar.meioback(560, 480));
	add(backg);
	lay.addComponent(p, 0, 0, 3, 1, lay.horizontal);
	p.setBackground(Color.BLACK);
	p.add(log); p.add(login); p.add(sen); p.add(senha); p.add(entrar);

}

}[/code]

package br.edu.anglo.JLABRO.gui;

import java.awt.Color;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.BorderFactory;
import javax.swing.JPanel;

 public class Layout extends JPanel {  
	   
	     // Definição do Layout e constraints do Layout  
	     private GridBagLayout layout;  
	     private GridBagConstraints constraints;  
	     public final int horizontal = GridBagConstraints.HORIZONTAL;  
	     public final int both = GridBagConstraints.BOTH;  
	   
	     //Construtor do objeto (como o mesmo nome da classe)  
	     public Layout(){  
	        layout = new GridBagLayout();  
	        setLayout(layout);  
	        constraints = new GridBagConstraints();  
	        constraints.weightx = 0;  
	        constraints.weighty = 0;  
	        constraints.insets = new Insets(5,5,5,5);  
	     }  
	   
	     // Método que posiciona o componente no Frame  
	     public void addComponent(Component comp, int row, int column, int width, int height, int fill){  
	         constraints.fill = fill;  
	         constraints.gridx = column;  
	         constraints.gridy = row;  
	         constraints.gridwidth = width;  
	         constraints.gridheight = height;  
	         layout.setConstraints(comp, constraints);  
	         add(comp);  
	     }  
	   
	 }  

Bom dia Wellingtonfoz.

Para fazer o que pretende, primeiro voce tem que desenhar a imagem no fundo (background) do JFrame e não de um JLabel, visto que quando voce adiona o JLabel no Frame, e toma todo o seu conteúdo não deixando espaço para os demais componentes, isto é, de acordo com layout que voce está usando.

Como eu percebo que voce utiliza o GridBagLayout em uma das classes que eu desenvolvi, neste caso necessário é que se faça algumas correções no seu código.

1º) Utilize JDialogs para o Login e não JFrames, isto porque os JDialogs voce pode abrí-los de forma modal.

2º) Voce criou o Layout, porém nem sequer o adicionou no método setContentPane(…).

Acrescente estes códigos na sua classe Layout:


package br.edu.anglo.JLABRO.gui;  
  
import java.awt.Color;  
import java.awt.Component;  
import java.awt.GridBagConstraints;  
import java.awt.GridBagLayout;  
import java.awt.Insets;  
  
import javax.swing.BorderFactory;  
import javax.swing.JPanel;  
  
public class Layout extends JPanel {    
         
         // Definição do Layout e constraints do Layout    
         private GridBagLayout layout;    
         private GridBagConstraints constraints;
         
         // Acrescente este atributo
         private Dimension size;
    
         public final int horizontal = GridBagConstraints.HORIZONTAL;    
         public final int both = GridBagConstraints.BOTH;    
         
         //Construtor do objeto (como o mesmo nome da classe)    
         public Layout(){    
            layout = new GridBagLayout();    
            setLayout(layout);    
            constraints = new GridBagConstraints();    
            constraints.weightx = 0;    
            constraints.weighty = 0;    
            constraints.insets = new Insets(5,5,5,5);    
         }    
         
         // Método que posiciona o componente no Frame    
         public void addComponent(Component comp, int row, int column, int width, int height, int fill){    
             constraints.fill = fill;    
             constraints.gridx = column;    
             constraints.gridy = row;    
             constraints.gridwidth = width;    
             constraints.gridheight = height;    
             layout.setConstraints(comp, constraints);    
             add(comp);    
         }

         // Acrescente estes tres métodos.
         public Dimension getDimension(){
             return size;
         }

         public void setDimension(int w, int h){
             size = new Dimension(w,h);
             setPreferredSize(size);
             setMinimumSize(size);
             setMaximumSize(size);
             setSize(size);
         }

         public static ImageIcon getImageIcon(String filename){
             return new ImageIcon(getClass().getResource("/br/edu/anglo/JLABRO/imag/"+filename);
         }    
         
}

Agora lá no Frame Login que vai ser um JDialog, voce configura assim:


public class FrameLogin extends JDialog implements ActionListener, KeyListener {

    private JTextField txtlogin;
    private JPasswordField txtpassword;
    private JButton btnok, btncancel;
    private String mens;
    private Boolean response = false;
    private int accessdenied = 3;

    public FrameLogin(JFrame parent){
        // Aqui voce configura o JDialog como modal.
        super(parent, "Acesso ao programa Cadastro de Visitante", true);

        // Aqui voce adicona o Layout no JDialog;
        setContentPane(getContainer());

        // Aqui voce configura o JDialog para ser retirado da memória quando for fechado.
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        // Aqui redesenha o JDialog
        pack();

        // Aqui centraliza o JDialog
        setLocationRelativeTo(this);
        
        // Aqui torna o JDialog visível
        setVisible(true);
    }
    
    public Layout getContainer(){
        /*  Aqui voce coloca a imagem no fundo 
             do layout que voce está criando
             pois é ele que vai tomar toda
             a extensão do Panel do JDialog  */
        Layout container = new Layout() {
            @Override
            public void paintComponent (Graphics g) {
               super.paintComponents(g);                         
               Dimension dDesktop = this.getSize();
               double width = dDesktop.getWidth();
               double height = dDesktop.getHeight();
               Image img = Layout.getImage("back.jpg");
               Image background = new ImageIcon(img.getScaledInstance((int)width, (int)height, 1)).getImage();
               g.drawImage(background, 0, 0, this);
            }           
       };
       // Aqui voce dimensiona o Layout 
       container.setDimension(300, 300);

       // Aqui voce cria uma fonte padrão para os componentes
       Font font = new Font("Tahoma", 0, 14);

       // O demais componentes ficam por cima da imagem
       JLabel lblogin = new JLabel("Digite o seu login......");
       lblogin.setFont(font);
       container.addComponent(lblogin,4,0,1,1,container.horizontal);
       txtlogin = new JTextField(10);
       txtlogin.setFont(font);
       txtlogin.addKeyListener(this);
       container.addComponent(txtlogin,4,1,3,1,container.horizontal);
       JLabel lblpassword = new JLabel("Digite a sua senha.....");
       lblpassword.setFont(font);
       container.addComponent(lblpassword,5,0,1,1,container.horizontal);
       txtpassword = new JPasswordField(10);
       txtpassword.setFont(font);
       txtpassword.addKeyListener(this);
       container.addComponent(txtpassword,5,1,3,1,container.horizontal);
       btnok = new JButton("OK");
       btnok.addActionListener(this);
       container.addComponent(btnok,6,0,2,1,container.horizontal);
       btncancel = new JButton("Cancelar");
       btncancel.addActionListener(this);
       container.addComponent(btncancel,6,2,2,1,container.horizontal);
       return container;
    }

    @Override
    public void keyTyped(KeyEvent e){
        // Método não utilizado
    }

    @Override
    public void keyPressed(KeyEvent e){
        if (e.getKeyCode()==KeyEvent.VK_ENTER){
            if (e.getSource()==txtlogin){
                txtpassword.requestFocusInWindow();
            } else if (e.getSource()==txtpassword){
                btnok.doClick();
            }
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        txtlogin.setText(txtlogin.getText().toUpperCase());
    }

    public Boolean getResponse() {
        return response;
    }

    public void setResponse(Boolean response) {
        this.response = response;
    }

}

Desisti do GridBagLayout(), setei o layout(null) e fui adicionando elementos atraves de bounds
achei bem mais facil… =S

O post já é antigo, o cara já desistiu disso, mas vai ter muita gente por ai com uma duvida parecida, então vou deixar minha solução pra esse probleminha…

É só usar três containers, dois como BorderLayout e outro como GridLayout

Container principal = getContentPane();
principal.setLayout(new BorderLayout());

JPanel container1 = new JPanel();
container1.setLayout(new GridLayout(4,1));
principal.add(BorderLayout.EAST, container1);

JPanel container2 = new JPanel();
container2.setLayout(new BorderLayout());
principal.add(BorderLayout.CENTER, container2);

o que eu fiz foi adicionar um container a a direita(EAST) do container principal, setei com GridLayout e depois adicionei outro container no posição central(CENTER) do container principal, depois disso é só adicionar os botões no container1 e parti pro abraço.

Exemplo:

container1.add(new JButton("Botão 1"));
container1.add(new JButton("Botão 2"));
container1.add(new JButton("Botão 3"));
container1.add(new JButton("Botão 4"));