Exibição JFrame

9 respostas
R

Galera, estou começando com Swing e preciso de uma ajuda básica.

Tenho algo assim:
[img]http://nfe2.boldcron.com.br/cockpit/common/imagem3.JPG[/img]

Um JPanel está ao LADO do outro.
Preciso deles ABAIXO um do outro.

Existem um método que ajuste isso de maneira organizada?
Eu diminui o tamanho da janela, mas não ficou bom.

Segue código caso ajude.

import javax.swing.*;

public class Formulario {
	private JFrame frame;
	private JPanel panel;
	private JLabel nome, tel;
	private JTextField nome_tam, tel_tam;
		
	public Formulario() {	
		
		panel = new JPanel();
		
		panel.add(new JLabel("Nome: ", SwingConstants.LEFT));
		nome_tam = new JTextField(20);
		panel.add(nome_tam);
		panel.add(new JLabel("Telefone: ", SwingConstants.LEFT));
		tel_tam = new JTextField(20);
		panel.add(tel_tam);
		
		frame = new JFrame("Agenda");
		frame.add(panel);
		
		frame.pack();
		frame.setVisible(true);
	}
	
	public static void main (String args[]) {
		Formulario form = new Formulario();
	}
}

Obrigado!

9 Respostas

S

http://java.sun.com/docs/books/tutorial/uiswing/components/layeredpane.html

Boa leitura :wink:

L

Dá uma pesquisada sobre layouts de componentes, tipo, borderLayout, gridLayout, gridBaglayout, FlowLayout, etc…
Um desses aí vai se encaixar para resolver seu problema

peaga

Para você organizar os seus componentes você precisa estudar sobre Layouts, assim como o nosso amigo citou, vou te dar uma ajuda no primeiro momento, mas é só para você entender melhor.

Eu utilizer o BorderLayout com o FlowLayout, são uns dos mais basicos LayoutManager que tem, entao eu aconselho que depois de estar manjando estes tente avançar para alguns mais complexos como GridBagLayout (sendo o mais completo).

package ajuda.guj;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
   
public class Formulario extends JFrame{  
     private JFrame frame;  
     private JPanel panel1;  
     private JPanel panel2;  
     private JLabel nome, tel;  
     private JTextField nome_tam, tel_tam;  
     private BorderLayout borderLayout;  
     private FlowLayout flowLayout;
     
     public Formulario() {     
           
         super("Agenda!");
    	 panel1 = new JPanel();  
    	 panel2 = new JPanel();
         borderLayout = new BorderLayout();
         setLayout(borderLayout);
         
         flowLayout = new FlowLayout();
         
         add(panel1, BorderLayout.NORTH);
         add(panel2, BorderLayout.SOUTH);
         
         panel1.setLayout(flowLayout);        
         panel2.setLayout(flowLayout);        
         panel1.add(new JLabel("Nome: "), BorderLayout.NORTH);  
         nome_tam = new JTextField(20);
         panel1.add(nome_tam, BorderLayout.NORTH);  
         panel2.add(new JLabel("Telefone: "), BorderLayout.SOUTH);  
         tel_tam = new JTextField(20);  
         panel2.add(tel_tam, BorderLayout.SOUTH);  
           
         pack();  
         setVisible(true);  
     }  
       
     public static void main (String args[]) {  
         Formulario form = new Formulario();  
     }  
}

Oque eu fiz no seu codigo foi basicamente separar os dois campos em panes diferentes, setar o Layout deles para organizar os componentes dentro dele ( Label e TextField), e depois setar o Layout no Frame para poder organizar os JPanels.

Segue um link com conteudo muito bom sobre Layout:
http://www.javafree.com.br/javabb/viewtopic.jbb?t=5792

http://java.sun.com/docs/books/tutorial/uiswing/components/index.html

Bons Estudos!

R

Ainda não tive tempo de ler os artigos. Entretanto testei esse último código e ainda está aparecendo um Label do lado do outro. Como de início.

peaga

Eita, você tirou o package to codigo neh?
deveria estar funcionando!

R

peaga:
Eita, você tirou o package to codigo neh?

Sim, retirei.

Já li alguns métodos p/ fazer o que eu preciso, porém todos não funcionam, da mesma maneira que desse código que você mandou.
Vale lembrar que agora dessa maneira, os JLabel sequer aparecem de início, é necessário eu clicar no botão maximar para eles apareçam, mas ainda sim aparecem um ao LADO do outro.

Code ser algo extra código?

peaga

Você esta usando Eclipse? versâo do JDK?
Não sei se poder ser isso!

R

Eclipse SDK.

R

É, realmente está complicado.
Inclui agora 2 botões, também estão todos na mesma linha.
Já tentei com FlowLayout e GridBagLayout e não funciona.

Uma coisa que esta me deixando confuso…
Tenho o código aqui de um colega, ele está utilizando Container ao invés de JFrame.

No código dele funciona o FlowLayout

Container container = getContentPane(); container.setLayout(new FlowLayout(0, 80, 8));

No meu código com JPanel não funciona

frame = new JFrame("Agenda"); frame.setLayout(new FlowLayout(0, 80, 8));

Quando utilizar JFrame e Container?
Outra coisa, notei que para esse tipo criação de formulários, o pessoal costuma fazer

minhaClasse extends JFrame

É o mais ideal?

Criado 24 de julho de 2008
Ultima resposta 24 de jul. de 2008
Respostas 9
Participantes 4