Actionperformed do JButton com enter

5 respostas
S

Olá,

Estou tentando acionar o ActionPerformed do botão pressionar a tecla enter… da forma que está abaixo funciona nos botoes que estão dentro de um painel por exemplo, agora em botões que estão dentro de uma JToolBar, não funciona!

Gostaria também de fazer alguma coisa mais genérica para esse caso, valendo para qualquer botão;

((JButton).doClick(); // tentei isso mais não funcionou
btnIncluir.doClick(); //aqui deu certo!

Encontrei vários casos no fórum, porém não achei nenhum que solucionasse o meu problema…

public void keyPressed(KeyEvent e) {
            int tecla = e.getKeyCode();
            
            if ( tecla == KeyEvent.VK_ENTER  && ( ( JButton) e.getSource() ).hasFocus() )
                btnIncluir.doClick();

}

Desde já agradeço!

Obrigado

Diego

5 Respostas

C

Eu resolvi assim:

public void keyPressed(KeyEvent e)
{
	if(e.getKeyText(e.getKeyCode()).equals("Enter"))
        {
		.
                .
                .
         }
}
P

Tenta colocar o botão como o “padrão” da sua tela, assim:

minhaTela.getRootPane().setDefaultButton(meuBotao);

ao apertar o “Enter” o botão recebe o comando.

espero que ajude

S

Ola

minhaTela.getRootPane().setDefaultButton(meuBotao);

Tentei essa idéia também não funcionou! Acabei fazendo dessa forma:

public void keyPressed(KeyEvent e) {
            int tecla = e.getKeyCode();
            
            switch(tecla) {
                // Enter
                case 10:
                {
                    if (btnIncluir.hasFocus()){
                        ((JButton)e.getSource()).doClick();
                    } else if (btnAlterar.hasFocus())
                        ((JButton)e.getSource()).doClick();
                    else if (btnCancelar.hasFocus())
                        ((JButton)e.getSource()).doClick();
                    else if (btnConsultar.hasFocus())
                        ((JButton)e.getSource()).doClick();
                    else if (btnExcluir.hasFocus())
                        ((JButton)e.getSource()).doClick();
                    else if (btnFechar.hasFocus())
                        ((JButton)e.getSource()).doClick();
                    else if (btnPesquisar.hasFocus())
                        ((JButton)e.getSource()).doClick();
                    else if (btnSalvar.hasFocus())
                        ((JButton)e.getSource()).doClick();
                    else if (tbConsulta.hasFocus()){
                     //
 
                    } else  if ( (( JTextField ) e.getSource() ).hasFocus())
                        ((JTextField)e.getSource()).transferFocus();                    
                    else if ( (( JComboBox ) e.getSource() ).hasFocus())
                        ((JComboBox)e.getSource()).transferFocus();                    
                }
            }
        }

1º problema:
Essa parte eu gostaria de fazer uma vez só para todos os botões.

if (btnIncluir.hasFocus()){
                        ((JButton)e.getSource()).doClick();
                    }

Algo desse tipo, só que não funcionou!

if ( (( JButton ) e.getSource() ).hasFocus()){
             ((JButton)e.getSource()).doClick();

2º problema: Não sei porque mas só executa um dos dois… o que eu coloco primeiro funciona, neste caso os JTextField… quando chega no JComboBox não entra na rotina do Combo…

else  if ( (( JTextField ) e.getSource() ).hasFocus())
     ((JTextField)e.getSource()).transferFocus();                    
else if ( (( JComboBox ) e.getSource() ).hasFocus())
    ((JComboBox)e.getSource()).transferFocus();

Alguém tem alguma idéia do que pode ser feito neste caso!

Obrigado

Diego

P

Tenta assim:

JButton button = new JButton("OK");
registraEnterNoBotao(button);


   /**
    * Mapeia a action da barra de espaço na tecla enter.<br>
    * O botão é passado por referência.
    */
    private void registraEnterNoBotao(JButton b) {
        b.registerKeyboardAction(
                b.getActionForKeyStroke(
                KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, false)),
                KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false),
                JComponent.WHEN_FOCUSED);
        
        b.registerKeyboardAction(
                b.getActionForKeyStroke(
                KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true)),
                KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true),
                JComponent.WHEN_FOCUSED);
    }

Assim o botão que tem o foco é acionado pela tecla de espaço e também pela tecla de ENTER.
Chama o método passando um JButton pra ele. O método altera o mapeamento das tecla SPACE e ENTER por referência.

S

Desculpa a demora…

Valew pela ajuda funcionou!!

Obrigado!

Criado 15 de outubro de 2006
Ultima resposta 28 de out. de 2006
Respostas 5
Participantes 3