|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
[JAVA] Come usare un KeyListener???
Salve..
Io ho la mia bella classe: "Frame extends JFrame implements ActionListener, KeyListener", e fin qui tutto a posto... Ora, il problema è che non mi ascolta minimamente la tastiera... E' come se le azioni: keyTyped(), keyPressed() e keyRelased non esistessero... Qualunque cosa gli faccio fare.... Esempi che ho usato e non mi funzionano: Codice:
public void keyPressed(KeyEvent key) { System.out.print("premuto"); } public void keyPressed(KeyEvent key) { if(key.getKeyCode() == KeyEvent.VK_0) System.out.print("premuto"); } public void keyPressed(KeyEvent key) { int keyCode = key.getKeyCode() switch(keyCode){ case(KeyEvent.VK_0):{ System.out.print("premuto 0"); break; } case(KeyEvent.VK_B):{ System.out.print("premuto b"); break; } } }
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: May 2005
Città: Modena
Messaggi: 276
|
hai provato ad aggiungere addKeyListener(this);??
__________________
andrew |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Metti nel costruttore della tua classe una chiamata ad un metodo del tipo "private void myKeyboardEventManager()" che definirai sempre nella tua classe per fare un lavoro del genere:
Codice:
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher( new KeyEventDispatcher() { public boolean dispatchKeyEvent(KeyEvent e) { if (e.getID()== KeyEvent.KEY_TYPED) { String key = "" + e.getKeyChar(); if (key.equalsIgnoreCase("A")) { System.out.println("Premuto: A"); //... fai quello che devi fare qui } } } }; ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
mhm è così complicato?
xke io vedevo degli esercizi in internet che semplicemente mettevano public class NomeClasse implements KeyListener ed all'interno implementavano i metodi keyPressed, keyTyped e keyRelased.... E funzionava.. Xke a me non funziona a quel modo? EDIT: Ora il porgetto l'ho consegnato e posso capire bele java.. non ho piu fretta.. ^_^ per cui m sofermo nel "capire" piu che nel realizzare.. ASD
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Apr 2007
Messaggi: 263
|
Non basta fare come ha detto andrew1988??
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
gno..... gia provateo.. :sad:
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
addKeyListener(this) dovrebbe funzionare...ma solo se il tuo frame è in focus...
Io avevo provato a usare un KeyListener su un JPanel e non c'è stato modo di fargli prendere gli eventi della tastiera...ho risolto aggiungendo un TextField e usando il KeyListener su quello...
__________________
iMac 27" 5K |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Sì, il codice che ho postato è un modo per "aggirare" il problema: in pratica intercetta gli eventi che arrivano al FocusManager con un Dispatcher nel quale viene processato l'evento "Key Typed" e confrontando il carattere contenuto nell'evento stesso puoi decidere se è di tuo interesse associarci qualche azione.
Mettendo quel codice in un metodo interno alla classe che estende il tuo Component (JPanel) il Dispatcher così creato rimane "vivo" finchè rimane vivo il Component stesso (per esempio, alla chiusura del frame che contiene quel JPanel anche il Dispatcher "muore" e smette di intercettare gli eventi diretti al KeyboardFocusManager). In passato ho avuto anch'io problemi analoghi a quelli illustrati da Don[ITA] e ho risolto così (soluzione comune a giudicare da altri casi visti in giro). @EDIT: Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 01-07-2008 alle 14:40. |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Salve a tutti,
qualcuno mi può spiegare perché alla pressione di tasti diversi ottengo un keyCode identico per tutti? Ho fatto un programma molto semplice per fare un test ed ecco cosa viene fuori alla digitazione della stringa "ciao" nel JTextField: Codice:
Char code: 0; Char Pressed: c Char code: 0; Char Pressed: i Char code: 0; Char Pressed: a Char code: 0; Char Pressed: o Uno dei miei problemi è anche quello di intercettare la pressione del tasto BackSpace, ma se il CharCode è sempre lo stesso mi sembra un po' problematico. Il codice del KeyListener è il seguente: Codice:
public void keyTyped(java.awt.event.KeyEvent e) { int charCodePressed = e.getKeyCode(); char charPressed = e.getKeyChar(); jTextArea.append("Char code: "+ charCodePressed + "; Char Pressed: " + charPressed + "\n"); } Ultima modifica di fbcyborg : 24-10-2008 alle 18:08. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:04.