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

2 respostas
S

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:
[img]http://img36.imageshack.us/img36/8158/exemploswing1.jpg[/img]

E este é como ta o meu formulário com os componentes no meio do formulário:
[img]http://img36.imageshack.us/img36/3935/exemploswing2.png[/img]

E aqui está meu código-fonte:

/*  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);
   }
   
   
}

Se alguém puder me ajudar a entender o que fazer para os componentes ficarem no topo(noroeste) fico mto agradecido!

Obrigado

2 Respostas

V

Bom, ja tentou utilizar o layout absolute(nao é o mais aconselhavel), ou border layout?
Ou tu quer fazer as janelas utilizando GridBagLayout?
:smiley:

F

GridBagLayout é chato de trabalhar.
Tenta algum desses
http://www.jgoodies.com/freeware/forms/
http://www.miglayout.com/

Criado 14 de junho de 2009
Ultima resposta 15 de jun. de 2009
Respostas 2
Participantes 3