Dúvidas com InputMap/ActionMap - Obter tecla pressionada  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
dudaskank
GUJ Ranger
[Avatar]
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
[WWW]
dudaskank
GUJ Ranger
[Avatar]
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
[WWW]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team