Atalhos F1, F2, F3 em botões [Resolvido]

Olá a todos,

Eu tenho um JDialog com alguns botões e gostaria que em qualquer momento que o usuario teclar um F1, F2, F3… ele acionasse um botão correspondente.

a unica maneira que encontrei foi adicionar keylistners nos outros componentes, mas como são muitos estou procurando outra alternativa.

Alguém tem alguma sugestão?

Até um tempo atrás era usado o método:

porém ele se tornou obsoleto e sugerem que você faça isso dessa forma:

component.getInputMap().put(aKeyStroke, aCommand); component.getActionMap().put(aCommmand, anAction);

O KeyStroke é obtido através de:

sendo que o primeiro parâmetro é a tecla(obtido através da classe KeyEvent) que desejas utilizar como atalho e o segundo é o modificador(o modificador somente é usado se o atalho for tipo uma combinação: Ctrl, Alt ou Shift + F1, caso for usar só F1 basta colocar o modificador como 0)

o aCommand serve de identificador para mapear o botão com sua ação específica nos 2 HashMaps.

seu código ficaria +/- assim:

myButton.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), "F1"); myButton.getActionMap().put("F1", myButtonAction);

Qualquer dúvida, da uma lida na documentação dos métodos :smiley:

Valeu…

funcionou mas não deu exatamente para o que eu preciso, funcionou somente quando o foco está sobre o próprio botão que declarei o atalho, quando está em qualquer outro lugar ele não funciona.

preciso que quando o foco esteja em algum text field por exemplo ele acione o botão.

mesmo assim obrigado pela dica.

Consegui resolver meu problema, para os interessados segue o link de um exemplo

http://www.java2s.com/Code/JavaAPI/javax.swing/extendsJDialogPressEscapeKeytocloseadialog.htm

realmente, o padrão é com foco no componente…
esqueci de adicionar a condição no getInputMap :B

Valeu…