Dúvidas com textfield e string

4 respostas
R

bom gente, to com algumas dúvidas em relação a textfield e string:
1°. Estou desenvolvendo um trabalho pra faculdade, nele, o usuário digita um valor numérico no textfield, este valor é convertido para double e adicionado a um vetor do mesmo tipo, e é ai q chego na dúvida: se o usuário digitar um texto (uma palavra qualquer) ao invés de um valor numérico gerará um erro, queria saber se há algum modo de fazer com que o textfield aceite somente caracteres numéricos (e a vírgula) ou se há algum modo de diferenciar a string que é retornado do textfield para saber se é um caracter numérico ou uma palavra.

2°. Minha outra dúvida é em relação à virgula, porque quando digitamos um número quebrado separamos com vírgula, mas o problema é que se for digitado no textfield um número com vírgula, quando esse número for convertido para double da erro, só aceita se for separado com um . (ponto), eis q surge a dúvida: há um modo de pegar a string retornada do textfield e fazer uma busca nela para que possa ser trocado a , (vírgula) por um . (ponto) e depois converter esta string para double.

desde já acradeço a ajuda de vocês.

4 Respostas

T

No segundo caso você pode usar DecimalFormat. Exemplo:

import java.util.*;
import java.text.*;

class Converter {
    public static void main(String[] args) throws ParseException {
        Locale.setDefault (new Locale ("pt", "BR"));
        DecimalFormat df = new DecimalFormat ("#,###.#");
        double valor = df.parse ("1.234.567,89012").doubleValue();
        System.out.println (valor);
    }
}
cristianonasciment

1º esse método pega o campo e se for diferente de digito ele não aceita digitar

public void camposNumericos (JTextField campo) {
        
         campo.addKeyListener(new KeyListener () {
            public void keyTyped (KeyEvent e) {
                char c = e.getKeyChar();
                if (!Character.isDigit(c)) {
                    e.consume();
                }   
            }
            public void keyPressed (KeyEvent e) {   
            }
            public void keyReleased(KeyEvent e) {   
            }
        });
        
  }

2º vc faz um for q vai percorrer o tamanho da string ( usando o length) e usa o método charAt pra ir comparando as strings

peerless

A Primeira dica do Thingol é boa.
Assim como ela, da pra fazer também utilizando o JFormattedTextField e o MaskFormatter...

MaskFormatter mask = new MaskFormatter();
try {

    mask.setMask("#,###.##");
    mask.setValidCharacters("[telefone removido]'); 

    mask.setPlaceholderCharacter('_');
    mask.install(meuJFORMATTED);
} catch (Exception e) { System.out.println("Erro: "+e); }
meuJFORMATTED = new JFormattedTextField(mask);
R

bom galera valeu pela ajuda ae, mas como sou iniciante nao entendi algumas coisas.
me enteressei pelo método que o peerless passou, so nao entendi onde devo colocar esse código no netbeans para que ele funcione.
minha outra dúvida é sobre o método de busca e subistituição da virgula por ponto: eu usei o charAt para buscar a virgula, funcionou, na hora de subistitui a virgula por um ponto usei o replace so q nao substitui, e gera um erro.
tem como da uma forcinha ae??

Criado 4 de abril de 2007
Ultima resposta 6 de abr. de 2007
Respostas 4
Participantes 4