Qual o problema deste código?

2 respostas
V

E ae galera, tô com um probleminha!

Tenho uma aplicação que insere dados em uma tabela MySQL através de um JTextField ( txt ).
No txt, só são aceitos 14 números, não permito a entrada de espaços, virgulas, letras... enfim, qualquer outro caracter que não seja um número não será permitido!

A classe que faz essas restrições é a seguinte:
public class SomenteNumeros extends PlainDocument {

    private int iMaxLength;

    public SomenteNumeros(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...
        {
            for (int i = 0; i < str.length(); i++) {
                //isDigit() verifica se é um numero, se não for ignora...
                if (Character.isDigit(str.charAt(i))) {
                    //se for insere no documento
                    super.insertString(offset, Character.toString(str.charAt(i)), attr);
                }
            }
        } else {
            if (getLength() == iMaxLength) {
                return; // nada a fazer
            }
            String newStr = str.substring(0, (iMaxLength - getLength()));

            super.insertString(offset, newStr, attr);
        }
    //percorre a String inserida...

    }
}
O problema ocorre quando eu busco essas informações do banco e as jogo de volta no txt... os dados vem de trás pra frente. Por exemplo: eu insiro "12345", a inserção ocorre normalmente, no banco é gravado "12345", mas quando eu faço a consulta e seto esses valores no txt, me retorna "54321"...

Já notei que isso ocorre quando eu faço essas restrições instanciando a classe SomenteNumeros... só não achei onde pode estar dando este erro!
Peço que me ajudem a solucionar este caso então... vlww!

2 Respostas

JavaKaiser

e ai Vini…

pelo que entendi, voce diz que o erro ocorre quando esta retornando a informação do banco.

entao, posta o codigo do retorno do banco pra gente poder ver…

até

diego2005

Acredito eu que o problema está na sua recursividade, imaginamos que vc tenha o valor ‘12345’. Quando você fizer as chamadas recursivas, sua pilha ficará assim:

5 4 3 2 1

Ai quando acontece o desempilhamento, você terá ‘54321’.

T+

Criado 25 de maio de 2009
Ultima resposta 25 de mai. de 2009
Respostas 2
Participantes 3