Duvida com relação ao metodo focusLost()

6 respostas
M

Boa noite colegas, é o seguinte, estou trabalhando em um projeto, e estou na seguinte situação, tenho uma tela de cadastro com JFormattedTextField, que recebe os dados da data de nascimento e outro que recebe o cpf, contudo, o usuario não é obrigado a informar estes dados, logo, se ele informar preciso que seja chamado os metodos que validam o cpf e a data de nascimento.

eu usei o metodo focusLost(), para ele dar o focu quando o usuario passar pelo campo e digitar o cpf errado, funciona correto, o problema, é que quando ele não digita nada no campo ele pega os valores da mascara q estou usando.

public void focusLost(FocusEvent e) {
        if(e.getSource()==txtCpf){
            ValidacaoDeDados val;
            cpf=txtCpf.getText().toString();
            int digito1;
            int digito2;
            String cpfSemDigito;
            String cpfSemPonto;
            digito1=Integer.parseInt(String.valueOf(cpf.charAt(12)));
            digito2=Integer.parseInt(String.valueOf(cpf.charAt(13)));
            
            cpfSemDigito=cpf.substring(0, 11);
            cpfSemPonto=cpfSemDigito.replace(".", "");
            val = new ValidacaoDeDados(cpfSemPonto,digito1,digito2);
            if(val.calcDigVerificador()==false){
                    JOptionPane.showMessageDialog(null,"Cpf incorreto! Digite Novamente!");
            }         
        }
       
    }
ai apresenta este erro
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "_"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:447)
        at java.lang.Integer.parseInt(Integer.java:497)
        at br.com.vetor.apresentacao.TelaCadastroAluno.focusLost(TelaCadastroAluno.java:619)
        at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:172)
        at java.awt.Component.processFocusEvent(Component.java:5409)
        at javax.swing.JFormattedTextField.processFocusEvent(JFormattedTextField.java:591)
        at java.awt.Component.processEvent(Component.java:5273)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3984)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3819)
        at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1826)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:858)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:539)
        at java.awt.Component.dispatchEventImpl(Component.java:3857)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3819)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
CONSTRUÍDO COM SUCESSO (tempo total: 24 segundos)

alguem ai sabe como posso corrigir isto???

6 Respostas

Adelar

O conteúdo do campo txtCpf quando o usuário não digita nada é sempre o mesmo não é? Então faz uma comparação de string. Deve ter uma solução melhor mas é a única que me ocorreu agora :?
um abraço

M

Boa tarde Galera, alguem tem ideia de como me ajudar nesta questão???

Moises Moura:
Boa noite colegas, é o seguinte, estou trabalhando em um projeto, e estou na seguinte situação, tenho uma tela de cadastro com JFormattedTextField, que recebe os dados da data de nascimento e outro que recebe o cpf, contudo, o usuario não é obrigado a informar estes dados, logo, se ele informar preciso que seja chamado os metodos que validam o cpf e a data de nascimento.

eu usei o metodo focusLost(), para ele dar o focu quando o usuario passar pelo campo e digitar o cpf errado, funciona correto, o problema, é que quando ele não digita nada no campo ele pega os valores da mascara q estou usando.

public void focusLost(FocusEvent e) {
        if(e.getSource()==txtCpf){
            ValidacaoDeDados val;
            cpf=txtCpf.getText().toString();
            int digito1;
            int digito2;
            String cpfSemDigito;
            String cpfSemPonto;
            digito1=Integer.parseInt(String.valueOf(cpf.charAt(12)));
            digito2=Integer.parseInt(String.valueOf(cpf.charAt(13)));
            
            cpfSemDigito=cpf.substring(0, 11);
            cpfSemPonto=cpfSemDigito.replace(".", "");
            val = new ValidacaoDeDados(cpfSemPonto,digito1,digito2);
            if(val.calcDigVerificador()==false){
                    JOptionPane.showMessageDialog(null,"Cpf incorreto! Digite Novamente!");
            }         
        }
       
    }
ai apresenta este erro
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "_"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:447)
        at java.lang.Integer.parseInt(Integer.java:497)
        at br.com.vetor.apresentacao.TelaCadastroAluno.focusLost(TelaCadastroAluno.java:619)
        at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:172)
        at java.awt.Component.processFocusEvent(Component.java:5409)
        at javax.swing.JFormattedTextField.processFocusEvent(JFormattedTextField.java:591)
        at java.awt.Component.processEvent(Component.java:5273)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3984)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3819)
        at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1826)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:858)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:539)
        at java.awt.Component.dispatchEventImpl(Component.java:3857)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3819)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
CONSTRUÍDO COM SUCESSO (tempo total: 24 segundos)

alguem ai sabe como posso corrigir isto???

M

Você está usando um FormattedTextField? Se não está, use-o. Se está, coloque aqui como está fazendo.

M

Boa Tarde Marco, segue o trecho do codigo com a parte da mascara

try {
                mascaraCpf = new MaskFormatter("###.###.###-##");
                mascaraNascimento = new MaskFormatter("##/##/####");
               // mascaraRg = new MaskFormatter("########");
                mascaraTelefone = new MaskFormatter("(##)####-####");
                mascaraCelular= new MaskFormatter("(##)####-####");
                mascaraTelefoneResp=new MaskFormatter("(##)####-####");
                mascaraMatricula=new MaskFormatter("AAAA.AAAA");

                mascaraCpf.setPlaceholderCharacter('_');
                mascaraTelefone.setPlaceholderCharacter('_');
                mascaraTelefoneResp.setPlaceholderCharacter('_');
                //mascaraMatricula.setPlaceholderCharacter('_');
                mascaraNascimento.setPlaceholderCharacter('_');
                mascaraCelular.setPlaceholderCharacter('_');
               // mascaraRg.setPlaceholderCharacter('_');

        } catch (ParseException ex) {
            Logger.getLogger(TelaCadastroProfessor.class.getName()).log(Level.SEVERE, null, ex);
        }
        txtNascimento = new JFormattedTextField(mascaraNascimento);
        txtRg = new JTextField();
        txtCpf = new JFormattedTextField(mascaraCpf);
        
        txtTelefoneResponsavel = new JFormattedTextField(mascaraTelefoneResp);
        txtCelular = new JFormattedTextField(mascaraCelular);
        txtMatricula=new JFormattedTextField(mascaraMatricula);
        txtTelefone = new JFormattedTextField(mascaraTelefone);
       //String.valueOf(txtMatricula.toString()).replace(".","");
M

Use o método getValue() do seu JFormattedTextField para resgatar os valores e não o getText() o o toString().

Tente novamente usando o getValue() - que já retornará somente os caracteres válidos - e informe os resultados.

M

Marco, VLW vou fazer um teste aqui, qq coisa posto ai de novo!!!

Criado 22 de dezembro de 2009
Ultima resposta 20 de jan. de 2010
Respostas 6
Participantes 3