Mascara numerica, problema nao resolvido nem com um monte de topico sobre isso

8 respostas
laserista

Pessoal,

Tenho o seguinte:

JFormattedTextFieldQuantSegEdit = new javax.swing.JFormattedTextField( new javax.swing.text.MaskFormatter("#####"));

Porém nao sei por que diabos ele só permite os exatos 5 digitos, quando o que eu queria era até 5 dígitos.

Digito de [1,4] dig dou o TAB e o canto zera.

Alguém poderia me explicar o que está acontecendo ?

Valeu desde já ! :wink:

8 Respostas

wilcorrea

Oi laserista,

Na verdade está acontecendo exatamente o que vc mandou que acontecesse…hehe…
Pra fazer o que vc quer vc teria que setar uma propriedade do seu JTextField chamada Document.

A classe abaixo faz o que vc está precisando. Ela limita a quantidade de caracteres que o campo de entrada pode receber.

package ....seu papackage;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class DocumentoNumericoDeTamanhoLimitado extends PlainDocument {

	private static final long serialVersionUID = -4194646387532270185L;

	private int iMaxLength;

	public DocumentoNumericoDeTamanhoLimitado (int maxlen) {
		super();
		iMaxLength = maxlen;
	}

	public void insertString(int offset, String str, AttributeSet attr)
			throws BadLocationException {
		if (str == null)
			return;
		char digito;
		boolean numerico = true;
		
		for (int i = 0; i < str.length(); i++) {
			digito = str.charAt(i);

			if (!Character.isDigit(digito)) {
				numerico = false;
				break;
			}
		}

		if ((numerico)&&(iMaxLength <= 0)){
			super.insertString(offset, str, attr);
			return;			
		}

		int ilen = (getLength() + str.length());
		if ((numerico)&&(ilen <= iMaxLength)) // se o comprimento final for menor...
			super.insertString(offset, str, attr); // ...aceita str
	}
}

Para usar fica assim

//	 Dados pessoais
	private JTextField getJTextNome() {
		if (jTextNome == null) {
			jTextNome = new JTextField();

			->>>jTextNome.setDocument(new DocumentoDeTamanhoFixo(5));<<<-

			jTextNome.setBounds(new Rectangle(87, 30, 233, 20));
			jTextNome.setText("");
		}
		return jTextNome;
	}

Neste caso só poderão ser inseridos 5 caracteres em jTextNome.
Espero ter ajudado…
[ ]s

wilcorrea

E ai deu certo??!!

[]'s

thickbarney

wilcorrea,

pra q serve isso aki ?

laserista

wilcorrea:
E ai deu certo??!!

[]'s

Funcionou ! :wink:

wilcorrea

Então, isso ai é usado no eclipse quando se extende uma classe…

Não sei ao certo porque…me pareceu ser uma referência, tipo um código para a nova classe…

Mas infelizmente não sei te informar como funciona exatamente. O eclipse da um warning, eu mando ele arrumar e ele me aparece com isso ai…uhauahuauhuauhau

Se tirar, aparece apenas um warning dizendo que não foi gerado o SerialVersionID para esta compilação(seja lá o que isto quer dizer), pelo sim, pelo não eu ponho…

Valeu

[]'s

Ataxexe

Esse serialversionUID é o número serial da classe, usado para compatibilidade na serialização.

Digamos que você não declare esse número serial e serialize a classe no seu hd. Se você alterar alguma coisa na classe e tentar desserializar, uma exceção será lançada indicando incompatibilidade das classes. O uso desse número é para garantir que as classes sejam compatíveis.

Exemplo:

Se você serializar uma instância desta classe,

class Classe implements Serializable { private String campo; }

alterar seu código para

class Classe implements Serializable { private String campo; private String outroCampo; }

e tentar desserializar, será lançada uma exceção.

Para que não seja lançada a exceção, você declara o serialVersionUID.

O eclipse gera esse warning para qualquer classe serializável. Você pode remover esse warning nas preferências do compilador.

thickbarney

e eu posso colocar tipo qqer numero q eu quiser ??

tipo 1234

Ataxexe

Sendo um long, pode sim.

Criado 8 de março de 2008
Ultima resposta 14 de mar. de 2008
Respostas 8
Participantes 4