Teclas de função (F2, F3, F4, ...) como utilizar?

Galera, existe alguma maneira de utilizar as teclas de função do teclado como tecla de atalho?

Tipo assim:
se eu pressionar F2 o meu form (JFrame) executa um método pré-definido,
se eu pressionar F3, executa outro método,
e assim sucessivamente.

Como posso fazer isso trabalhando com swing???

Desde já agradeço a ajuda.

coloca evento :slight_smile:

tipo, se vc tem um JMenuBar e vc tem um JMenuItem
coloca o evento ali …

se nao, coloca um evento no frame que verifica se a tecla digitada é uma das tuas
pre-definitas…

abraços

Pesquisar no fórum ajuda muito, sabia?
Que tal dar uma olhada neste tópico, criado para problemas como este?

No meu caso que é web, utilizando primefaces eu criei um xhtml com os seguintes códigos:

<ui:fragment
		xmlns="http://www.w3.org/1999/xhtml"
		xmlns:ui="http://java.sun.com/jsf/facelets"
		xmlns:h="http://java.sun.com/jsf/html"
		xmlns:f="http://java.sun.com/jsf/core"
		xmlns:p="http://primefaces.org/ui"
		xmlns:pe="http://primefaces.org/ui/extensions">
		<p:hotkey
				id="hotkey_painel"
				bind="ESC"
				immediate="true"
				actionListener="#{controleMB.redirecionarPainel}" />
		<p:hotkey
				id="hotkey_ajuda"
				bind="F1"
				handler="alert('Ajuda');"
				immediate="true" />
		<p:hotkey
				id="hotkey_sair"
				bind="F2"
				action="#{loginMB.logout}"
				immediate="true" />
</ui:fragment>

Abraço!

[quote=lleos]No meu caso que é web, utilizando primefaces eu criei um xhtml com os seguintes códigos:

<ui:fragment
		xmlns="http://www.w3.org/1999/xhtml"
		xmlns:ui="http://java.sun.com/jsf/facelets"
		xmlns:h="http://java.sun.com/jsf/html"
		xmlns:f="http://java.sun.com/jsf/core"
		xmlns:p="http://primefaces.org/ui"
		xmlns:pe="http://primefaces.org/ui/extensions">
		<p:hotkey
				id="hotkey_painel"
				bind="ESC"
				immediate="true"
				actionListener="#{controleMB.redirecionarPainel}" />
		<p:hotkey
				id="hotkey_ajuda"
				bind="F1"
				handler="alert('Ajuda');"
				immediate="true" />
		<p:hotkey
				id="hotkey_sair"
				bind="F2"
				action="#{loginMB.logout}"
				immediate="true" />
</ui:fragment>

Abraço![/quote]
Só faltou um pouco mais de atenção para ler este trecho informado pelo autor do tópico

Correto drsmachado, ignorem meu post!
Abraço

Que post massa… do Godoy

O machado… mesmo assim eu continuo achando que esse evento deve ser associado
ao JMenuItem =]

Abraços

[quote=d34d_d3v1l]Que post massa… do Godoy

O machado… mesmo assim eu continuo achando que esse evento deve ser associado
ao JMenuItem =]

Abraços[/quote]
A vantagem de linguagens de programação como o java é que você pode ter uma série de opções para resolver o mesmo problema.
Pense comigo, por que você precisaria criar um JMenuItem para identificar as teclas utilizadas se você pode, simplesmente, associar eventos diretamente a elas?
Entendo tua forma de pensar, mas, na minha opinião, seria redundância e duplicação de código.
Mas, sim, pode ser associado à JMenuItem.

[quote=drsmachado]
Pense comigo, por que você precisaria criar um JMenuItem para identificar as teclas utilizadas se você pode, simplesmente, associar eventos diretamente a elas?
Entendo tua forma de pensar, mas, na minha opinião, seria redundância e duplicação de código.
Mas, sim, pode ser associado à JMenuItem.[/quote]

Entãoo…
deixa eu te mostrar mais ou menos o que eu to falando…

uma aplicaçãozinha desktop que eu fiz… Toda as teclas eu tenho atalhos no JMenuItem…
(Fiz no netbeans msmo)… só que tipo, quando associo o atalho ao botão o netbeans gera um código tipo este:

itemContasReceber.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F5, 0));
        itemContasReceber.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagem/receber.png"))); // NOI18N
        itemContasReceber.setText("Contas à Receber");
        itemContasReceber.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemContasReceberActionPerformed(evt);
            }
        });

entende? Então quero dizer que não é ‘duplicar’ código nem nada…

masss, se vc n for usar JMenuBar na tua aplicação, aí sim…

Algumas palavras chaves :
keylistener
keyadapter
keystrokes

E por ae vai.

Faz teu jframe principal implementar keylistener, ai se tu fizer certo(não colocando lógica nos actionperformed ) basta chamar os métodos de negócios de acordo com as teclas.

A questão dos botões é que, dependendo de como a implementação é feita, as teclas de atalho simplesmente não funcionam.
Por isso sugeri o tópico criado pelo ViniGodoy, onde ele exemplifica de forma bem clara isto.
Lógico que o exemplo é meio 8 ou 80, mas é uma forma de fazer isso.

fredferrao, embora a tua sugestão seja legal, eu já discordo da implementação de keylistener, prefiro fazer isso separado e implementar o pattern observer,

A forma correta de fazer isso é como está no post que o drsmachado colocou ali e que eu escrevi.
Quando falamos em “tecla de atalho”, não podemos garantir o foco em nenhum componente específico, daí a necessidade do InputMap e do ActionMap.

Só um detalhe… por que esse tópico foi aberto em “Assuntos gerais”? O fórum específico correto para ele é o de Interface Gráfica.
Assim você evita respostas em web, como a do Ileos.