Dúvida/Problema KeyEvent Swing

2 respostas
G

Olá,

Estou desenvolvendo um sistema e nele possui uma Frente de Caixa, portanto preciso pegar os eventos do teclado, como: F1, F2, e por ai vai…
Já testei os seguintes códigos:
Primeiro Código:

KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {

            public boolean dispatchKeyEvent(KeyEvent e) {
                boolean keyHandled = false;
                if (e.getID() == KeyEvent.KEY_PRESSED) {
            
                }
                return keyHandled;
            }
        });

Segundo Código:

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {

            public void eventDispatched(AWTEvent event) {
                KeyEvent keyEvent = (KeyEvent) event;
                if (keyEvent.getID() == KeyEvent.KEY_RELEASED
                        && keyEvent.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    System.out.println("ESC");
                }
            }
        }, AWTEvent.KEY_EVENT_MASK);

Os dois códigos estão funcionando OK, porém há um problema… Uma vez executado um dos dois códigos, ele vai ativar o evento para todos os jFrames, jDialog ou seja, todo o sistema.
Quando eu pressiono uma tecla em outra janela ele chama aquela referente há Frente de Caixa.
Este seria o meu problema… como deixar os eventos do teclado somente na Frente de Caixa?
Ou finalizar/bloquear os eventos quando mudo de tela?

2 Respostas

F

boa tarde

eu faria da seguinte maneira:

crie um evento separado tipo

KeyEventDispatcher listTeclasFrenteCaixa = new KeyEventDispatcher() {

            public boolean dispatchKeyEvent(KeyEvent e) {
                boolean keyHandled = false;
                if (e.getID() == KeyEvent.KEY_PRESSED) {

                }
                return keyHandled;
            }
        };
        
        
        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(listTeclasFrenteCaixa);
        
        KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(listTeclasFrenteCaixa);

            }

ai ao entrar na tela de caixa faz o addListener(listTeclasFrenteCaixa )

ao sair remove o evento removeListener(listTeclasFrenteCaixa )

teclado do vai ser lido somente quando estive na tela correta.

G

Olá,

Grato pela ajuda, solucionou meu probemas…
Foi mais tranquilo do que pensava…

att

Criado 27 de janeiro de 2012
Ultima resposta 30 de jan. de 2012
Respostas 2
Participantes 2