Acionar jbuton com tecla

11 respostas
P

Tenho um app feito com Swing, preciso que a qualquer momento que o usuário teclar F10 esse botão seja acionado. Tem como fazer isso?

11 Respostas

S

botao.setMnemonic(KeyEvent.VK_F10);

dudaskank

Sim, você pode dar uma olhada nos javadocs de java.awt.Action e javax.swing.KeyStroke

espero que ajude… flw

P

Cara o lance da tecla de função não virou. Uso o NetBeans e joguei em tudo quanto era canto e não rolou.

S

É o seguinte, dessa

vc tera a usar alt F10 para fazer a ação no botão

agora so apertando F10 se fosse em um menu seria assim

se for na aplicação vc poderia fazer assim resgistra um key evente para a tela e na ação do key event vc verifica se a tecla apertada foi F10 se tiver sido vc chama o metodo q faz oq vc quer.

qq coisa grita ai.

Falou

P

Deixa eu ver se peguei o espiríto do que deve ser feito. Como eu capturo se a tecla F10 foi precionada. Não tenho idéia de como fazer isso.

S
this.addKeyListener(new KeyAdapter(){ //registra um KeyListener para o componente
            
            public void keyReleased(KeyEvent e) {  // metodo q tratara o evento
                if(e.getKeyCode() == KeyEvent.VK_F10)  //verificando se o a tecla q o usuario precionou fo F10
                    System.out.println("Tecla F10 Precionada");  //se for F10 emite essa mensagem
            }
        
        });

tem um tutorial no PJ http://www.portaljava.com/home/modules.php?name=Content&pa=showpage&pid=17
q explica legal sobre eventos do swing dando uma olhada nela vc consegue entender melhor oq eu fiz ai. :D

P

Valeu mesmo.

O último post não funfou. Mas o esquema do ALT + Tecla já funciona.

Vou quebrar o galho assim mesmo.

S

o utimo nao fncionou?

ue eu teste antes de manda

vc quer essa ação de aperta F10 em qual compoente nao e nao tela nao?

P

Eu testei em vários pontos do meu código.

E em nenhum lugar funcionou.

Como eu uso o NetBeans e crio a tela usando matisse, adicionei seu código no evento KeyPressed do jForm, jPanel e dos JTextField que são editáveis. E nada do negócio funcionar.

Se eu trocava o seu código por isso

jButtonImprimir.setMnemonic(KeyEvent.VK_P);

Apertando ALT+P funciona.

O ideal é não ter que usar o ALT pois nos sistemas legado da empresa o F10 por padrão salva, o F7 consulta e por aí vai. Queria seguir o padrão.

dudaskank

Eu ainda acho melhor usar actions... apesar que só o F10 ele não conseguiu executar a ação, só não entendi bem o porque disso, já que não deu erro e no menu aparece a tecla como aceleradora também... sei lá :p

package teste.guj;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;

public class OiMundoAction extends AbstractAction {
	private static final long serialVersionUID = 1L;

	public OiMundoAction() {
		super("Oi Mundo!");
		putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control F10"));
	}

	public void actionPerformed(ActionEvent e) {
		JOptionPane.showMessageDialog(null, "Oi Mundo!");
	}
}
package teste.guj;

import java.awt.BorderLayout;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class OiMundoActionTeste extends JFrame {
	private static final long serialVersionUID = 1L;

	public OiMundoActionTeste() {
		super();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Action oiMundo;
		oiMundo = new OiMundoAction();
		JMenuBar bar = new JMenuBar();
		JMenu menu = new JMenu("oi");
		menu.add(new JMenuItem(oiMundo));
		JButton button = new JButton(oiMundo);
		getContentPane().add(bar, BorderLayout.NORTH);
		bar.add(menu);
		getContentPane().add(button, BorderLayout.CENTER);
		pack();
	}

	public static void main(String[] args) {
		new OiMundoActionTeste().setVisible(true);
	}
}
S

Vamos tenta de novo

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;

public class TesteF10 extends JFrame{

    public TesteF10(){
        this.setBounds(100,100,100,100);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        this.addKeyListener(new KeyAdapter(){
            public void keyReleased(KeyEvent e){
                if(e.getKeyCode() == KeyEvent.VK_F10)
                    System.out.println("Tecla F10 precionada");
            }
        });
        
        this.setVisible(true);
    }
    
    public static void main(String[] args) {
        new TesteF10();
    }
}
Criado 12 de julho de 2006
Ultima resposta 14 de jul. de 2006
Respostas 11
Participantes 3