| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:06:33
|
dudaskank
GUJ Ranger
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline
|
Boa tarde pessoal
Andei lendo no guj uns tópicos sobre ActionMap e InputMap e eles pareciam que resolveriam meus problemas. Li os seguintes tópicos:
Dúvida - ActionMap e InputMap
ActionListener x KeyListener
Porém não consegui. Coloquei um InputMap em um JPanel e associei alguns nomes, e esses nomes coloquei também no ActionMap, sempre enviando para a mesma ação.
Meu problema é que, quando a ação é executada, eu não consigo saber qual a tecla que o usuário apertou, nem o KeyStroke e nem o nome que usei para mapear a tecla para a ação, e é exatamente disso que preciso, para poder atualizar alguns contadores que se referem as teclas em si.
Outro problema é que preciso da tecla independente dos modificadores, ou seja se apertar a, shift+a, ctrl+a, vou saber que ele apertou a tecla a. Inclusive, preciso saber também se ele apertou só os modificadores (shit, ctrl, etc).
Atualmente, faço tudo isso utilizando KeyListener e funciona bem, só que aí fica complicado caso eu venha incluir alguns outros componentes que aceitam foco no meu JPanel.
Espero que não tenha ficado complicado de entender, daqui a pouco devo colocar algum código de como estou fazendo atualmente.
Valeu
|
Eduardo Oliveira
Toque a balada do amor inabalável, eterna love song de nós dois...
Página |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 15:42:11
|
dudaskank
GUJ Ranger
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline
|
Pessoal, separei o código aqui pra tentar dar uma explicada melhor no meu problema, quem sabe isso ajuda.
Criando o JFrame e colocando o JPanel nele:
E aqui o meu KeyListener:
O getKeyAction ali retorna a minha classe de ação associada com a tecla, e press() incrementa em 1 o valor da quantidade de vezes que ela foi pressionada. Esta classe verifica esse valor para dizer se ela está ou não sendo pressionada. O método release() seta esse valor com 0.
Aqui é onde faço o mapeamento:
Onde action é:
Usando o InputMap + ActionMap no componente que tem um listener como esse, o que aparece no debug ao apertar a letra a sozinha é apenas
Sem nenhum sinal do número da tecla que eu preciso.
|
Eduardo Oliveira
Toque a balada do amor inabalável, eterna love song de nós dois...
Página |
|
|
 |
|
|
|
|