Pessoal,
Preciso criar 3 teclas de atalhos para chamar métodos do sistema…
Gostaria de criar para as teclas “L”, “C” e “Space”.
Alguém poderia me ajudar?? to tomando um laço"!
Valeu,
Pessoal,
Preciso criar 3 teclas de atalhos para chamar métodos do sistema…
Gostaria de criar para as teclas “L”, “C” e “Space”.
Alguém poderia me ajudar?? to tomando um laço"!
Valeu,
Para esse tipo de coisa é melhor usar um ActionMap/KeyMap:
http://www.guj.com.br/posts/list/47289.java#258583
Você também pode fazer com KeyListeners, mas vai dar muito trabalho. Provavelmente vc teria que incluir o listener para todos os seus componentes, o que não é nada prático e difícil de manter.
Pelo que eu entendi uso dessa forma:
InputMap imap = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
imap.put(KeyStroke.getKeyStroke("L"), "atalho");
//Mapeamos o botão 1 a ação descrita pela string.
ActionMap amap = panel.getActionMap();
//Mapeia a string para a ação a ser executada.
amap.put("atalho", Aqui eu chamo o método que quero executar?);
Só nao entendi onde chamo o método que quero executar...
Valeu,
Isso. Ali você põe a ação, que será filha da classe AbstractAction, que por sua vez implementa Action. (Mais ou menos como vc faria se fosse um Listener).
Essa ação vai chamar (ou ela mesmo vai conter) o método específico.
O legal é que você também pode usar essa mesma ação num botão, barra de ferramentas ou menu. 
Sim… mas se eu quiser chamar um simples metodo, por exemplo… getCidade()… e nao uma Action…
Valeu
O java não tem como saber quem é esse método. Mas ele sabe o que é uma Action.
O que você tem que fazer é criar uma Action que a única coisa que faz é chamar esse método. Pode até mesmo ser com uma classe anônima, como você faria com um ActionListener:
panel.getActionMap().put("atalho", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
getCidade();
}
});
Na verdade, é uma boa você criar uma Action mais completa, já que não é normal que um sistema só opere através de teclas de atalho.
É verdade. Aliás, é sempre uma boa(quando der, e os prazos não forem absurdos) separar a interface dos seus eventos.
Sérgio, dá uma lida aqui tb(e teste os exemplos):
http://java.sun.com/docs/books/tutorial/uiswing/misc/action.html
Pessoal,
Valeu pela dica! Está funcionando!
Mas se eu quiser pegar somente a tecla CONTROL, SPACE, ALT… estas nao estou conseguindo, nao sei a string para o getKeyStroke…
Valeu,
É o texto control em letras minúsculas.
Veja na documentação:
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/KeyStroke.html#getKeyStroke(java.lang.String)