Dúvida Swing - GridBagLayout

Fala galera, beleza??

To rachando a cabeça aqui e não to conseguindo progredir heheh… Preciso montar uma tela com uma figura ao lado esquerdo e, ao lado direito, o Login, Senha e 3 botões. Não consigo de jeito nenhum montar isso… Apelei para GridBagLayout, mas não ta dando certo…

Alguém pode me ajudar???

Segue o código…

    public void carregaTela(){
    	cons = new GridBagConstraints();
    	panelPrincipal = new JPanel();
    	panelFigura = new JPanel();
    	labelFigura = new JLabel(new ImageIcon("fundo.jpg"));
    	labelUsuario = new JLabel("Usuário:");
    	labelSenha = new JLabel("Senha:");
    	textUsuario = new JTextField(10);
    	passSenha = new JPasswordField(10);
    	buttonCadastrar = new JButton("Cadastrar");
    	buttonConfirmar = new JButton("Confirmar");
    	
    	panelFigura.add(labelFigura);
    	panelPrincipal.add(labelUsuario);
    	panelPrincipal.add(textUsuario);
    	panelPrincipal.add(labelSenha);
    	panelPrincipal.add(passSenha);
    	panelPrincipal.add(buttonCadastrar);

    	cons.gridx = 0;
        cons.weightx = 1;   
        cons.weighty = 1;  
        cons.fill = GridBagConstraints.BOTH;
        cons.insets = new Insets(4,4,4,4); 
        
    	this.add(panelFigura, cons);

    	cons.gridx = 2;
    	this.add(panelPrincipal, cons);
    	
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	this.setSize(350,250);
    	
    	
    }

Obrigado!!!

Mano, usa o FormLayout do JGoodies

Em java temos varios layouts, e temos que usa-los em conjunto para se fazer boas UI.

no teu caso por exemplo, tente assim, no panel ou JFrame principal tu seta Borderlayout, ai coloca um panel em BorderLayout.LINE_START, e outro em BorderLayout.LINE_CENTER, no line_start tu coloca tua figura, e no outro vc seta o layout que quiser e coloca seus componentes.

Nao pode se prender e achar que vai resolver tudo com um unico layout, tem que usar varios em conjunto.

Se você não vai usar o NetBeans, pode usar com um layout ‘nulo’ onde você define as posições dos elementos:

Use alguma outra coisa. O GridBagLayout não é feito para ser usado por seres humanos nem por editores gráficos. Em suma, se você precisar efetuar a manutenção de algum código que algum ET conseguiu escrever com GridBagLayout, use algum outro layout.
Recomendo o uso do MigLayout, ou do “null layout” (Eclipse VE) ou do “absolute layout” (NetBeans).

E como de costume, veja esta animação em Flash:
Totally GridBag

Bom Galera, agradeço a ajuda de todos, mas acabei optando pelo Visual Editor.

Agora, estou com uma dúvida.

Eu montei a tela no Visual Editor e tudo legal… Sò que, não consigo fazer com que minha classe principal carregue a tela que montei. O Eclipse criou diversos Getters e Setters dentro da Visual Class, como faço para montar a tela através desses Getters e Setters??

Desculpem se a pergunta é besta, mas fiquei perdidinho… = / …

Agradeço qualquer ajuda, abraço a todos…

Experimente criar uma outra “Visual Class” (JFrame) no Eclipse, mas marque que quer que o método “main” seja gerado. Veja o código que ele gerou de diferente no “public static void main”, entenda o que ele quer fazer, modifique-o e copie-o para seu código.

thingol,

Quando marco para gerar os códigos, ele trás apenas a estrutur do método Main, ele não inclui os componentes conforme eu vou montando a tela… Ou seja, ele trás o main declarado em branco…

Galera,

Dei uma chamada no getJFrame(), mas aparece apenas o JFrame em branco, alguém poderia me ajudar encarecidamente? ^^

Segue o código, obrigado!!!

public class TelaDeLogin {

	private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="61,21"

	private JPanel jContentPane = null;

	private JPanel jPanel = null;

	private JPanel panelFigura = null;

