Bom pessoal, lendo os seguintes tópicos:
http://www.guj.com.br/java/75002-duvida----actionmap-e-inputmap
http://www.guj.com.br/java/140986-como-acionar-os-bots-de-uma-calculadora-atrav-do-teclado
Ainda não consegui entender direito esse lance do InputMap e ActionMap.
Não adiantaria nada eu pegar copiar e colar sem entender, então o que fiz? O de sempre, ler a API.
Lendo sobre o InputMap vi que ele é uma associação da tecla( geralmente do teclado ) com um Objeto. Geralmente InputMap é usado com o ActionMap, que determina a AÇÃO quando a tecla é APERTADA. Se eu estiver errado, me corrijam. Até ai entendi.
Depois vi o método put que está nos exemplos. Ele recebe dois parâmetros, um KeyStroke( que é uma combinação de teclas ) e um objeto( um classe que extenda Object, ou seja toda classe do mundo, mas nesse caso, geralmente ActionMap ).
Esta linha eu entendi:
InputMap iMap = painelTeclado.getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW ); // recebe objeto Imap quando a janela está com foco
Agora o restante eu não entendi. Entendi apenas que o primeiro parâmetro a tecla que eu quero associar a um método actionMap, mas porque o segundo parâmetro está como string? Não deveria ser um método de um objeto ActionMap?
imap.put(KeyStroke.getKeyStroke("0"), "panel.button0press");
imap.put(KeyStroke.getKeyStroke("1"), "panel.button1press");
imap.put(KeyStroke.getKeyStroke("2"), "panel.button2press");
E:
ActionMap amap = panel.getActionMap();
//Mapeie os nomes de ação (aqueles, fornecidos na string ali de cima), para as ações em si:
amap.put("panel.buttonF1press", new HelpAction());
amap.put("panel.buttonF2press", new SaveAction());
amap.put("panel.buttonF3press", new ClearAction());
Isso quer dizer que o segundo parâmetro do método put de InputMap, deve ser um nome apenas REPRESENTATIVO, que está associado ao verdadeiro método que irá resolver o que fazer com a tecla apertada e essa associação ocorre no método put do ActionMap?