Keylistener

Ola pessoal

[color=red]gostaria de saber como eu faço para executar um botao de um programa apertando a tecla enter[/color]

tem haver com Keylistener ??

desde ja agradeço.

Dá pra implementar com KeyListener.

Vc sabe trabalhar com esse tipo de evento ?

vc poderia me mostrar como eu faço isso ???

[code]/*
Este exemplo mostra como escrever uma classe
que implementa a interface KeyListener.
*/

import javax.swing.;
import java.awt.
;
import java.awt.event.*;

public class Estudos extends JFrame{
public Estudos() {
super(“Eventos do Mouse e Teclado”);
Container c = getContentPane();
FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
c.setLayout(layout);

Teclado teclado = new Teclado();
this.addKeyListener(teclado);    

setSize(350, 250);
setVisible(true);

}

public static void main(String args[]){
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

/*
Classe auxiliar usada para obter eventos do
teclado. Como esta classe implementa a interface
KeyListener, ela deverá fornecer implementações para
os métodos keyPressed, keyReleased e keyTyped
*/
class Teclado implements KeyListener{
public void keyPressed(KeyEvent e){
JOptionPane.showMessageDialog(null,
“Uma tecla foi pressionada!”);
}

public void keyReleased(KeyEvent e){
// código aqui
}

public void keyTyped(KeyEvent e){
// código aqui
}
}

[/code]

Referência : http://www.arquivodecodigos.net/dicas/java-escrevendo-uma-classe-que-implementa-a-interface-keylistener-1100.html

sim

mas com esse exemplo acontece com todas as teclas sendo pressionadas, eu ostaria apenas que a tecla enter fosse pressionada

mas ja ajuda bastante.

grato

[quote=Thiago Paulista]sim

mas com esse exemplo acontece com todas as teclas sendo pressionadas, eu ostaria apenas que a tecla enter fosse pressionada

mas ja ajuda bastante.

grato[/quote]

   [code]bt_sair = new JButton("Fechar");
   frame.getContentPane().add(bt_sair);
   bt_sair.setBounds(215, 115, 75, 25);
   bt_sair.addActionListener(new ActionListener()
   {
       public void actionPerformed(ActionEvent e)
       {
           // açao do botao aqui 
       }
   } );[/code]

Crie uma classe que implementa ActionListener e KeyListener (de preferencia uma classe interna…) e adicione-o como um ouvidor de eventos do botão com os métodos addActionListener(ActionListener a) e addKeyListener(KeyListener k) do botao.

Ou seja, vc vai fazer algo como:

Jbutton btn = new JButton("Botão");
EscravoDoBotao sempreAtento = new EscravoDoBotao();
btn.addKeyListener(sempreAtento);
btn.addActionListener(sempreAtento);

Onde a classe EscravoDoBotao é a classe que consegue ouvir os eventos criados pelo teclado e pelo clique.

	class EscravoDoBotao implements KeyListener , ActionListener{
		public void keyPressed(KeyEvent arg0) {
			//Código executado quando o botão é pressionado
			
		}
		
		public void keyReleased(KeyEvent k) {
			k.getKeyCode();
			
		}
		
		public void keyTyped(KeyEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
		public void actionPerformed(ActionEvent arg0) {
				this.executaBotao();
		}

		private void executaBotao(){
				//Código referente as ações esperadas do botão
		}

	}

Em um dos 3 métodos que escutam os eventos do teclado vc vai ver se a tecla digitada é igual a tecla ENTER, se for, vc chama o método executaBotao()

Sabe como usar o objeto KeyEvent para descobrir a tecla ?

Use o KeyListener para definir botões sobre um componente específico. Se você precisar que esse botão seja ativado em componente há alternativas melhores, mais fáceis de programar e mais seguras:

  1. Se você quiser definir um único botão padrão para sua tela, simplesmente faça no construtor:
getRootPane().setDefaultButton(botao);

Esse botão ficará marcado com uma cor mais forte, indicando que é o padrão. Pressionar enter em qualquer campo irá aciona-lo.

  1. Se você tem uma série de botões, que precisam ser acionados pelas teclas (como os botões de uma calculadora), então melhor usar essa estratégia aqui:
    http://www.guj.com.br/posts/list/140986.java

  2. Se você tem um botão para ser acionado com uma tecla em conjunto com o ALT, é melhor então usar o método setMnemonic:

botaoSalvar.setMnemonic(KeyEvent.VK_S); //Aciona o botão salvar com ALT+S

O KeyListener costuma a ser a pior alternativa. Primeiro, porque ele deve ser definido em absolutamente todos os campos. Depois, que é fácil esquece-lo quando um campo novo surge. E, por último, o código gerado por ele é complexo e rebuscado. Use-o apenas quando você quiser fazer uma ação específica para um único componente.

Não tenho certeza, mas acho que o caracter gerado pelo botão Enter é o \n

Se eu estiver certo, vc pode inserir

if(k.getKeyChar() == '\n'){ //Se a tecla pressionada for igual a '\n' this.executaBotao(); }

ao método que escolher (o de pressionar, o de soltar ou o de digitar)