Ola pessoal…
Estou querendo colocar meu meu JDialog para ouvir eventos do teclado, nesse JDialog eu tenho um ButtonGroup com varios JCheckBox, e eu quero que funcione da seguinte maneira, quando apertar seta esquerda ou seta direita, (VK_LEFT ou VK_RIGHT) quero trocar o JCheckBox, selecionar para o proximo a esquerda ou direita respectivamente.
Eu coloquei meu JDialog para ouvir eventos do teclado, porem se o focus estiver nos proprios JCheckBox ou em algum JTextField da tela ou no JTable que tbem tem, o codigo q fiz nao funciona, devido ao JDialog nao estar com o focus (eu acho)…
Tem alguma maneira de fazer o meu JDialog ouvir os eventos do teclado mesmo com o focus estando em algum outro componente?
Desde ja grato !!!
Para essas situações você deve usar o ActionMap e o Keymap:
http://www.guj.com.br/posts/list/47289.java#258583
Deixe todos os componentes com isFocusable(false), deixando apenas o componente ouvinte focusable
Ola pessoal, valeu as respostas…
viny godoy, vou dar uma olhada com mais calma no q tu sugeriu otra hora com mais tempo, vlw…
heatcold, eu tentei fazer o focusable = false pra tds os componentes mas dai eu nao consigo usa-los, os jcheckbox funcionam somente com mouse, os jtextfield nao recebem o focus, neim o jtable, faltou alguma coisa ou eh soh fazer o focusable = false mesmo?
vlw t+
Tempos atrás tive de fazer uma interface parecida com uma calculadora. Era necessario capturar as teclas do usuario e relaciona-las com os botões de numeros e operações na tela. Nesse caso, tirei todos os focos deixando apenas o do JFrame enabled e adicionei um JKeyPressListener à ele. Funcionou muito bem. Estou dizendo deixar o isFocusable(false) e não os setEnabled(false). Voce poderá usar os outros componentes normalmente.
Ainda acho a solução com o ActionMap e KeyMap mais elegante, mesmo para o caso da calculadora.
Você registra ele uma vez só, para seu painel, e pode adicionar novos componentes à vontade sem ter a preocupação de alterar qualquer propriedade deles (incluindo focusable ou listeners).
Eu não testei ActionMap e KeyMap mas confio no amigo.
Valeu pela dica.
foi exatamente a propriedade isFocusable(false) que alterei nos componentes do meu JDialog, estranho, eu nao conseguia mudar o foco para os componentes, em consequencia nao conseguia usa-los…
mas valeu a dica !!! vou tentar fazer com a solucao do ActionMap e KeyMap hj a noite, qq coisa dou um grito aqui…
Obrigado t+