Posicionamento de JTextField

8 respostas
A

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

V

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/

A

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:

J

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.

A

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()

J

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

V

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.

C

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!!!!!!

V

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