Keylistener como se fosse uma aplicação telefônica

0 respostas
T

Olá pessoal!

Estou criando uma aplicaçãozinha bem básica de caixa bancário para deficientes visuais, que funciona como um bankphone… tipo uma voz fala ‘digite 1 para consultar seu saldo, 2 para isso, 3 para aquilo’, etc etc, como uma URA.

Para implementar, pus um keylistener em um JFrame (vazio por enquanto) que fica em full screen, aí ele recebe o que o usuário digitar no teclado numérico, e faz o que tem que fazer. A parte de tocar e receber o keylistener está funcionando legal. Mas estou com um problema de lógica…

Logo que executo o programa, ele precisa tocar ‘digite 1 para isso, 2 para aquilo…’ etc. Até aí tudo bem, eu faço ele tocar um .wav que gravei. Mas como faço pra que ele toque, espere alguns segundos e toque novamente no caso de não houver entradas do usuário, e cancele isso caso o usuário digite algo? Além disso, tenho que por um contador de erros, depois do 3o. erro ele toca uma mensagem e dá dispose no frame.

Tentei porcamente usar um Thread.Sleep dentro de um for, mas o keylistener não ‘cancela’ o for caso receba entrada

Alguma idéia?

Segue o código:

import java.awt.GraphicsEnvironment;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class FrameDef extends javax.swing.JFrame implements Runnable {
    
	Tocador t; //Classe que toca os sons.
	private String transacao="";
	int contaid = 123;
    public FrameDef() {
        INIFrame();
        GraphicsEnvironment.getLocalGraphicsEnvironment().
		getDefaultScreenDevice().setFullScreenWindow(this);
    }
    
    private void INIFrame() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setAlwaysOnTop(true);
        setUndecorated(true);
        this.addKeyListener(new KeyListener() {
        	public void keyTyped (KeyEvent e) {
       			t.play(e.getKeyChar()+"");
        		if (e.getKeyChar()=='1') {
        			dispose();
        			transacao="SAQUE";
        			System.out.println("Opção Saque escolhida");
        			new Senha(transacao, contaid).run(); //vai pra próxima classe, que é um frame tb
        		}
        		else if (e.getKeyChar()=='2') {
        			dispose();
        			transacao="CONSULTASALDO";
        			System.out.println("Opção Consulta Saldo escolhida");
        			new Senha(transacao, contaid).run();
        		}
        		else {
        			t.play("Opcao Invalida");
        		}
        	}
        	public void keyPressed(KeyEvent e) {}
        	public void keyReleased (KeyEvent e) {
    			if (e.getKeyChar() == KeyEvent.VK_ESCAPE)
				{
					System.exit(0);
				}
        	}

        });
    }

    public void run() {
    	setVisible(true);
    	System.out.println("Início");
    	t = new Tocador();
		for (int c=0;c<3;c++) {
			t.play("Digite 1 para saque e 2 para consultar seu saldo"); //toca o som usando jmf e espera acabar de tocar com Thread.Sleep
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				e.printStackTrace();
				System.exit(0);
			}
		}
		t.play("Numero de tentativas esgotado");
    	System.out.println("Timeout");
    	dispose();
    }
}
Criado 12 de maio de 2008
Respostas 0
Participantes 1