[Resolvido]Não consigo utilizar o KeyListener

5 respostas
danilotorchio

Olá pessoal, sou novato no fórum e também no java, por isso, desde já peço desculpas se criei o tópico no lugar errado, ou fiz alguma coisa que não seja conforme manda a regra. Eu procurei nos exemplos em muitos tópicos a resposta mas não encontrei… por isso vou colocar aki!

O problema é o seguinte… como bom estudante, resolvi treinar desenvolvendo a clássica calculadora. Até então tudo bem, adicionei todas as funcionalidades básicas, tudo ok. O problema realmente começou quando eu tive a ideia de acionar os botões da calculadora através do teclado. Estudei bastante sobre KeyListener, implementei todos os métodos, mais não estava funcionando.
Então neste mesmo fórum, encontrei um tópico muito interessante que explica o que é e como utilizar o ActionMap e o ImputMap, que funcionou maravilhosamente bem… mas…
como teimoso que sou, voltei para o KeyListener, querendo agora que ao pressionar uma tecla no teclado, por exemplo o número 1, a tecla referente ao número 1 na calculadora mude a cor do fundo… através da propriedade setBackground()… Ok, não é complicado tbm… porém eu não consigo fazer o keylistener funcionar… não entendo pq não funciona… com o frame vazio, eu consigo utilizar o keylistener… mais com todos os componentes adicionados… eu não consigo… alguem saberia me explicar pq??

segue o código… eu coloquei apenas oq acho relevante… caso precise, eu coloco o resto… eu não adicionei tbm a funcionalidade para alterar a cor do fundo… eu queria apenas fazer funcionarrr primeiramente… seu eu conseguir apertar a tecla e a aparecer a msg… o resto ta fácil!

public CalcForm()
{
	super( "Calculadora" );
	initComponents();
	addKeyListener( this );
}

private void initComponents()
{		
	setContentPane( getPnlPrincipal() );
	setJMenuBar( getMenu() );
	acoesDoMenu();
	acoesDoTecladoVirtual();
	acoesDoTeclado( getPnlPrincipal() );
}
public void keyPressed(KeyEvent evt)
{
	JOptionPane.showMessageDialog( null, "Você pressionou a tecla: " + KeyEvent.getKeyText( evt.getKeyCode() ) );
}
public void keyReleased(KeyEvent evt)
{
	// TODO Auto-generated method stub	
}
public void keyTyped(KeyEvent evt)
{
	// TODO Auto-generated method stub	
}

Desde já muito obrigado!!!

5 Respostas

carlos.e.a

Voce adicionou um listener para o seu frame. Entao ele precisa estar com o foco para acionar o observador. Ao adicionar novos componentes ao seu frame ele nao irá mais receber o foco. Aqui tem a solucao para esse problema:

danilotorchio

Quer dizer que o problema todo estava no foco?? hauehuaheuhauea
q burro eu… deu certo…

public CalcForm()
{
	super( "Calculadora" );
	initComponents();
	setFocusable( true );
	addKeyListener( this );
}

valeu carlos.e.a
funcionou direitinho… =]

carlos.e.a

O problema de fazer dessa forma vai ser só quando outro componente do frame tiver o foco…Mas se isso resolve pra voce blz!

Té!

danilotorchio

mais qual outra forma eu poderia fazer?

carlos.e.a

A que postei no link ^ ^

Criado 22 de janeiro de 2012
Ultima resposta 23 de jan. de 2012
Respostas 5
Participantes 2