Problema com textfield.decimal nokia E63 CLDC1.0

9 respostas
P

Pois eh galera, estou com problemas como já descrevi no título do tópico.

Tenho um textfiled na minha aplicação que deve aceitar decimais.

além de números, o campo aceita o sinal de menos(-), o ponto (.) e a vírgula (,).

Problema:

ao utilizar o ponto, o campo trava. exemplo:

se eu digito um numero qualquer no campo e em seguida um ponto, não consigo digitar outro numero e não consigo mover para o campo abaixo. Se digitar 2 pontos, um seguido do outro, nem apagar não posso mais!!

Alguém sabe por que isso acontece e tem alguma idéia de como resolver???

O próprio campo trata o sinal de menos e a virgula mas o ponto me quebrou.

9 Respostas

fabricioempresa

procure por replace

P

Hum, pelo que entendi você quer que eu verifique quando é digitado um “.” e troque por “,” ou vazio certo?

Problema:

a cada entrada de dados no campo, verifico o char digitado. se for um ponto, mando imprimir na tela o código inteiro do char.
quando digito ponto e quando digito vírgula, ambos entram no método e imprimem o mesmo código de char.

já tentei fazer replace de . para , mas nada acontece

Obs: caso alguem pergunte, sei que a CLDC1.0 não suporta ponto flutuante, mas nao trato o valor como ponto flutuante no j2me, no j2me trato apenas como String.

P

Atualização do meu problema.

Descobri que o erro só ocorre quando o telefone está configurado usar idioma português, se mudar para inglês não há problema algum e nem preciso fazer tratamentos.

Duvida:

1-Tem como eu definir o idioma a ser utilizado em um campo? como? (melhor opção)

2-Se não for possível, tem como definir o idioma em que deve rodar meu aplicativo?

Estou olhando os inputModes do textBox na esperança de q a definição de um inputMode resolva meu problema, mas ainda estou meio perdido nisso.

Muito obrigado, qq sugestão é bem vinda!

P

Não há solução para nenhum dos dois casos.

P

Existe algum workaround para o meu problema?

Uma coisa que eu estava tentando fazer era tratar as entradas do campo a medida que o usuário digita. Pensei em colocar como initialInputMode para que o usuário possa digitar apenas valores numéricos e então cada vez que fosse detectada uma alteração no campo, verificava o que foi digitado e caso fosse algum caracter inválido, o mesmo seria apagado.

problemas com relação a isso:

1- se o idioma do aparelho for português, a vírgula funciona. Se for inglës, o ponto é que deveria funcionar, entao seria melhor saber o idioma que o telefone está configurado para funcionar antes de definir o que for remover (até penso em como não precisar saber disso, mas não gosto muito q alguns workarounds ficam meio “gambiosos”)

2-Maior problema, quando comecei a tratar as entradas do campo, estava funcionando bem, no entanto caso o usuário (de alguma forma bizarra) apertar 2 botões (digamos letras por exemplo) ao mesmo tempo, uma das letras não era apagada, mesmo que eu fizesse a verificação de toda a String.

3- Grande problema/dúvida, havia visto em algum tópico, se não me engano o boone dizendo (desculpe se estiver errado) que havia problemas em verificar quando algo é inserido no campo usando o ItemStateChanged. Sobre isso, não sei qual o problema e se há solução para isso, alguma sugestão???

Novamente obrigado por qualquer sugestão ou esclarecimento.

P

PsicoFeitan:
Existe algum workaround para o meu problema?

Uma coisa que eu estava tentando fazer era tratar as entradas do campo a medida que o usuário digita. Pensei em colocar como initialInputMode para que o usuário possa digitar apenas valores numéricos e então cada vez que fosse detectada uma alteração no campo, verificava o que foi digitado e caso fosse algum caracter inválido, o mesmo seria apagado.

problemas com relação a isso:

1- se o idioma do aparelho for português, a vírgula funciona. Se for inglës, o ponto é que deveria funcionar, entao seria melhor saber o idioma que o telefone está configurado para funcionar antes de definir o que for remover (até penso em como não precisar saber disso, mas não gosto muito q alguns workarounds ficam meio “gambiosos”)


String locale = System.getProperty(“microedition.locale”);

Para ter controle ABSOLUTO da entrada, vc deve implementar seu próprio componente usando CustomItem ou Canvas. Orientação já dada aqui diversas vezes.
Não há como obter notificações de caracteres a medida que são digitados a não ser por estes meios.

PsicoFeitan:

3- Grande problema/dúvida, havia visto em algum tópico, se não me engano o boone dizendo (desculpe se estiver errado) que havia problemas em verificar quando algo é inserido no campo usando o ItemStateChanged. Sobre isso, não sei qual o problema e se há solução para isso, alguma sugestão???

Novamente obrigado por qualquer sugestão ou esclarecimento.


ItemStateChanged não é garantido de ser disparado, portanto, a dica já dada no item 2 é a única solução que funciona 100% das vezes não importa o aparelho.È mais custosa, por ter que fazer o componente do zero ? Sim, mas pra quem tem a necessidade REAL, compensa.
Não posso reclamar do meu TextField customizado que só aceita Letras ou Números e ainda indica em que modo de entrada o componente está (icone indicativo).

P

Muito obrigado por todas as respostas boone, pretendo verificar a questão do CustomItem. Minhas últimas dúvidas pelo que li sobre CustomItem até agora.

A aparência do meu CustomItem é definida no método paint() certo?

Portanto, se eu testar em aparelhos diferentes, a aparência do CustomItem se manterá, enquanto os outros items do Form irão adquirir a aparência definida pelo aparelho certo?(Isso ficará estranho para o usuário, um campo com aparência especial e os outros “normais”)

O único jeito é fazer com que os outros items sejam CustomItems também para mantë-los com a mesma aparëncia? ou é possível fazer algo como herdar a aparência do textfield definida pelo aparelho?

P

PsicoFeitan:
Muito obrigado por todas as respostas boone, pretendo verificar a questão do CustomItem. Minhas últimas dúvidas pelo que li sobre CustomItem até agora.

A aparência do meu CustomItem é definida no método paint() certo?


Certo.

Sim, a aparência se manterá pois vc é responsável pelo desenho do componente, não a implementação do fabricante.

PsicoFeitan:

O único jeito é fazer com que os outros items sejam CustomItems também para mantë-los com a mesma aparëncia? ou é possível fazer algo como herdar a aparência do textfield definida pelo aparelho?

Não há herança de visual. Veja então q vc está numa situação antagônica. Se precisa da funcionalidade, deverá abrir mão do componente seguir o visual dos demais.Se quiser o visual, perderá a funcionalidade, pois usará um componente padrão.
Como diria uma célebre frase, não existe almoço grátis.

P

hehehe ok, mto obrigado pelos esclarecimentos.

Criado 14 de abril de 2010
Ultima resposta 14 de abr. de 2010
Respostas 9
Participantes 3