Acionar botão com teclado em foco em jTextField

11 respostas
P

Pessoal quando estou no jTextField eu capturo se o usuário digitou determinada tecla da seguinte maneira:

if(KeyEvent.getKeyText(evt.getKeyCode()) == "F9"){
            
        }

Minha dúvida é como fazer quando o cara digitar o F9 o botão x ser pressionada e logicamente todo o código dentro dele ser executado?

11 Respostas

emmanuel.silva

Para exeuctar um evento de um botão sem precisar que o usuario clique pode utilizar o metodo doClick() no JButton:

MyButton.doClick();

Valeu.

P

Valeu cara, tá funcionando beleza.

Só um detalhe, para um F9 eu faço como no exemplo que postei e para simular um CTRL + Q. Como seria?

emmanuel.silva

Vc verifica o modificar do evento, assim vc pode verificar se o usuario pressionou o ALT + alguma tecla ou CTRL + alguma tecla , etc…
tenta assim:

if(KeyEvent.getKeyText(evt.getKeyCode()) == “F9” && evt.getKeyModifiersText() == KeyEvent.SHIFT_MASK ){

}
P

Cara tá dando um erro:

getKeyModifiersText(int) cannot be applied to ()

Travei… :lol:

emmanuel.silva

Post o codigo ai para eu ver o que esta acontecendo

emmanuel.silva

Vc pode fazer o seguinte

vc pode mapear essa tecla de atalho no seu frame, fazendo com que em qualquer lugar do frame quando o usuario por exemplo clicar CTRL + Q :

KeyStroke ksSalvar = KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.SHIFT_MASK, true);

getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(ksSalvar, SalvarAction);

getRootPane().getActionMap().put(SalvarAction, new AbstractAction() {

private static final long serialVersionUID = -4928658259483500995L;

public void actionPerformed(ActionEvent ae) {

//codifique aqui

}

});

Se vc não quiser nemhum modificar por exemplo só a tecla q, vc cria o KeyStroke e no lugar do KeyEvent.SHIFT_MASK vc coloca 0

então quando vc iniciar o frame e todos os objetos na tela chame esse trecho de código blz…

P

Cara fiz o exemplo que vc falou e ele só funciona na combinação SHIFT + Q, quando eu teclo CRTL + Q não acionada nada.
Tentei no código mudar para CTRL mas tem consegui. Tem como isso ser feito?

emmanuel.silva

Cara, tenta assim troquei a linha JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
para JComponent.WHEN_IN_FOCUSED_WINDOW
ou seja quando a janela estiver em focus vai funcionar, agora acho que vai, testei
aqui tanto com o SHIFT quanto o CTRL.

agora eu acho que vai :lol:

KeyStroke ksSalvar = KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_MASK, true);

getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ksSalvar, SalvarAction);

getRootPane().getActionMap().put(SalvarAction, new AbstractAction() {

private static final long serialVersionUID = -4928658259483500995L;

public void actionPerformed(ActionEvent ae) {

JOptionPane.showMessageDialog(null, Teste);

}

});
P

Valeu cara. Agora funcionou legal.

P

Tinha pintado outra duvida aqui mas já resolvi.
Valeu.

emmanuel.silva

blz cara, qualquer duvida é só postar

Criado 24 de agosto de 2006
Ultima resposta 25 de ago. de 2006
Respostas 11
Participantes 2