JTextField - Definir tamanho e não permitir caractere

6 respostas
P

Bom dia a todos… gostaria de saber, como faço para definir o tamanho máximo permitido em um textfield ? (não achei nas propriedades)

e também, gostaria de saber, como bloquear que o usuário digite uma determinada caractere no campo… por exemplo, um espaço…

Obrigado a todos… abraços

6 Respostas

R

Olá,

talvez isso ajude
http://www.guj.com.br/posts/list/9672.java

http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFormattedTextField.html

[]´s

L

Oi,
para limitar a quantidade de digitos de um JtextField, você deve usar o Document.

código:

//
// Limitar os digitos para 5.
//
textfield.setDocument(new FixedLengthDocument(5));

Para esolher os digitos.. de uma olhada na classe passado por um amigo aqui do guj... ela pode ajudar...

Escolher os digitos de um textfield, posição 1 -> digito tal:

import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument; 
import calendario.Hora;
 
public 
class			CampoHoras 
	extends		JTextField 
{ 
	/**
 	 * This method initializes
 	 * 
 	 */
 	private 
	class			Pt 
		extends PlainDocument 
	{
 		public
		void			insertString	
							(
								int offset, 
								String str, 
								AttributeSet as
							)
			throws		BadLocationException 
		{
 			super.insertString(offset, textoValidado(str, offset), as);
 		}
 
 		private 
		String			textoValidado
							(
								String str, 
								int cursor
							) 
		{
 			
			String 
			texto			=	CampoHoras.this.getText();

			//
 			// o novo texto depois de aplicada a inserção
			//
 			String 
			novoTexto		=	(texto.substring(0, cursor) + str + texto.substring(cursor, texto.length()));

			//		
 			// no primeiro digito tem que ser 0,1 ou 2
			//
 			if	(
					novoTexto.length() == 1 
					&& 
					novoTexto.matches("[012]")
				)	
			{	
 				return str;
			}

			//
 			// no 2º digito no caso de o 1º ser 2 o 2º
 			// tem que ser 0,1,2 ou 3
 			if	(
					novoTexto.length() == 2 
					&& 
					novoTexto.matches("[2][0123]")
				)
			{
				//
 				// alem de inserir o que o o uilizador prupôs
 				// insere o caracter divisor de horas
 				return str + ":";
			}
			
			//
 			// ainda no 2º digito no caso de ser 1 ou 0
 			// o 2º digito pode ser qualquer um
 			if	(
					novoTexto.length() == 2 
					&& 
					novoTexto.matches("[01]\\d")
				)
			{
				//
 				// alem de inserir o que o o uilizador prupôs
 				// insere o caracter divisor de horas
 				return str + ":";
			}
			
			//
 			// o 4º digito tem que ser entre 0 e 5
			//
 			if	(
					novoTexto.length() == 4
 					&& 
					novoTexto.matches("[012]\\d:[012345]")
				)
			{	
 				return str;
			}
			
			//
 			// o 5º digito tem que ser um numero quaquer
			//
 			if	(
					novoTexto.length() == 5
 					&& 
					novoTexto.matches("[012]\\d:[012345]\\d")
				)
			{
 				return str;
			}

 			return null;
 		}
 	}
 
 	public CampoHoras() {
 		super();
 		initialize();
 	}
 
 	private void initialize() {
 		Pt pt = new Pt();
 		this.setDocument(pt);
 	}
 
 }

Tchauzin!

P

Obrigado, havia esquecido as expressoes regulares!

L

Oi,
cara ki viajem!!!
desculpas mesmo....
aconteceu de eu usar esse método pois recriei assim... dai só passar ele que funciona..

corrigindo:

faz o seguinte:

* Utilize o JFormattedTextField

* Crie uma variavel MaskFormatter:

public			MaskFormatter 
teste;

* No seu construtor defina (o numero de jogos da velha (###) é a quantidade de digitos):

try 
{
	//
	// criando máscaras
	//
	teste	= new MaskFormatter( "###" );
		
} 
catch ( ParseException exc ) 
{
	exc.printStackTrace();
}

* Na criação do JFormattedTextField você passa a mascar:

io_tf_textfield.setFormatterFactory(new DefaultFormatterFactory(teste));

Assim ira funcionar!!!
desculpas mesmo... viajei

P

obgd lina,

minha heroina :smiley:

D
textIPNovo.setDocument(new Document(5));

resolvido

Criado 16 de fevereiro de 2007
Ultima resposta 22 de fev. de 2007
Respostas 6
Participantes 4