Validar mascara placa jformattedtextfield

Olá, necessito validar o campo de texto placa na minha tela, quando eu insiro um valor e clico em cadastrar. ele efetua o cadastro e se eu não digitar nenhuma placa ele manda a mascara para a tabela. gostaria de impedir que ele enviasse a mascara, assim negando o cadastro no banco.

segue a imagem:


segue o código:

     private void cadastrarDados() {
        
        try {
            
          if(jftPlaca.getText().equals("") || jtValorCupom.getText().equals("")){
                 JOptionPane.showMessageDialog(this,
                        "Necessário Preencher os campos!",
                        "Mensagem de Erro",JOptionPane.INFORMATION_MESSAGE);
                jftPlaca.setBorder(BorderFactory.createLineBorder(Color.red, 1));
                jtValorCupom.setBorder(BorderFactory.createLineBorder(Color.red, 1));
                validarCampos();
                             
            }else{
              
            validarCampos();
                 
            jftPlaca.setBorder(BorderFactory.createLoweredSoftBevelBorder());
            jtValorCupom.setBorder(BorderFactory.createLoweredSoftBevelBorder());
            EstacionamentoVO eVO = new EstacionamentoVO();
            eVO.setPlaca(jftPlaca.getText());                        
            eVO.setData(jtData.getText());                                              
            eVO.setHora(jtHora.getText());            
            eVO.setValorCup(Double.parseDouble(jtValorCupom.getText().replaceAll(",",".").replace(" ", "")));
         
            EstacionamentoServicos es = servicos.ServicosFactory.getEstacionamentoServicos();
          
            es.cadastrarDados(eVO);
            
            JOptionPane.showMessageDialog(
                        null,
                        "Dados cadastrado com sucesso!",
                        "Mensagem de confirmação",
                        JOptionPane.INFORMATION_MESSAGE);             
         }
         
        } catch (Exception e) { 
            
           JOptionPane.showMessageDialog(
                        null,
                        "erro ao cadastrar Dados!",
                        "Mensagem de erro",
                        JOptionPane.ERROR_MESSAGE);
           e.printStackTrace();
           
           String valor = jtValorCupom.getText();
            
           for (int i = 0; i < valor.length(); i++) {                          
            if(Character.isLetter(valor.charAt(i)) == true){
              JOptionPane.showMessageDialog(null,
                      "Informe um valor ao invés de caracteres!",
                      "Mensagem de Informação",JOptionPane.ERROR_MESSAGE);
            jtValorCupom.setBorder(BorderFactory.createLineBorder(Color.red, 1));

            }
            break;
           }          
        }     
    }//fecha metodo cadastrar
     
    private void validarCampos(){
        
            if (jtValorCupom.getText().isEmpty()) {
            JOptionPane.showMessageDialog(this,
                        "Necessário informar um valor para o cupom!",
                        "Mensagem de Erro",JOptionPane.INFORMATION_MESSAGE);             
                jtValorCupom.setBorder(BorderFactory.createLineBorder(Color.red, 1));                       
                
            }else{
               
            }
    }

Como a placa está formatada você tem que verificar se uma das posições é válida. Só precisa verificar uma posição porque a máscara não aceita “meia informação”, então se uma das posições da máscara está preenchida, então é porque todo campo está preenchido. Supondo que a placa obedece o padrão brasileiro (e não o do Mercosul), basta fazer algo do tipo:

if(Character.isLetter(jftPlaca.getText().charAt(0))){
	...
}

Ou seja: “Se o caractere da primeira posição do campo jftPlaca for uma letra”.

Para ilustrar a ideia no seu projeto (só ilustrar, não testado - mas essa ideia nos meus projetos):

import javax.swing.text.MaskFormatter;
import javax.swing.text.ParseException;
import ...;

public class CadastroVeicular {
	private short campo;
	private MaskFormatter mascaraPlaca;
	
	public CadastroVeicular(){
		configurarCampos();
		mascararPlaca();
	}
	
	private void configurarCampos(){
		jftPlaca.setBackground(color.white);
		jftPlaca.setFormatterFactory(new DeafultFormatterFactory(mascaraPlaca));
		jtValor.setBackground(color.white);
	}
	
	public void mascararPlaca(String placa){
		try{
			mascaraPlaca = new MaskFormatter("UUU-####");
		}catch(ParseException pex){
			System.out.println("ERRO: " + pex.getMessage());
		}
	}
	
	private void recomporCampos(){
		jftPlaca.setBackground(color.white);
		jtValor.setBackground(color.white);
	}
	
	public boolean validarCampo(){
		campoValido = false;
		final short NUMERO_CAMPOS = 2;
		
		switch(campo){
			case 1:
				if(Character.isLetter(jftPlaca.getText().charAt(0))){
					JOptionPane.showMessageDialog(this,
								"Preenchimento obrigatório: Placa!",
								"Mensagem de Erro", JOptionPane.INFORMATION_MESSAGE);
					jftPlaca.setBackground(new Color(255, 255, 204));
					
					campoValido = false;
					validarCampo();
				}else{
					campoVerificado++;
					campo = 2;
					recomporCampos();
				}
				break;
			case 2:
				if(jtValor.getText().isEmpty()){
					JOptionPane.showMessageDialog(this,
								"Preenchimento obrigatório: Placa!",
								"Mensagem de Erro", JOptionPane.INFORMATION_MESSAGE);
					jtValor.setBackground(new Color(255, 255, 204));
					
					campoValido = false;
					validarCampo();
					
				}else{
					campoVerificado++;
					recomporCampos();
					
					if(campoVerificado >= NUMERO_CAMPOS)
						campoValido = true;
				}
		}
	}
	
	private bean.Veiculo retornarVeiculo(){
		bean.Veiculo veiculo = new bean.Veiculo();
		
		veiculo.setCodigoVeiculo(codigoVeiculo);
		veiculo.setPlaca(jftPlaca.getText());
		[...]
		
		return veiculo;
	}
	
	private void salvarDados(){
		campo = 1;
		if(validarCampo()){
			try{
				dao.Veiculo.inserir(retornarVeiculo());
			}catch(SQLException sqle){
				System.out.println("Ocorreu um ERRO: " + sqle.getMessage());
			}
		}
	}
}

Você pode consultar a documentação do Java para obter mais informações:

1 - Classe MaskFormatter: Docs Oracle - MaskFormatter Class;
2 - Classe Character: Docs Oracle - Character Class

if(Character.isLetter(jftPlaca.getText().charAt(0))){
	...
}

não consegui implementar essa validação. já testei para ver o valor capturado pelo campo ele imprime no “-” e manda para o banco.

o problema que não estou conseguindo barrar isso, se eu fizer um replace no metódo de preencher a tabela ele ira tirar a - das outras placas que contém o “-”.

Verdade, eu esqueci de negar…:

if(!Character.isLetter(jftPlaca.getText().charAt(0))){
	...
}