Keylistener

8 respostas
T

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.

8 Respostas

vitor_lima

Dá pra implementar com KeyListener.

Vc sabe trabalhar com esse tipo de evento ?

T

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

R
Thiago Paulista:
vc poderia me mostrar como eu faço isso ???
/*
  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
  }
}

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

T

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

R
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

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 
           }
       } );
vitor_lima

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 ?

ViniGodoy

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.

vitor_lima

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)

Criado 3 de março de 2010
Ultima resposta 3 de mar. de 2010
Respostas 8
Participantes 4