jFormattedTextField com quantidade ilimitada de catacteres

3 respostas
mizumoto

Pessoal,

Estou tentando restringir a inserção de caracteres em uma jFormattedTextField a um determinado conjunto de caractéres em específico. Porém eu gostaria que a quantidade de caractéres no campo ficasse ilimitada.
Não sei se isso é o mais correto a se fazer, mas eu estou tentando usar um MaskFormatter, porém não consigo usar o MaskFormatter sem limitar a quantidade de caracteres para o campo.
Alguém poderia me ajudar a resolver esse problema?

Obrigado,

3 Respostas

S

mizumoto:
Pessoal,

Estou tentando restringir a inserção de caracteres em uma jFormattedTextField a um determinado conjunto de caractéres em específico. Porém eu gostaria que a quantidade de caractéres no campo ficasse ilimitada.
Não sei se isso é o mais correto a se fazer, mas eu estou tentando usar um MaskFormatter, porém não consigo usar o MaskFormatter sem limitar a quantidade de caracteres para o campo.
Alguém poderia me ajudar a resolver esse problema?

Obrigado,

sim claro, poste seu código e mostre o erro que ajudaremos

agora advinhar fica meio difícil.

G

Cara JFormattedTextField é um JTextField, então não vejo o pq disso acontecer…

Isso pode ter a ver com o tipo de formato que vc está inserindo, se vc insere um padrão que tem que ser seguido, isso vai incluir o numero de caracteres.
Por exemplo: (xx)xxxx-xxxx só vai poder ter 13 dígitos, caracteres ou seja lá o que o caractere ‘x’ represente.

Para fazer ilimitado vc pode usar uma regex pra validar o seu textfield e setar o ultimo caractere como um coringa, sendo assim ele aceitaria qualquer caractere, incluindo o vazio e o espaço em branco, o que deixaria vc incluir valores “infinitamente”.

Se quiser ter menos trabalho vc pode setar um valor muito muito alto pro seu textField, mas não seria infinito e seria deselegante.

SandroSoftwares

se precisar de uma classe que controla caracteres eis aqui:

import javax.swing.JOptionPane;
import javax.swing.text.*;

public class FixedLengthDocument extends PlainDocument {

    private int iMaxLength;

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

    @Override
    public void insertString(int offset, String str, AttributeSet attr)
            throws BadLocationException {
        if (str == null) {
            return;
        }

        if (iMaxLength <= 0) // aceitara qualquer no. de caracteres
        {
            super.insertString(offset, str, attr);
            return;
        }

        int ilen = (getLength() + str.length());
        if (ilen <= iMaxLength) // se o comprimento final for menor...
        {
            super.insertString(offset, str, attr); // ...aceita str
        } else {
            if (getLength() == iMaxLength) {
                JOptionPane.showMessageDialog(null, "Limite de Caracteres atingido.");
                return; // nada a fazer

            }
            String newStr = str.substring(0, (iMaxLength - getLength()));

            super.insertString(offset, newStr, attr);
        }
    }
}

para implementá-la (eu testei no jformatted) logo após criá-lo digite:

seujFormattedTextField.setDocument(new FixedLengthDocument(QUANTIDADE DE CARACTERES DESEJADO));

resolveu aqui...

Criado 2 de setembro de 2013
Ultima resposta 6 de set. de 2013
Respostas 3
Participantes 4