Posicionamento de JTextField

8 respostas
alisson027

os JTextField ficam jogados na tela estou procurando um modo de fazer com que eles fiquem presos na posição que eu quiser
algo tipo que eu passe os parâmetros x,y e ele se posicione no lugar certo, do jeito que esta eles vem um em seqüencia do outro
qualquer ajuda eu agradeço

import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JComboBox;
public class Formulario extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
		private JTextField nome;
		private JTextField endereco;
		private JTextField cidade;
		private JTextField bairro;
		private JTextField CEP;
		private JComboBox  UF;
		
		
		public Formulario() {
		      
			super( "formulario" );
			
			setLayout( new FlowLayout() );
			nome = new JTextField (20);
			add (nome);
		//	nome.setBounds(100,100,100,100); pelo q eu axei na net seria algo assim mais da errado
			
			setLayout( new FlowLayout() );
			endereco = new JTextField (20);
			add (endereco);
			
			setLayout( new FlowLayout() );
			cidade = new JTextField (20);
			add (cidade);
			
			setLayout( new FlowLayout() );
			bairro = new JTextField (20);
			add (bairro);
			
			setLayout( new FlowLayout() );
			CEP = new JTextField (8);
			add (CEP);

		
	}

}

8 Respostas

ViniGodoy

Aprenda a usar os layoutmanagers.

Alguém pode ser que te dê a sugestão de usar o setLayout(null) e o setBounds. Apesar disso parecer funcionar (e, realmente, vc posiciona os componentes exatamente onde você quer), faz com que as telas não sejam redimensionáveis, nem multiplataforma, nem suportar vários look&feels.

Uma boa é aprender a usar o MigLayout: http://www.miglayout.com/

alisson027

vlw pela ajuda
vou estudar sobre
de inicio esta parecendo bem complicado
mais se tudo fosse fácil perderia a graça
bora estuda :roll:

juno.rr

Olá.
Eu uso o TransparentLayout (https://transparentlayout.dev.java.net/). É muito bom, multiplataforma, mas não testei diferentes LookAndFeels com ele.
É bem simples de usar, já que vc especifica o tamanho e o lugar dos componentes:

panel.setLayout(new TransparentLayout());
// o retângulo especifica a localização e as dimensões do label
panel.add(new JLabel("Rótulo 1"), new Rectangle(5, 5, 100, 20));

Vale a pena testar. Uso ele com o Netbeans e a produtividade aumentou muito.

alisson027

não funcionou aparece o erro

Access restriction: The constructor TransparentLayout() is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\ext\transplayout-1.01.jar

nessa parte do codigo

panel.setLayout(new TransparentLayout()); mais especificamente ainda no new TransparentLayout()

juno.rr

Vc tem acesso completo nesta pasta? Verifique as permissões do windows ou experimente colocar o .jar na pasta do projeto.

ViniGodoy

Eu já tinha ouvido falar nesse layout manager. Para uma aplicação mais séria, ainda acho o MigLayout mais produtivo. E também gosto da alternativa de combinar BorderLayout + GridLayout + FlowLayout, pois também tem boa produtividade (se você usar um editor visual, lógico) e gera um .jar sem dependências, funcional antes da versão 5.

Claudivan

E aí boy?

Para resolver este problema que também enfrentei, eu simplesmente faço o seguinte:
Vamos do começo!
- Suponha que você crie um classe chamada Cadastro e que essa classe extendes JFrame. Feito isso, a classe Cadastro agora é um JFrame, ou seja, todas as propriedades
de JFrame agora estão em Cadastro.
- Já no construtor da classe Cadastro você pode definir valores para uma série de métodos de JFrame como por exemplo, o título(super("String")), o tamanho(setSize(int y, int x)), se a
a janela será redimensionável ou não (setresizable(boolean)), sua localização no seu monitor (setLocationRelativeTo(null), se você setar esse método com null a localização será no centro da tela)
e ainda dá pra definir o Layout da janela.
- Pra fazer o que você quer você pode chamar o método setLayout() e setar ele como null. Assim, você mesmo é quem configura aonde deseja posicionar os seus componentes.
- No seu caso, use a varialvel do componente que você quer posicionar pra chamar o método setBounds(int x, int y, int largura, int altura). Com esse método você além de posicionar
o seu componente na janela escolhe também a sua largura e a sua altura.

Simples não! EX:
public class Cadastro extends JFrame{
        private JLabel lbNome
        private JTextField tfNome;
     
        public Cadastro(){
              super("Teste");
              setLayout(null);
              setSize(500, 400);
              setResizable(false);
              setLocationRelativeTo(null);
              setDefaultCloseOperation(3);

              this.addComponentes();

              setVisible(true);
        }

        private void addComponentes(){
            lbNome = new JLabel("Nome:");
            tfNome = new JTextField();

            lbNome.setBounds(100, 50, 50, 30);
            tfNome.setBounds(160, 50, 120, 30);

           this.getContentPane.add(lbNome);
           this.getContentPane.add(tfNome);
        }
}

Valeuuuu!!!!!!

ViniGodoy

Claudivan:
- Pra fazer o que você quer você pode chamar o método setLayout() e setar ele como null. Assim, você mesmo é quem configura aonde deseja posicionar os seus componentes.

  • No seu caso, use a varialvel do componente que você quer posicionar pra chamar o método setBounds(int x, int y, int largura, int altura). Com esse método você além de posicionar o seu componente na janela escolhe também a sua largura e a sua altura.

Essa sua dica tem os seguintes problemas:

  1. Não gera telas redimensionáveis. E isso é completamente fora do padrão de telas de todos os sitemas operacionais. De fato, o mínimo suporte a isso exige muita programação no null layout;
  2. Não tem suporte multiplataforma. Os layouts podem quebrar até mesmo em variações de um mesmo SO, como do XP para o Vista;
  3. Não suporta múltiplos look&feel;

Usar o null layout é considerado uma péssima prática de programação, e não é recomendado que se faça isso em nenhuma aplicação Swing séria.

Criado 28 de agosto de 2010
Ultima resposta 31 de ago. de 2010
Respostas 8
Participantes 4