Deixar Campo Obrigatorio em Vermelho, se estiver vazio

2 respostas
S

Pessoal pensei em fazer um esquema legal... mais não sei direito como fazer....

Estou usando swing com MVC.

Eu realizei validações no controle, porem quebrei o mvc ao inserir um JoptionPane nele... porem preciso que em cada campo não preenchido, seja feito uma lista de mensagem, e exibir na Visão, e deixando os campos em vermelhos... e depois que preencher voltar a cor normal.

Aqui esta meu codigo, se algum puder me ajudar.

Meu DAO:

public class DaoOcorrencia implements IDAO{
 public boolean inserirOcorrencia(DomainObject domainObject) {
        Ocorrencia ocorrencia = (Ocorrencia) domainObject;

        try {




    Connection conn = Conexao.getConnection();

            //Obtendo a conexão com o BD

            //Criando a string com sql a ser executada
            String sql = "INSERT INTO ocorrencia VALUES (?,?,?,?,?,?,?)";

            //Tratando a sql  a ser executada
            PreparedStatement pst = conn.prepareStatement(sql);
            //Definindo o primeiro parâmetro

            pst.setInt(1, ocorrencia.getIDOcorrencia());


            pst.setString(2, ocorrencia.getDescricao());
            // pst.setString(3,ocorrencia.getVeiculo().getDescricao());


            //Definindo o segundo parâmetro
            pst.setString(3, ocorrencia.getData());

            pst.setString(4, ocorrencia.getServicos().getDescricaoServ());



            //      pst.setString(5,Servicos.getDescricaoServ());
            pst.setString(5, ocorrencia.getVeiculo().getPlaca());


            pst.setString(6, ocorrencia.getCliente().getNomecli());

            pst.setString(7,ocorrencia.getVeiculo().getNomeVeiculo());

pst.executeUpdate();


            pst.close();

            //Fechando a conexão
            conn.close();



        } catch (Exception e) {
            return false;
        }
        return true;

    }
Controle- o que esta aqui foi uma gambiarra que fiz
public class FachadaOcorrencia implements IFachada {
    private boolean validar(Ocorrencia ocorrencia) {
    String mensagem = null;
    boolean retorno = false;
    //criar um list
    //List
    if (ocorrencia.getServicos().getDescricaoServ().equalsIgnoreCase("")) {
    mensagem = "Por favor, não esqueça de preencher o campo tipo de serviço";
    retorno = true;


    } else if (ocorrencia.getVeiculo().getPlaca().equalsIgnoreCase("")) {
    mensagem = "Por favor não esqueça de preencher o campo placa";
    retorno = true;
    }

    else if (ocorrencia.getData().equalsIgnoreCase("")) {
    mensagem = "Por favor, não esqueça de preencher o campo data";
    retorno = true;


    } else if (ocorrencia.getDescricao().equalsIgnoreCase("")) {
    mensagem = "Por favor, não esqueça de preencher o campo descrição";
    retorno = true;


    }else if (ocorrencia.getData().equalsIgnoreCase("")){
    mensagem = "Por favor, não esqueca de preencher o campo data";
    retorno = true;


    }else if (ocorrencia.getCliente().getNomecli().equalsIgnoreCase("")){
    mensagem = "Por favor, não esqueca de preencher o campo Nome do Cliente";
    retorno = true;
    }else if (ocorrencia.getDescricao().equalsIgnoreCase("")){
    mensagem = "Por favor, não esqueca de preencher o campo Descrição da Ocorrencia";
    retorno = true;
    }else if (ocorrencia.getVeiculo().getNomeVeiculo().equalsIgnoreCase("")){
    mensagem = "Por favor, não esqueca de preencher o campo Nome do Veiculo";
    }

    if (retorno != false){

    // não pode haver joption pane no controller
    JOptionPane.showMessageDialog(null,mensagem);}
    return retorno;
    }

   // public List<String> inserirOcorrencia(DomainObject domainObject) {
  public boolean inserirOcorrencia(DomainObject domainObject){

  IDAO Dao= new DaoOcorrencia();

  Ocorrencia ocorrencia = (Ocorrencia) domainObject;
//Ocorrencia ocorrencia = new Ocorrencia();
     if (validar(ocorrencia)!=true) {
      Dao.inserirOcorrencia(domainObject);
     JOptionPane.showMessageDialog(null, "SALVO");
       return false; }

     else {

      



        return true;}}

Minha visão (JFrame)

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
 Ocorrencia ocorrencia = new Ocorrencia();



        Clientee cliente = new Clientee();
        ocorrencia.setCliente(cliente);

        Servicos servicos = new Servicos();
        ocorrencia.setServicos(servicos);

        Veiculo veiculo = new Veiculo();
        ocorrencia.setVeiculo(veiculo);

        ocorrencia.setIDOcorrencia(Integer.parseInt(tfcodigo.getText()));


        ocorrencia.setDescricao(tfdescricaoocorrencia.getText());
        ocorrencia.setData(tfdata.getText());



        ocorrencia.getServicos().setDescricaoServ(tftipodeservico.getText());

        ocorrencia.getVeiculo().setPlaca(tfplaca.getText());
        ocorrencia.getCliente().setNomecli(tfcliente.getText());

        ocorrencia.getVeiculo().setNomeVeiculo(tfveiculo.getText());

 IFachada fachadaoco = (IFachada) new FachadaOcorrencia();
        fachadaoco.inserirOcorrencia(ocorrencia);        // TODO add your handling code here:
    }

2 Respostas

V

Faça seu controle disparar uma exception CampoDaOcorrenciaInvalidaException. Nessa exception, adicione:

  1. Um identificador para o campo. Seria uma boa criar um enum para isso;
  2. Um identificador da mensagem de erro. Esse identificador será usado na view para pegar a mensagem em si, no arquivo de linguagem (você pode simplificar passando a mensagem em si, mas isso pode comprometer a internacionalização do software. Apresentar a mensagem de erro propriamente dita é tarefa da view);

Você também pode criar um método no seu controle getCamposObrigatorios(), que retorna uma lista daquele enum, indicando quais campos devem ser obrigatoriamente preenchidos. Assim, você já pode programar a view para deixar todos os campos obrigatórios vermelhos, e desabilitar o botão de salvar caso um deles não esteja preenchido.

Depois disso, na view, faça o tratamento adequado da exception. Capture essa exception e, caso ela ocorra, mostre o JOptionPane e vá até o campo e torne-o vermelho. Note que isso move novamente o JOptionPane para a view. No seu exemplo, você está passando null no primeiro parâmetro, o que gerará um comportamente inconsistente do JOptionPane. Para que ele funcione bem, o primeiro parâmetro deverá conter, necessariamente, a janela onde o JOptionPane está.

Outra dica. A partir do Java 6, ao invés de
.equalsIgnoreCase("")
Você pode usar simplesmente
.isEmpty()

Aliás, se era para testar se o JTextField é vazio, não precisava nem ignorar o case, já que maiúsculas e minúsculas não afetam nada nesse caso.

S

Blz kra… não quero te deixar nervoso rsr mais eh que sou novo em java…
se vc puder me dar um exemplo em cima do codigo que te passei eu agradeco… da maneira que vc falou eu não consigo fazer, se vc puder me dar um exemplo em cima do codigo para testa aqui…

Obrigado

Criado 18 de outubro de 2009
Ultima resposta 19 de out. de 2009
Respostas 2
Participantes 2