[Dúvida] Posição dos componentes em Janelas Swing

Boas,

Estou tentando criar minha primeira janela em swing com base em um código-fonte completo de uma janela que peguei na internet. Mas o formulario completo(que naum fui eu quem fez) os componentes estão aparecendo direito no noroeste da janela, mas no meu código que escrevi pra ficar no noroeste da janela tbm, os componentes ficam no meio da janela. Não consigo entender o pq não ficam na parte superior. Se alguém puder me ajudar.

Este é o formulário completo que estou olhando o source completo:

E este é como ta o meu formulário com os componentes no meio do formulário:

E o meu código fonte que está com problemas:

[code]
/* Primeira tentativa de criar uma janela
*
*
*/

import java.awt.;
import javax.swing.
;

public class PrimeiraJanela extends JFrame
{
PrimeiraJanela()
{
super(“Programa”);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.getContentPane().setLayout(new GridBagLayout());
//this.setVisible(true);
this.setSize(800,600);
//this.setResizable(true);

  add("Código", new JTextField());
  add("Nome", new JTextField());
  add("Data de Nascimento", new JTextField(), "Telefone", new JTextField());
  //add("E-mail", new JTextField(), "MSN",JTextField(), "ICQ", new JTextField());

}

private void add(String label, JComponent caixaDeTexto)
{
GridBagConstraints constraints = new GridBagConstraints();

  // label não redimensiona
  constraints.fill = GridBagConstraints.NONE;
  // componentes aparecem no topo
  constraints.anchor = GridBagConstraints.NORTHWEST;
  // determina um espaço entre os componentes
  constraints.insets = new Insets(5,5,5,5);
  this.add(new JLabel(label),constraints);
  
  // textfield redimensiona
  constraints.fill = GridBagConstraints.BOTH;
  // textfield cresce 100% no eixo_x ao redimensionar
  constraints.weightx = 1; // 100%
  // textfield ocupará todo o espaço remanescente no eixo_x
  constraints.gridwidth = GridBagConstraints.REMAINDER;
  this.add(caixaDeTexto,constraints);

}

private void add(String label, JComponent caixaDeTexto, String label2, JComponent caixaDeTexto2)
{
GridBagConstraints constraints = new GridBagConstraints();

  // label não redimensiona
  constraints.fill = GridBagConstraints.NONE;
  // componentes aparecem no topo
  constraints.anchor = GridBagConstraints.NORTHWEST;
  
  constraints.insets = new Insets(5,5,5,5);
  
  // label ocupará 1 célula
  constraints.gridwidth = 1;
  // zera redimensionamento do label
  constraints.weightx = 0;
  this.add(new JLabel(label), constraints);
  
  // caixa de texto redimensiona
  constraints.fill = GridBagConstraints.BOTH;
  // caixa de texto ocupará 1 célula
  constraints.gridwidth = 1;
  // caixa de texto aumenta 100% no eixo_x ao redimensionar
  constraints.weightx = 1;
  this.add(caixaDeTexto, constraints);
  
  // label não redimensiona
  constraints.fill = GridBagConstraints.NONE;
  // zera redimensionamento do label
  constraints.weightx = 0;
  this.add(new JLabel(label2), constraints);
  
  // caixa de texto redimensiona
  constraints.fill = GridBagConstraints.BOTH;
  // última caixa de texto ocupa as células que sobrar
  constraints.gridwidth = GridBagConstraints.REMAINDER;
  // caixa de texto redimensiona 100% no eixo_x
  constraints.weightx = 1;
  this.add(caixaDeTexto2, constraints);      

}

public static void main(String args[])
{
JFrame janela = new PrimeiraJanela();
janela.setVisible(true);
}

}[/code]

Se alguém puder me ajudar a resolver este problema fico mto agradecido pq ta complicado…já pesquisei em tudo q é lugar sobre GridBagLayout inclusive no site da Sun, ja joguei código pra todo lado e nada de dar certo…ta difícil…

To apanhando demais pra tentar entender como funciona essas janelas com swing…

tentei começar fazer outra um poko diferente…keria fazer algo parecido com isso:

