Validação de campos

Olá,
Tudo bem?
Veja bem, eu tenho um método que valida uma data digitada em um JFormattedTextField, o problema é que mesmo o campo estando vazio ele esta validando. O que eu queria saber é como faço para que o campo estando vazio o método de validação não valida-se?

Segue o código:

public boolean isValidData(String dataValue) {
        SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
        try {
            fmt.setLenient(false);
            fmt.parse(dataValue);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {
        boolean valid = isValidData([b]txtAniver.getText()[/b]);
        if (valid == false) {
            JOptionPane.showMessageDialog(this, "data inválida!");
            txtAniver.requestFocus();
        } else {
            valid = true;
        }
    }

Olá xwillianss,

Creio que vc deva colocar um if para verificar se o seu campo é vazio antes de validar,

if(txtAniver.getText().isEmpty() == true){ }

Espero que ajude…

Qualquer coisa, posta aí!

:wink:

… o problema continua…

O código que você me passou só funciona com JTextField. Com o JFormattedTextField não funciona.

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {
        if (txtAniver.getText().isEmpty() == false) {
            boolean valid = isValidData(txtAniver.getText());
            if (valid == false) {
                JOptionPane.showMessageDialog(this, "data inválida!");
                txtAniver.requestFocus();
            } else {
                valid = true;
            }
        }
    }


Olá…

é que aqui eu nao consigo testar isso direito…
não sei se da certo… tente dar um

getText().trim().equals("") 

se nao der certo posta aí que estou pensando em outra solução caso essa de errado…

Deu certo não…

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {
        if (!(txtAniver.getText().trim().equals(""))) {
            boolean valid = isValidData(txtAniver.getText());
            if (valid == false) {
                JOptionPane.showMessageDialog(this, "data inválida!");
                txtAniver.requestFocus();
            } else {
                valid = true;
            }
        }
    }

O JFormattedTextField com máscara aparenta está vázio, porém a máscara instalada no campo é um conteúdo válido(no caso da data: " / / "),
então não vai adiantar o seuCampo.isEmpty() pois sempre vai retornar falso, logo, é melhor você mudar seu modo de validação ou arrumar algum “jeitinho” para contornar esse comportamento do JFormattedTextField…

Isso já percebemos, agora estou tentando achar uma maneira de dar esse “jeitinho” sem ficar com tanta cara de “jeitinho”…

:wink:

Bom dia, crie uma função Botoes e estabeleça condições.
estou implementado um software agora e utilizei a seguinte função:

    public void botoes(String acao) {
        if (acao.equals("selecionado")) {
            fBairro.setEditable(false);
            fCidade.setEditable(false);
            fComplemento.setEditable(false);
            fDescricao.setEditable(false);
            fEndereco.setEditable(false);
            fId.setEditable(false);
            fLocatario.setEditable(false);
            fdataMatricula.setEditable(false);
            cFinalidade.setEnabled(false);
            cTipo.setEnabled(false);
            cUf.setEnabled(false);
            btNovo.setEnabled(true);
            btAlterar.setEnabled(true);
            btDeletar.setEnabled(true);
            btSalvar.setEnabled(false);
            btBuscar.setEnabled(false);
            btCancelar.setEnabled(false);
            btSair.setEnabled(true);
            btBusca_Locatario.setEnabled(false);
        }else if (acao.equals("novo") || acao.equals("alterar")) {
            fBairro.setEditable(true);
            fCidade.setEditable(true);
            fComplemento.setEditable(true);
            fDescricao.setEditable(true);
            fEndereco.setEditable(true);
            fId.setEditable(false);
            fLocatario.setEditable(false);
            fdataMatricula.setEditable(true);
            cFinalidade.setEnabled(true);
            cTipo.setEnabled(true);
            cUf.setEnabled(true);
            btNovo.setEnabled(true);
            btAlterar.setEnabled(false);
            btDeletar.setEnabled(false);
            btSalvar.setEnabled(true);
            btBuscar.setEnabled(false);
            btCancelar.setEnabled(true);
            btSair.setEnabled(false);
            btBusca_Locatario.setEnabled(true);
        } else if (acao.equals("inicio") || acao.equals("cancelar") || acao.equals("salvar")) {
            fBairro.setEditable(false);
            fCidade.setEditable(false);
            fComplemento.setEditable(false);
            fDescricao.setEditable(false);
            fEndereco.setEditable(false);
            fId.setEditable(false);
            fLocatario.setEditable(false);
            fdataMatricula.setEditable(false);
            cFinalidade.setEnabled(false);
            cTipo.setEnabled(false);
            cUf.setEnabled(false);
            btNovo.setEnabled(true);
            btAlterar.setEnabled(false);
            btDeletar.setEnabled(false);
            btSalvar.setEnabled(false);
            btBuscar.setEnabled(true);
            btCancelar.setEnabled(false);
            btSair.setEnabled(true);
            btBusca_Locatario.setEnabled(false);


    }
 }

Ai quando você for por exemplo criar um novo registro vc java botoes(“novo”) ai por diante.

Espero que ajude.

Olá,

uma pequena gambiarra…

public static String mudar(String valor){
		valor.toCharArray();
		int b = valor.length();
		System.out.println("indice"+b);
		String teste = "";
		for(int i = 0; i < b; i++){
			char c = valor.charAt(i);
			System.out.println(c);
			if((c!= '-') && (c != '/') && (c != '.')){

				teste = teste + c;
			}
		}
		return teste;
	}

De uma melhoradinha nisso e teste aí… aqui parece ter funcionado… mas como eu ja havia dito, nao da mto bem pra eu testar aqui… ta meio gambiarra, daí vc adapta melhor pro seu codigo… mas a ideia funciona…

Me diga se funcionar ou nao…
:wink:

Tá aí então, pode não ser a melhor solução mais funciona beleza…

public static boolean validarData(String data) {
        boolean validou = false;
        String[] split = data.split("/");
        try {
            int aux = Integer.parseInt(split[0]);
            if ((aux < 1) || (aux > 31)) {
                return validou;
            }
            aux = Integer.parseInt(split[1]);
            if ((aux < 1) || (aux > 12)) {
                return validou;
            }
            aux = Integer.parseInt(split[2]);
            if (aux < 1900) {
                return validou;
            }
        } catch (NumberFormatException nfe) {
            return validou;
        }

        validou = true;
        return validou;
}

Um teste básico:

public static void main(String[] args) {
        String d1 = "9/10/2010"; //ok
        String d2 = "9/13/2010"; //mês 13?
        String d3 = "-10/10/2010"; // dia -10?

        System.out.println(validarData(d1)); // true
        System.out.println(validarData(d2)); //false
        System.out.println(validarData(d3)); //false
}

Seu contexto:
1º A máscara do campo deve ter esse formato aqui: ##/##/####
2º Valide seu campo…

boolean validou = validarData(seuCampo.getText());

err viagei legal la ensima pensei que voce estava querendo bloquear os botoes . seguinte cria um JFormattedText na sua JFrame , va em propriedades clique em FormatterFactory apos isto clique em márcara -> personalizado e digite ##/##/####

[quote=jLady]Olá,

uma pequena gambiarra…

public static String mudar(String valor){
		valor.toCharArray();
		int b = valor.length();
		System.out.println("indice"+b);
		String teste = "";
		for(int i = 0; i < b; i++){
			char c = valor.charAt(i);
			System.out.println(c);
			if((c!= '-') && (c != '/') && (c != '.')){

				teste = teste + c;
			}
		}
		return teste;
	}

De uma melhoradinha nisso e teste aí… aqui parece ter funcionado… mas como eu ja havia dito, nao da mto bem pra eu testar aqui… ta meio gambiarra, daí vc adapta melhor pro seu codigo… mas a ideia funciona…

Me diga se funcionar ou nao…
:wink:

[/quote]

Amor,
Funcionou não… eu vou tentar aqui uma gambiarra… qualquer coisa eu post o código para voces verem…

Galera, conseguir!!! Ebaaaaaa

É o seguinte, o Componente JFormattedTextField tem dois tipos de expressar valores, um é o método getValue() que pega o valor da formatção e o outro é o getText() que pega o valor digitado…
Então ao invés de eu filtrar no IF getText eu filtro a máscara com o getValue(), deu para entender? Se não eu posto o código abaixo:

public boolean isValidData(String dataValue) {
        SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
        try {
            fmt.setLenient(false);
            fmt.parse(dataValue);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

alteração do método

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
       if (txtAniver.getValue() != null) {
            boolean valid = isValidData(txtAniver.getText());
            if (valid == false) {
                JOptionPane.showMessageDialog(this, "data inválida!");
                txtAniver.setValue(null);
                txtAniver.setText(null);
                txtAniver.requestFocus();
            }
        }
    }