Problema com GridBagLayout

7 respostas
victorhugo.sfs

Bom galera meu problema é com o GridBagLayout, eu usava o setBounds para posicionar os compoentes, só que me falaram que pode dar problemas posicionar com setBounds em alguns sistemas operacionais, ai optei em usar o GridBagLayout, só que não está posicionando corretamente, eu crei um JPanel adicionei o layout "GridBagLayout" como layout e tentei posicionar outro JPanel dentro dele, só que esse JPanel não sai do meio.

Bom aqui estão os códigos

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import org.jdesktop.swingx.JXFrame;
/**
 *
 * @author Victor Hugo
 */
public class ProcuraProdutos extends Conexao {
 
    private Statement stmt;
    private ResultSet rs;
    private ResultSetMetaData rsmd;
 
    private ImageIcon imgProcuraProdutos =new ImageIcon("imgProcuraProdutos.jpg");
    private JLabel lblImg =new JLabel(imgProcuraProdutos);
 
    private JLabel lblProcuraCpf =new JLabel("Entre com a descrição do produto:");
    private JFormattedTextField txtProcuraDesc;
 
    private JTable tableProcuraProdutos;
    private DefaultTableModel model =new DefaultTableModel();
 
    private JScrollPane scroll =new JScrollPane();
 
    private JButton btnPesquisar =new JButton("Pesquisar");
    private JButton btnOk =new JButton("Ok");
    private JButton btnCancelar1 =new JButton("Cancelar");
 
    private JPanel panelProcuraProdutos =new JPanel();
    private JPanel panelTop =new JPanel();
    private JPanel panelTable =new JPanel();
    private JPanel panelBtn =new JPanel();
 
    private GridBagLayout layout =new GridBagLayout();
    private GridBagConstraints gbc =new GridBagConstraints();
 
    //Construtor
    public ProcuraProdutos() {
        inicializeProcuraProdutos();
    }
 
    //Método de contrução do ProcuraProdutos
    public void inicializeProcuraProdutos() {
        JXFrame.setDefaultLookAndFeelDecorated(true);
        final JXFrame frameProcuraProdutos =new JXFrame();
        frameProcuraProdutos.setTitle("ProcuraClientes");
        frameProcuraProdutos.setSize(700, 400);
        frameProcuraProdutos.setLocation(200, 200);
 
        panelProcuraProdutos.setLayout(layout);
        panelProcuraProdutos.setBackground(Color.white);
 
        gbc.gridy = 1;
        gbc.gridx = 0;
        gbc.gridwidth = 4;
        panelTop.setBackground(Color.red);
        panelTop.add(lblImg);
        panelProcuraProdutos.add(panelTop, gbc);
 
        frameProcuraProdutos.getContentPane().add(panelProcuraProdutos);
        frameProcuraProdutos.setDefaultCloseOperation(JXFrame.EXIT_ON_CLOSE);
        frameProcuraProdutos.setVisible(true);
 
        }
 
    public static void main(String[] args) {
        new ProcuraProdutos();
    }
 
 
}

Quem poder me ajudar, desde já agradeço

7 Respostas

renzonuccitelli

Eu sempre uso o GroupLayout. Dê uma olhada nele no site da SUN…

edineimanica

O gridBagLayout funciona como uma tabela…
Veja no exemplo abaixo como funciona para mostrar por exemplo:
Nome: Testes
Fone: TesteFone

panel.setLayout(new GridBagLayout());
panel.add(new JLabel("Nome"), new GridBagConstraints(0,0,1,1,0.0,0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0),0,0));
panel.add(new JLabel("Testes"), new GridBagConstraints(1,0,1,1,0.0,0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0),0,0));
panel.add(new JLabel("Fone"), new GridBagConstraints(0,1,1,1,0.0,0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0),0,0));
panel.add(new JLabel("TesteFone"), new GridBagConstraints(1,1,1,1,0.0,0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0),0,0));

Eu fiz direto aqui sem utilizar o NetBeans, mas acho que não esqueci de nada…

att

renzonuccitelli

Por isso eu prefiro usar o Group, pq para inserir um item no meio de um layout GridBag, a não ser que vc tenha colocado variáveis para as coordenadas, via ter que alterar muito coisa. Já no Group é só colocar o elemento no local desejado, relativo aos demais componentes. Mas enfim, gosto é gosto…

M

Você acha que tem problemas com GridBagLayout?

Veja isso (para descontrair, se quiser realmente uma solução, não perca seu tempo…):

http://madbean.com/anim/totallygridbag/

Agora, quanto ao seu problema, sugiro que procure um gerenciador de leiaute mais simples, como os sugeridos acima.

edineimanica

Eu gosto de trabalho com o GridBagLayout…
Após você ter uma experiência boa, você faz o que quiser com ele…

thundercas

Cara… Odeio GridBagLayout… Já bati muita cabeça e não saiu coisa boa… Prefiro utilizar uma concatenação de JPanels… Tipo, defino o layout do JFrame como GridLayout e os painels como FlowLayout(FlowLayout.LEFT)… Já era, você monta cada linha com um painel e o negócio fica pronto rapidão :stuck_out_tongue:

T

Eu em particular não gosto muito do gerenciador de layouts do NetBeans (acho que você morre doido se não for para usar para um protótipo bem meia-boca).

Prefiro usar isto aqui:

MiG Layout

Esse MiGLayout é excelente para formulários, o que é normalmente o que você quer fazer.

O fato de o autor desse programa também pilotar caças MiG não é motivo para você não experimentá-lo :stuck_out_tongue: - existem nerds e nerds.

Criado 20 de dezembro de 2008
Ultima resposta 22 de dez. de 2008
Respostas 7
Participantes 6