E depois de kebrar mto a cabeça igual ao decima, o máximo que consegui foi isso aki:

o código fonte é esse:

[code]/*
*

  • Tentativa de Segunda Janela com swing

*/

import javax.swing.;
import java.awt.
;

public class SegundaJanela extends JFrame
{
SegundaJanela()
{
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setLayout(new GridBagLayout());
this.setSize(800,600);

  addNoroeste("Nome", new JTextField());
  addNoroeste("Empresa", new JTextField());
  addSudeste(new JButton("Anterior"), new JButton("Próximo"), new JButton("Cancelar"));

}

private void addNoroeste(String label, JComponent caixaDeTexto)
{
GridBagConstraints posicao = new GridBagConstraints();
posicao.insets = new Insets(5,5,5,5);

  // label não redimensiona
  posicao.fill = GridBagConstraints.NONE;
  // começa na parte superior esquerda
  posicao.anchor = GridBagConstraints.NORTHWEST;
  
  // zera redimensionamento do label
  posicao.weightx = 0;
  posicao.weighty = 0;
  // label ocupa 1 célula
  posicao.gridwidth = 1;
  posicao.gridheight = 1;
  // adiciona o label
  this.add(new JLabel(label),posicao);
  
  // caixa de texto redimensiona
  posicao.fill = GridBagConstraints.HORIZONTAL;
  // seta redimensionamento da caixa de texto
  posicao.weightx = 1;
  posicao.weighty = 1;
  // caixa de texto ocupa célula no eixo_x até o fim
  posicao.gridwidth = GridBagConstraints.REMAINDER;
  posicao.gridheight = 1;
  // adiciona a caixa de texto
  this.add(caixaDeTexto,posicao);

}

private void addSudeste(JComponent componente1, JComponent componente2, JComponent componente3)
{
GridBagConstraints posicao = new GridBagConstraints();
posicao.insets = new Insets(5,5,5,5);

  // começam na parte inferior direita da tela
  posicao.anchor = GridBagConstraints.SOUTHEAST;
  // botões não redimensionam
  posicao.fill = GridBagConstraints.BOTH;
  // zera redimensionamento dos botões
  posicao.weightx = 0;
  posicao.weighty = 0;
  // botões ocupam 1 célula
  posicao.gridheight = 1;
  posicao.gridwidth = 1;
  
  this.add(componente1,posicao);
  this.add(componente2,posicao);
  this.add(componente3,posicao);

}

public static void main(String args[])
{
SegundaJanela programa = new SegundaJanela();
programa.setVisible(true);
}
}[/code]

Eu não sei mais o q fazer ou alterar…já tentei de tudo…
se alguém tiver algum exemplo simples de formulário, janela com swing e GridBagLayout pra mim tentar estudar o código fico agradecido…lembrando q já vi fontes do site da Sun e de um outro site de java.

Grato!

Tente usar BorderLayout como layout do seu JFrame. :idea:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/BorderLayout.html
http://java.sun.com/docs/books/tutorial/uiswing/layout/border.html

Espero ter ajudado! :wink:

GridBagLayout, da uma olhada… http://www.javafree.org/artigo/5792/Tudo-sobre-o-GridBagLayout.html

exemplo q uso:



public void gblayout(int x, int y, int gw, int gh, int f, int anch, int wx,
			int wy, int insets, Component comp, JPanel Painel) {

		p.gridx = x;
		p.gridy = y;
		p.gridwidth = gw;
		p.gridheight = gh;
		p.fill = f;
		p.anchor = anch;
		p.weightx = wx;
		p.weighty = wy;
		p.insets = new Insets(insets, insets, insets, insets);
		((GridBagLayout) (Painel.getLayout())).setConstraints(comp, p);
		Painel.add(comp, p);
	}

gblayout(0, 1, 2, 1, GridBagConstraints.NONE, GridBagConstraints.EAST,
				10, 10, 5, jlCodigoP, jpCadProprietarioP);

		gblayout(2, 1, 3, 1, GridBagConstraints.HORIZONTAL,
				GridBagConstraints.EAST,90, 10, 5, jtCodigoP,
				jpCadProprietarioP);

