Tamanho do JTextField

6 respostas
M

Pessoal tenho duas dúvidas sobre JTextField…

Uma é com o seu tamanho…por exemplo: JTextField caixa = new JTextField(8);
Tipo esta instrução não deveria criar um campo de largura de 8 caracteres? Pois é, mas quando aparece ele esta bem maior do que isso…

E a outra dúvida é com relação a largura máxima…Em HTML nós fazemos isso facilmente com MAXLENGHT, em JAVA existe algum método?

Obrigado!

6 Respostas

D

Quanto ao tamanho, dependendo do gerenciador de Layout q vc está utilizando ele vai moldar seus componentes para adaptar-se ao layout escolhido, por exemplo, com o BorderLayout se vc adiciona um JTextField no CENTRO ele vai ocupar o componente inteiro, não importando o tamanho que vc escolheu.

Quanto ao MAXLENGHT, sinto informar q o swing não prevê isso :evil: !!!

Não sei como o pessoal resolve isso, mas eu criei a um tempo atraz um TextField Limitado para solucionar esse problema e até hoje uso ele e nunca deu nada errado!

Gostaria de aproveitar para saber como vcs resolvem isso galera, não sei pq nunca perguntei!

O código ta ai, basta vc instanciar ele assim:

LimitedTextField(n); //onde n é o MaxLength do tipo int.

vc usa o metodo

setMaxLength(n); //onde n é o novo MaxLength do tipo int.

para modificar o MaxLength.

import javax.swing.JTextField;
import java.awt.event.*;

public class LimitedTextField extends JTextField{
	private byte maxLength=0;

	public LimitedTextField(int maxLength){
		super();
		this.maxLength= (byte)maxLength;
		this.addKeyListener(new LimitedKeyListener());
	}
	
	public void setMaxLength(int maxLength){
		this.maxLength= (byte)maxLength;
		update();
	}
	
	private void update(){
		if (getText().length()>maxLength){
			setText(getText().substring(0,maxLength));
			setCaretPosition(maxLength);
		}
	}
	
	public void setText(String arg0){
		super.setText(arg0);
		update();
	}
	
	public void paste(){
		super.paste();
		update();
	}
	
	//Classes Internas
	private class LimitedKeyListener extends KeyAdapter{
		private boolean backspace= false;
		
		public void keyPressed(KeyEvent e){
			backspace=(e.getKeyCode()==8);
		}
		
		public void keyTyped(KeyEvent e){
			if (	!backspace	&&
					getText().length()>maxLength-1){
				e.consume();
			}
		}
	}
}

Espero q te ajude

M

Blz cara! Valeu pelo fonte…

Putz cara mas eu não acredito que não tenha nada neste aspecto no swing…pensando no ponto de vista q até HTML tem isso :o pq justamente numa linguagem tão poderosa como java não tenha algo considerado tão elementar nas outras linguagens como VB, Delphi, etc…

Se realmente não tiver este recurso por favor, gostaria de uma explicação lógica do pq não existe isso…

t+

M

Ae, descobri q aqui no GUJ na área de tutoriais tem um exemplo de como delimitar a quantidade de caracteres e se tem um tutorial isto significa que realmente não tem no swing uma maneira direta…

Em outras palavras, levante as mangas e PROGRAME…hehehe

A menos q alguém saiba de alguma novidade…

Falow!

D

Para fala a verdade quando eu fiz essa classe estava fazendo meu primero programa em Java e ainda não estava acostumado a pesquisar na api então acreditei no q eu li em algum forum pela net.
Talvez até tenha, mas desconheço.

A explicação para seria que até pouco tempo Java para Desktop estava meio que em segundo plano (ou terceiro, quarto…) como consequencia tinhamos uma GUI extremamente pobre comparada com as outras linguagens que não se preocupar em ser multiplataforma e tiram total proveito das APIs gráficas de cada SO, usando recursos exclusivos de cada um. E isso em Java geraria uma incompatibilidade e adeus portabilidade. Então o jeito é ficar com oq existe em comum em cada API.
Mas com certeza poderia ser MUITO melhor.

Mas mesmo assim os esforços para criar uma BOA GUI só começou a ser realmente um esforço a pouco tempo, então o swing ainda tem muito oq amadurecer, e com certeza deve ir se adaptando as necessidades dos desenvolvedores.

Eu só trabalho com swing, conheço praticamente nada de SWT, mas talvéz vc possa achar outros recursos em SWT que possa te ajudar.

Mas francamente, esses pequenos detalhes podem ser resolvidos rapidamente, como com o meu LimitedTextField, que gastei menos tempo pra faze-lo do que gastei pesquisando sobre como limitar um JTextField.

Nunca tive problemas com o swing, tenho algumas GUI boas e bonitas, até agora foi só detalhe que me encheu o saco!

D

qual tutorial?

M

O tutorial vc vai encontrar na área de tutoriais do GUJ, assim q cv clicar no link aparece d cara…

Bom é uma boa explicação essa q vc disse d não ter por motivos de ser muito “novo” o swing…

Criado 19 de agosto de 2003
Ultima resposta 20 de ago. de 2003
Respostas 6
Participantes 2