Verificar estado das Teclas LOCK

8 respostas
denirroberto

Pessoa já sei como verificar se as telcas Lock estão ativadas:
Ex.:

private void CapsNumScroll() {
        //CapsLock da BarraStatus
        Toolkit tk = Toolkit.getDefaultToolkit();

        if(tk.getLockingKeyState(KeyEvent.VK_CAPS_LOCK))
            jlblCapsLock.setText("LIG");
        else
            jlblCapsLock.setText("DES");
    }

Agora, como verificar mesmo que a janela principal esteja desativada. Tenho uma JLabel para mostrar ON ou OFF quero que ela mude ao precionar caps mesmo que a janela principal estega minimizada ou desativada, assim como acontece no Delphi (Pascal).

8 Respostas

AlissonSchneider

já tentou utilizar

espero ter ajudado

:wink:

leonardobhbr

Crie uma Thread para isso de uma estuda sobre thread

denirroberto

AlissonSchneider:
já tentou utilizar

espero ter ajudado

;)

O parceiro já sim mas o tipo primitivo não afeta quando se usa na mesma classe.

denirroberto

Puts parceiro, me de um exemplo dessa tal de thread

visola

Você precisa registrar dois listeners na sua janela principal:

  • FocusListener - toda vez que o usuário alternara para outra janela de outro programa e voltar, você verifica o status da tecla CAPSLOCK e atualiza na sua janela
  • KeyListener - toda vez qeu o usuário apertar uma tecla, você verifica e atualiza o status na sua janela
    Se o KeyListener não funcionar, pode usar o AWTEventListener, registrando-o no toolkit da seguinte forma:
Toolkit.getDefaultToolkit().addAWTEventListener(meuListener, AWTEvent.KEY_EVENT_MASK);

Onde meuListener é a instância da implementação de AWTEventListener. Este tipo de listener (AWTEventListener) ouve todos os eventos que acontecem na sua aplicação, não importando qual janela esteja selecionada. Se for o caso de sua aplicação ter mais de uma janela.

AlissonSchneider

denirroberto:
AlissonSchneider:
já tentou utilizar

espero ter ajudado

;)

O parceiro já sim mas o tipo primitivo não afeta quando se usa na mesma classe.

Sim entendo eu imaginei que você chamaria isso em outra tela ou seja outra classe como por exemplo tivesse na texa x e pressionasse o botao e alterasse a y

abrass

:wink:

visola

Já que os listeners não deram certo para você (rolaram umas mensagens privadas aqui pessoal), então você vai ter que usar uma thread como o leonardobhbr disse:
Uma thread que verifique o estado da tecla de tempos em tempos e controlar o ciclo de vida dela. Algo do tipo:

public class VerificadorCapsLock extends Thread {
   private boolean parar = false;

   public void parar() {
      parar = true;
   }

   public void run () {
      while (! parar) {
         // coloca o código do seu método aqui
         try {
            Thread.sleep(100); // dorme por 100 milisegundos
         } catch (InterruptedException ie) {
         }
      }
   }
}

Depois em algum lugar na inicialização da sua aplicação:

VerificadorCapsLock verificador = new VerificadorCapsLock();
verificador.start();

E quando sua aplicação estiver sendo fechada:

verificador.parar();
denirroberto

Blz parcerada, é isso ai, fiz alguns ajustes para adaptar na minha aplicação e ficou show, maravilha, o caminho é esse mesmo eu tava misturando acesso nativo com Java. Valeu galera.

Criado 20 de janeiro de 2011
Ultima resposta 21 de jan. de 2011
Respostas 8
Participantes 4