Problemas com doClick();

2 respostas
Tuanny_Ramos

Estou com um seguinte problema: Estou criando uma calculadora dentro de um sistema onde cada botão tem o seu evento específico. Até ai blz. Quando vou implementar as teclas do teclado numérico através do método doClick(), da primeira vez ocorre tudo certo. Quando eu fecho a calculadora (ainda com o sistema aberto) e vou executa-la de novo, parece que ela fica meio perdida no doClick(); ela tenta executar o método de acordo com a quantidade de vezes que eu já abri a calculadora. Alguém saberia como tratar isso ?

segue o fonte:

/**
     * This method initializes
     * 
     */
  public CalcFolha() {
	super();
	eventosDeOperacao(); // este é o método que chama a "configuracao" para o doClick();
	initialize();
  }

...

  public void eventosDeOperacao() { // este método cria as acoes para o botao
	AWTEventListener listener = new AWTEventListener() {
	  public void eventDispatched(AWTEvent ev) {
		if (ev instanceof KeyEvent) {
		  KeyEvent ke = (KeyEvent) ev;
		  if (ke.getID() == KeyEvent.KEY_PRESSED) {
			pressedOp(ke.getKeyCode());
		  }
		}
	  }
	};
	Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK);
  }

...

  private void pressedOp(int code) { // este executa as acoes 
	switch (code) {
	case KeyEvent.VK_ADD:
	  System.out.println("+");
	  getBtnSoma().doClick(); // executa a soma 
	  break;
	case KeyEvent.VK_SUBTRACT:
	  System.out.println("-");
	  getBtnSub().doClick(); // executa a subtracao
	  break;
	case KeyEvent.VK_MULTIPLY:
	  System.out.println("*");
	  getBtnMult().doClick(); // executa a multiplicacao
	  break;
	case KeyEvent.VK_DIVIDE:
	  System.out.println("/");
	  getBtnDiv().doClick(); // executa a divisao
	  break;
	default:
	  // ignore
	  break;
	}
  }

2 Respostas

leoramos

Olha, eu posso estar falando besteira, mas vamos lá:
acho que teu programa não está com parada garantida. Saída padrão, em outras palavras.
Aí, cada vez que abres, ele registra um outro listener que fica lá trabalhando na VM. Tá te faltando o bom e velho:

System.exit(0);

ou mesmo, no carregamento desse sistema, coloque isso:

setDefaultCloseOperation(EXIT_ON_CLOSE); , no main, mesmo.

Até mais!

Tuanny_Ramos

Obrigada. Deu certo. Agora só to ajustando alguns detalhes.

Criado 15 de setembro de 2009
Ultima resposta 15 de set. de 2009
Respostas 2
Participantes 2