Problemas com o setLayout

5 respostas
nefertiti

Tenho a seguinte classe:

class CadastrarGene extends JPanel {

JLabel unigeneLabel,giLabel,nomeLabel,sequenciaLabel;

JTextField unigeneTextField,giTextField,nomeTextField;

JTextArea sequenciaTextArea;

JScrollPane  sequenciaScrollPane;
public CadastrarGene( )   {
    
         setLayout (new GridLayout(4,1));
         
         
       unigeneLabel = new JLabel ("UNIGENE", JLabel.LEFT);
       giLabel = new JLabel ("GI", JLabel.LEFT);
       nomeLabel = new JLabel ("Nome do gene", JLabel.LEFT);
       sequenciaLabel = new JLabel ("Seqüência de DNA", JLabel.LEFT);
       unigeneTextField = new JTextField (10);
      giTextField = new JTextField (10);
       nomeTextField = new JTextField (255);
      sequenciaTextArea = new JTextArea (8,40);
      sequenciaScrollPane = new JScrollPane (sequenciaTextArea);
                         
     
   add(unigeneLabel);
   add(giLabel);
   add(nomeLabel);
   add(sequenciaLabel);
   add(unigeneTextField);
   add(giTextField);
   add(nomeTextField);
   add(sequenciaScrollPane);
     
     
}

public static void main (String [] args)  {
     JFrame CadastrarGene = new JFrame("Cadastrar gene");
     CadastrarGene.addWindowListener (new WindowAdapter()   {
          public void windowClosing (WindowEvent e)   {
                System.exit (0);
                
          }
     });
     


     CadastrarGene.setContentPane(new CadastrarGene ());
     CadastrarGene.setSize(400,90);
     CadastrarGene.setLocation(100,100);
     CadastrarGene.show();
}

}

O layout não está saindo correto, os TextField não estão em seus lugares e ao maximizar a janela os componentes ficam todos deformados. Alguém pode me dizer o q há de errado? Estou iniciando no Java e olhei e não consegui ver o q está errado.

Valeu

Nefertiti

5 Respostas

dsiviotti

Tente isso

add(unigeneLabel);
add(unigeneTextField);
add(giLabel);
add(giTextField);
add(nomeLabel);
add(nomeTextField);
add(sequenciaLabel);   
add(sequenciaScrollPane);

no lugar disso:

add(unigeneLabel);
add(giLabel);
add(nomeLabel);
add(sequenciaLabel);
add(unigeneTextField);
add(giTextField);
add(nomeTextField);
add(sequenciaScrollPane);

Melhora bastante

dsiviotti

Você está criando uma variável “CadrastarGene” com o mesmo nome da Classe, isso não é nada bom. Procure usar algo como “cadastrarGene” simplesmente.

Quanto à maximização, você está usando GridLayout, os componentes ficam do tamanho igual a (Tamanho da Janela/Colunas x Linhas) . Se quer tamanhos fixos use null no lugar de um layout.

No seu layout existem 8, e não 4 células. Por isso você deveria usar

setLayout (new GridLayout(8,1));

no lugar de

setLayout (new GridLayout(4,1));

Acho que vai ficar como você imaginou antes de escrever.

nefertiti

Valeu pelas dicas. Foram muito valiosas!!
Só tenho uma dúvida.: no caso se eu quiser q as dimensões da janela se adaptem aos componentes, vc disse para utilizar null, mas onde?

Valeu

Nefertiti :smiley:

dsiviotti

Aqui

setLayout (null);

Mas assim você tem que definir x/y para cada componente. Mais ou menos assim:

setLayout (null);
    unigeneLabel = new JLabel ("UNIGENE", JLabel.LEFT);
    unigeneLabel.setBounds(10,10,200,20);
    unigeneTextField = new JTextField (10);
    unigeneTextField.setBounds(10, 30, 200, 20);

componente.setBounds(x, y, largura, altura);

nefertiti

Valeu pela dica, resolveu meu problema!!!

Nefertiti

:smiley: :smiley:

Criado 5 de agosto de 2004
Ultima resposta 6 de ago. de 2004
Respostas 5
Participantes 2