| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/12/2006 13:15:57
|
ffranco
Thread.start()
Membro desde: 02/09/2006 11:00:35
Mensagens: 29
Offline
|
Tenho um JFrame principal (tela inicial do aplicativo) que faz chamada às outras classes. Uma outra classe Calculadora (que é chamada da tela inicial) é tb um JFrame e é composta de botões que compõem o teclado da calculadora e têm suas funcionalidades escritas numa subclasse que implementa a ActionListener.
O problema é que agora inclui uma outra subclasse que implementa a KeyListener mas nada funciona via teclado.
Tentei incluir inicialmente apenas a função do KeyEvent dentro da subclasse que implementa a ActionListener e não funcionou pois precisei implementar o KeyListener no JFrame, só que fazendo isso tenho erro de compilação pois a classe Calculadora não é abstrata. Seu eu colocar ela como abstrata sou impedido de chamar ela pela tela principal pois a tela principal passa parâmetros para essa classe.
Alguém pode me dizer como devo estruturar o código para ter a funcionalidade dos botões e do teclado (de preferência sem precisar reescrever as funções já existentes na subclasse que implementa a ActionListener)?
Seguem trechos do código como está agora, ou seja, uma classe separada estendendo da classe KeyAdapter:
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/12/2006 14:23:04
|
FredMP
JavaBaby
![[Avatar]](/images/avatar/5f0453f78909173a7ce2eb874d2a7f52.png)
Membro desde: 08/04/2006 19:46:24
Mensagens: 92
Localização: São Pedro da Aldeia - RJ
Offline
|
Cara, eu costumo fazer da seguinte forma: crio uma classe interna (não-anônima) chamada ControladorEventos e essa classe implementa todos os listeners que preciso no frame, dentro dessa classe eu faço o tratamento dos eventos, e os botões e demais componentes adicionar essa classe como ouvinte. Mais ou menos assim:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/12/2006 18:37:11
|
ffranco
Thread.start()
Membro desde: 02/09/2006 11:00:35
Mensagens: 29
Offline
|
Prezado FredMP
Muito obrigado pela resposta!
Vou tentar aplicar desta forma.
Um Abraço,
ffranco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/12/2006 01:07:07
|
ffranco
Thread.start()
Membro desde: 02/09/2006 11:00:35
Mensagens: 29
Offline
|
Prezado FredMP,
Tentei desta forma mas ainda não consigo usar o teclado.
Seguem os trechos de código:
1º) Exemplo de um dos botões (os demais estão da mesma forma);
2º) Classe dos Listeners inlcuindo uma das funções (entrada dos números);
Obrigado!
ffranco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/12/2006 01:08:38
|
ffranco
Thread.start()
Membro desde: 02/09/2006 11:00:35
Mensagens: 29
Offline
|
Ah... me esqueci... tb inlcuí o trecho abaixo após os botões:
Valeu!!!
ffranco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/12/2006 20:02:16
|
ffranco
Thread.start()
Membro desde: 02/09/2006 11:00:35
Mensagens: 29
Offline
|
Por favor, alguém pode me ajudar com isso?
Obrigado,
ffranco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/12/2006 21:35:08
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
Dá uma olhada, é um projeto do NetBeans versão 5.0
| Nome do arquivo |
Listeners.zip |
Download
|
| Descrição |
Projeto usando os dois listeners ao mesmo tempo. Os Action estão registrados um para cada botão, e o key está registrado para o campo de texto e os botoes que chamam o método do campo de texto. |
| Tamanho |
11 Kbytes
|
| Baixado: |
319 vez(es) |
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/12/2006 22:35:54
|
ffranco
Thread.start()
Membro desde: 02/09/2006 11:00:35
Mensagens: 29
Offline
|
Prezado davidbuzzato,
Muito obrigado pela resposta, porém desta forma os Actions e os Keys ficam interdependentes. Além do mais, desta forma vou precisar reescrever toda a classe.
Meu objetivo é fazer os eventos trabalharem paralelamente, ou seja, os Actions tratam unicamente dos eventos dos botôes e os Keys unicamente dos eventos do teclado.
Vc sabe o que está impedindo o funcionamento no código acima?
Obrigado,
ffranco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2006 09:30:23
|
ffranco
Thread.start()
Membro desde: 02/09/2006 11:00:35
Mensagens: 29
Offline
|
Olá,
Alguém poderia me dar uma força com isso?
Obrigado,
ffranco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2006 20:36:51
|
ffranco
Thread.start()
Membro desde: 02/09/2006 11:00:35
Mensagens: 29
Offline
|
Pessoal,
Alguém pode tentar me ajudar com isso?
Obrigado,
ffranco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/12/2006 12:20:35
|
FredMP
JavaBaby
![[Avatar]](/images/avatar/5f0453f78909173a7ce2eb874d2a7f52.png)
Membro desde: 08/04/2006 19:46:24
Mensagens: 92
Localização: São Pedro da Aldeia - RJ
Offline
|
Opa! Só vi sua msg agora. Vou testar seu código e te passo um feedback assim que puder. Por hora, tente usar outros métodos da interface KeyListener (como o keyPressed) ao invés de usar o keyTyped.
att,
Fred
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/12/2006 15:01:35
|
ffranco
Thread.start()
Membro desde: 02/09/2006 11:00:35
Mensagens: 29
Offline
|
Valeu Fred!!!
Aguardo seu retorno.
Muito Obrigado,
ffranco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2007 21:46:06
|
ffranco
Thread.start()
Membro desde: 02/09/2006 11:00:35
Mensagens: 29
Offline
|
Prezados Fred e demais amigos do GUJ,
Ainda estou sem solução para este problema.
Se alguém puder me ajudar vou ficar muito grato.
Um Abraço,
ffranco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2007 10:17:58
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Já tentou, ao invés de usar um KeyListener, usar um ActionMap e um InputMap?
Talvez o problema que você esteja tendo é que o componente só recebe eventos de KeyStroke se tiver o foco.
Para associar ações a um KeyStroke, você primeiro precisa criar objetos da classe KeyStroke. A classe KeyStroke é uma classe de conveniência que encapsula a descrição de uma tecla. Para pegar um KeyStroke, ao invés do construtor, use um método estático getKeyStroke. Por exemplo, para o ctrl+b:
Ou, alternativamente:
Cada JComponent tem três input maps, cada um mapeando objetos associados para ações. Os três InputMaps representam cada um três condições diferentes, que são processadas nessa ordem.
1 - WHEN_FOCUSED: Quando o componente tem o foco, é a primeira a ser processada;
2 - WHEN_ANCESTOR_OF_FOCUSED_COMPONENT: Quando esse componente contém o componente que tem o foco;
3 - WHEN_IN_FOCUSED_WINDOW: Quando esse componente está na mesma janela que tem o foco.
Você obtém o InputMap de um componente chamando getInputMap, por exemplo:
InputMap imap = panel.getInputMap(JComponent.WHEN_FOCUSED);
Esse mapa será consultado apenas quando o componente tiver o foco do teclado. No caso da calculadora, você deveria usar, no painel que contém os botões, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT.
O problema é que o InputMap não mapeia objetos diretamente para o um Action. Para isso, você tem que usar uma segunda classe, a ActionMap. O código fica meio esquisitinho mas basicamente é assim:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/08/2011 01:39:13
|
MNalonS
Smalltalk
![[Avatar]](/images/avatar/413a5c5cfc83834c1cd832facb7efd7b.jpg)
Membro desde: 15/04/2011 00:17:21
Mensagens: 4
Offline
|
Como faço para associar uma ação à teclas que não sejam numéricas? qual string devo passar em KeyStroke.getKeyStroke(str) para associar a tecla * do teclado a uma ação?
|
|
|
 |
|
|