private boolean validarCampos() {
    boolean valido = true;
    String mensagem = "";

    if (funcionario.getCategoria() == null) {
      mensagem += "\n- Selecione uma Categoria";
      valido = false;
    }

    try {
      Funcionario f =
          new DAO()
              .localizar(
                  Funcionario.class, "FuncionarioPorLogin", funcionario.getUsuario().getUsuario());
      if (f != null && !f.equals(funcionario)) {
        valido = false;
        mensagem += "\n- Usuário já existe.";
      }
    } catch (Throwable t) {
      valido = false;
      new TratadorExcecao(t, this, true);
    }

    if (!valido) {
      mensagem = "Corrija os campos abaixo:" + mensagem;
      JOptionPane.showMessageDialog(
          this, mensagem, "Salvar Funcionário", JOptionPane.WARNING_MESSAGE);
    }

    return valido;
  }
  private void salvar() {
    try {
      controlador.capturar(funcionario);

      if (!validarCampos()) {
        return;
      }

      TipoAcesso tipo = null;
      if (funcionario.getId() == 0) {
        tipo = tipo.INSERCAO;
      } else {
        tipo = tipo.EDICAO;
      }

      DAO dao = new DAO(false);
      dao.salvar(funcionario);
      dao.concluirTransacao();
      TelaPrincipal.getInstancia().notificarClasse(funcionario);
      String descricao = "Cadastro do Funcionário " + funcionario.getNome() + ".";
      FuncionarioUtil.registrar(tipo, descricao);

      if (funcionario.equals(Main.getFuncionario())) {
        TelaPrincipal.getInstancia().recarregarFuncionario();
      }
      fechar();
    } catch (Throwable t) {
      new TratadorExcecao(t, this, true);
    }
  }