Java - Enter Function

2

In the system there is a field, the person needs to fill in this field and then press enter.

When you press enter, the system performs a check and then opens a JOptionpane asking you to select: yes , no , ok etc.

The person presses with enter, and the system executes the function, until everything is ok.

The problem is: pressing enter on JOptionPane (for example hit enter on the button yes ) it re-executes the function, but since it was not completed the system ends up with an error, it stays in the loop , because the person using the system presses enter, then it loads again, and so it goes ...

How to get around this? I've tried a lot of things, searched the internet for a lot of things, everything succeeds, does anything have to be done to fix it?

To catch the action, I'm using KeyListener

EDIT 1:

 try {

            if (evt.getKeyCode() == 10 || evt.getKeyCode() == 127) {
                jfObjeto.setText(jfObjeto.getText());
                controller.getAtendimentoController().novoAtendimentoItem();
                controller.getAtendimentoController().getAtendimentoModel().getAtendimentoItem().setObjeto(jfObjeto.getText());

            }

            if (evt.getKeyCode() == 10) {
                //verifica se possui sigla cadastrada
                controller.getAtendimentoController().verificaCampoObjeto(
                        controller.getSistemaOperacaoController(),
                        controller.getSistemaSiglaEtiquetaController());
                //verifica se o objeto possui lancamento para EDITAR
                controller.getAtendimentoController().consultaObjetoEdicao();
                if (controller.getAtendimentoController().getAtendimentoModel().getAtendimentoItem().getId() > 0) {
                    int resposta = new Mensagem().pergunta("Atenção deseja alterar o objeto " + controller.getAtendimentoController().getAtendimentoModel().getAtendimentoItem().getObjeto() + "?");
                    if (resposta == 0) {
                        preencherAtendimentoItemToFrame();
                    }
                }
                 // avanca para proximo campo, ou recua para o anterior

                formatarAvancarRecuarAtendimentoItem(evt, jfObjeto);

            } else if (evt.getKeyCode() == 127) {
                controller.getAtendimentoController().consultaObjetoEdicao();
                if (controller.getAtendimentoController().getAtendimentoModel().getAtendimentoItem().getId() > 0) {
                    int resposta = new Mensagem().pergunta("Deseja excluir o objeto " + controller.getAtendimentoController().getAtendimentoModel().getAtendimentoItem().getObjeto() + "?");
                    if (resposta == 0) {
                        controller.getAtendimentoController().excluirObjetoPostagemItem();
                        controller.getAtendimentoController().carregarListaAtendimentoItem();
                        tabelaAtendimentoItem();
                        limparAtendimentoItem();
                        carregarQuantidadeValorTotalAtendimento();
                        controller.getAtendimentoController().novoAtendimentoItem();
                        jfObjeto.requestFocusInWindow();
                    }
                } else {
                    new Mensagem().erro("Nenhum Objeto Localizado para Exclusão");
                }

            } else if (evt.getKeyCode() == 27) {
                formatarAvancarRecuarAtendimentoItem(evt, jfObjeto);
            }

        } catch (Exception ex) {
            new Mensagem().erro(ex.getMessage());
            jfObjeto.requestFocusInWindow();
        }
    
asked by anonymous 25.09.2015 / 15:30

2 answers

1

You can work with threads one for the events and another for the screen then:

if(evt.getKeyCode()== com.sun.glass.events.KeyEvent.VK_ENTER){

            tela.wait(timeout);
 }
    
25.09.2015 / 16:34
1

Use a global control variable, so you can see if this is not the second time ENTER is being pressed. Immediately after execution in JOptionpane , change back to the default value and the problem will be solved.

EDIT 1

An example is the code below:

private Boolean respondendo = false;

private void verificarTeclas(KeyEvent evt) {
  Integer resposta;

  if (!respondendo) {
    System.out.println("Tecla " + String.valueOf(evt.getKeyCode()) + " sendo analisada");
    this.respondendo = true;

    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
      resposta = JOptionPane.showConfirmDialog(this, "Deseja excluir o objeto?");

      if (resposta == JOptionPane.YES_OPTION) {
        // Faz o sim;
      } else {
        // Faz o não
      }
    }

    this.respondendo = false;
  }
}
    
31.10.2016 / 20:29