JTextField - Definir tamanho e não permitir caractere

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

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

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:

[code]
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);
}

}[/code]

Tchauzin!

Obrigado, havia esquecido as expressoes regulares!

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

[code]
try
{
//
// criando máscaras
//
teste = new MaskFormatter( “###” );

}
catch ( ParseException exc )
{
exc.printStackTrace();
}[/code]

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

io_tf_textfield.setFormatterFactory(new DefaultFormatterFactory(teste));

Assim ira funcionar!!!
desculpas mesmo… viajei

obgd lina,

minha heroina :smiley:

textIPNovo.setDocument(new Document(5));

resolvido