	private JPanel panelDados = null;

	private JLabel labelFigura = null;

	private JLabel labelTitulo = null;

	private JLabel labelUsuario = null;

	private JLabel labelSenha = null;

	private JTextField textUsuario = null;

	private JPasswordField passSenha = null;

	private JButton buttonEntrar = null;

	private JButton buttonRegistrar = null;

	private String usuario;

	private char[] senha;

	AlunoBanco aluno;
	JFrame a;

	public TelaDeLogin() {
		a = this.getJFrame();
	}

	private JFrame getJFrame() {
		if (jFrame == null) {
			jFrame = new JFrame();
			jFrame.setSize(new Dimension(511, 307));
			jFrame.setVisible(true);
			jFrame.setContentPane(getJContentPane());
		}
		return jFrame;
	}

	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJPanel(), BorderLayout.CENTER);
		}
		return jContentPane;
	}

	private JPanel getJPanel() {
		if (jPanel == null) {
			labelTitulo = new JLabel();
			labelTitulo.setText("Login de Usuário");
			labelTitulo.setFont(new Font("Dialog", Font.BOLD, 14));
			labelTitulo.setBounds(new Rectangle(26, 3, 131, 23));
			jPanel = new JPanel();
			jPanel.setLayout(null);
			jPanel.add(getPanelFigura(), null);
			jPanel.add(getPanelDados(), null);
		}
		return jPanel;
	}

	private JPanel getPanelFigura() {
		if (panelFigura == null) {
			labelFigura = new JLabel();
			labelFigura.setText("JLabel");
			labelFigura.setIcon(new ImageIcon(
					"F:/Java/WorkSpace/Projeto_Cefet/fundo.jpg"));
			labelFigura.setName("labelFigura");
			panelFigura = new JPanel();
			panelFigura.setLayout(new CardLayout());
			panelFigura.setBounds(new Rectangle(60, 71, 146, 131));
			panelFigura.add(labelFigura, labelFigura.getName());
		}
		return panelFigura;
	}

	private JPanel getPanelDados() {
		if (panelDados == null) {
			labelSenha = new JLabel();
			labelSenha.setBounds(new Rectangle(12, 59, 50, 18));
			labelSenha.setText("Senha:");
			labelUsuario = new JLabel();
			labelUsuario.setBounds(new Rectangle(11, 34, 50, 21));
			labelUsuario.setText("Usuário:");
			panelDados = new JPanel();
			panelDados.setLayout(null);
			panelDados.setBounds(new Rectangle(207, 72, 215, 130));
			panelDados.add(labelTitulo, null);
			panelDados.add(labelUsuario, null);
			panelDados.add(labelSenha, null);
			panelDados.add(getTextUsuario(), null);
			panelDados.add(getPassSenha(), null);
			panelDados.add(getButtonEntrar(), null);
			panelDados.add(getButtonRegistrar(), null);
		}
		return panelDados;
	}

	private JTextField getTextUsuario() {
		if (textUsuario == null) {
			textUsuario = new JTextField();
			textUsuario.setBounds(new Rectangle(72, 35, 98, 21));
		}
		return textUsuario;
	}

	private JPasswordField getPassSenha() {
		if (passSenha == null) {
			passSenha = new JPasswordField();
			passSenha.setBounds(new Rectangle(72, 59, 98, 20));
		}
		return passSenha;
	}

	private JButton getButtonEntrar() {
		if (buttonEntrar == null) {
			buttonEntrar = new JButton();
			buttonEntrar.setBounds(new Rectangle(8, 87, 90, 21));
			buttonEntrar.setText("Entrar");
		}
		return buttonEntrar;
	}

	private JButton getButtonRegistrar() {
		if (buttonRegistrar == null) {
			buttonRegistrar = new JButton();
			buttonRegistrar.setBounds(new Rectangle(104, 86, 104, 22));
			buttonRegistrar.setText("Registre-se");
		}
		return buttonRegistrar;
	}
}

Galera, consegui resolver…

Foi só colocar o frame.pack() e frame.setSize() no Construtor ^^

Valeu pela ajuda, abraços