[quote=phenrique]Boas,

Este é o formulário completo que estou olhando o source completo:

[/quote]

:arrow: Codigo retirado do: http://www.javafree.org/artigo/5792/Tudo-sobre-o-GridBagLayout.html
:arrow: exemplo 2


import java.awt.*;
import javax.swing.*;

public class Construtor_Swing extends JFrame {

    public Construtor_Swing() {
        super("Exemplo2");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        this.getContentPane().setLayout(new GridBagLayout());
       
        add("Código", new JTextField(), "Nascimento", new JTextField());
        add("Nome", new JTextField());
        add("Nome Pai", new JTextField());
        add("Nome Mãe", new JTextField());
        add("RG", new JTextField(), "CPF", new JTextField());
        add("Endereços", new JScrollPane(new JTable()));
        
        this.setSize(600,600);       
    }

    /**
     * Adiciona um label e um componente horizontalmente
     * @param label String que irá aparecer no label
     * @param componente Componente de edição
     */
    public void add(String label, JComponent componente ) {
        GridBagConstraints cons = new GridBagConstraints();
        cons.fill = GridBagConstraints.NONE;
        cons.anchor = GridBagConstraints.NORTHWEST;
        cons.insets = new Insets(4,4,4,4);

        cons.weightx = 0;
        cons.gridwidth = 1;
        this.getContentPane().add(new JLabel(label), cons);
        
        cons.fill = GridBagConstraints.BOTH;
        cons.weightx = 1;
        cons.gridwidth = GridBagConstraints.REMAINDER;
        this.getContentPane().add(componente, cons);
    }
    

    /**
     * Adiciona um label e um componente horizontalmente. O componente ocupará todo o reto da tela
     * @param label String que irá aparecer no label
     * @param componente Componente de edição
     */
    public void add(String label, JScrollPane componente ) {
        GridBagConstraints cons = new GridBagConstraints();
        cons.fill = GridBagConstraints.NONE;
        cons.anchor = GridBagConstraints.NORTHWEST;
        cons.insets = new Insets(4,4,4,4);
        cons.weighty = 1;
        cons.gridheight = GridBagConstraints.REMAINDER;
        
        cons.weightx = 0;
        cons.gridwidth = 1;
        this.getContentPane().add(new JLabel(label), cons);
        
        cons.fill = GridBagConstraints.BOTH;
        cons.weightx = 1;
        cons.gridwidth = GridBagConstraints.REMAINDER;
        this.getContentPane().add(componente, cons);
    }    
    
    /**
     * Adiciona um label, um componente de edição, mais um label e outro componente de edição. Todos 
     * na mesma linha
     * @param label Label 1 
     * @param componente Componente de edição
     * @param label2 Label 2
     * @param componente2 Componente de edição 2
     */
    public void add(String label, JComponent componente, String label2, JComponent componente2) {
        GridBagConstraints cons = new GridBagConstraints();
        cons.fill = GridBagConstraints.BOTH;
        cons.insets = new Insets(4,4,4,4);

        cons.fill = GridBagConstraints.NONE;
        cons.anchor = GridBagConstraints.NORTHWEST;
        cons.weightx = 0;
        cons.gridwidth = 1;
        this.getContentPane().add(new JLabel(label), cons);
        
        cons.weightx = 1;
        cons.gridwidth = 1;
        cons.fill = GridBagConstraints.BOTH;
        this.getContentPane().add(componente, cons);

        cons.fill = GridBagConstraints.NONE;
        cons.weightx = 0;
        cons.gridwidth = 1;
        this.getContentPane().add(new JLabel(label2), cons);
        
        cons.weightx = 1;
        cons.fill = GridBagConstraints.BOTH;
        cons.gridwidth = GridBagConstraints.REMAINDER;
        this.getContentPane().add(componente2, cons);
    }    
    
    public static void main(String[] args ) {
        Construtor_Swing exe = new Construtor_Swing();
        exe.show();      
    }
}

Use o MigLayout é bem mais interessante.

Saudações Mark Ameba,

Vc teria um exemplo simples usando o MigLayout?