[java] création d'un KeyListener ... helpppp..

création d'un KeyListener ... helpppp.. [java] - Programmation

Marsh Posté le 09-07-2001 à 11:02:19    

Salut !
bon je suis pas doué en java .. j'ai du mal !!
 
voila mon pb : j'a n'arrive pas a creer un KeyListener..
j'ai adapté u nexemple dans un bouquin ..  
mais dans mon source :
 
class Projet extends JFrame implements KeyListener{
voila l'erreur :
Projet should be declared abstract; it does not define keyTyped(java.awt.event.KeyEvent) in Projet
 
je capte pas pkoi il ne veu pas de mon implement Keylistener.
 
merci d'essayer de m'aider :)

Reply

Marsh Posté le 09-07-2001 à 11:02:19   

Reply

Marsh Posté le 09-07-2001 à 11:17:58    

c pas tout a fais comme ça que ça marche.
Il faut que tu crees ta classe du listener. Tu peux le faire dans un fichier separé (conseillé si tu penses que ton listener va etre gros), ou au sein de la classe meme (inner Class).
bref la on va dire que tu le fais en inner Class.
 
Il faut que tu fasses :

Code :
  1. public class Controleur implements KeyListener
  2. {
  3.  public void keyPressed (KeyEvent e)
  4.  {
  5.   //code pour un key pressed
  6.  }
  7.                 public void keyTyped (KeyEvent e)
  8.  {
  9.   //code pour un key typed  }
  10.                 public void keyReleased (KeyEvent e)
  11.  {
  12.   //code pour un key relesased  }
  13. }


 
ça c pour la innner classe.
Puis ensuite, il faut que tu declare ton listener au composant auquel tu souhaites effectuer un controle.
 
en supposant que ce soit un JTextField :

Code :
  1. JTextField text = new JTextField ();
  2. text.addKeyListener(new Controleur());


 
Mais bon, au lieu de faire avec l'interface KeyListener, tu peux le faire avec KeyAdapter (par contre ce n'est plus une interface, il faut donc etendre au lieu d'implementer. Le seul avantage, c que t pas obligé de redefinir toutes les methodes, tu ne fas que ce qui t'interesses vraiment.
 
voila ! :sol:

Reply

Marsh Posté le 09-07-2001 à 12:11:34    

ok merci a toi petoulachi :)
je vais essayer ainsi alors :)
 
a+

Reply

Marsh Posté le 10-07-2001 à 17:42:13    

En fait le fait que ta classe implémente l'interface Tartempion, ça indique qu'elle possède un ensemble de méthodes définies dans cette interface.

Reply

Marsh Posté le 10-07-2001 à 23:25:32    

Petoulachi n'a que partiellement raison : tu peux tout à fait faire implémenter KeyListener à la classe qui lance les évènements :
 
public class MyTextfield extends TextField implements KeyListener {
 
public MyTextfiled(String text) {
super(text);
addKeyListener(this);
}
 
...
}
 
et ensuite, tu écris les méthodes déclarées dans l'interface.
 
En gros, les interface permettent de passer outre (en partie seulement) l'impossibilité de faire de l'héritage mulitple. Dans le cas présent, la class MyTextfield hérite de TextField, et vérifie aussi le prototype de l'interface KeyListener : cet objet est reconnu en tant que KeyListener, et à ce titre, peut être appellé comme tel. Si tu fais :
 
MyTextfield mt = new MyTextfield("toto" );
et ben (mt instanceof MyTextField) renverra true...
Bon, je sais, c'est pas forcément très clair, mais les interfacs, c'est vachement utile en Java (et en POO en général)

Reply

Marsh Posté le 11-07-2001 à 09:37:29    

merci, je sais tres bien que c possible de faire heriter la classe principale d'un Listener. Toutefois je le deconseille car c vraiment pas tres propre comme programmation ...
a +

Reply

Marsh Posté le 12-07-2001 à 00:08:02    

Comment ça, pas très propre?? Ca dépend ce que tu fais..Par Y' plein de classes qui s'écoutent elles-même dans l'API java (ah oui, si vous avez téléchargé le JDK, jetez un oeil sur les sources, on en apprend parfois de belles... :D)..Pis quand tu codes une applet, par exemple, et que la taille finalme du .jar est un facteur important, ben t'hésites pas!

Reply

Marsh Posté le 12-07-2001 à 16:46:46    

D'accord avec gfive !!

Reply

Marsh Posté le 12-07-2001 à 19:38:51    

bah programmez comme des porcs, moi ça me gene pas, mais j'aimerai pas etre celui qui passe derriere vous ...

Reply

Marsh Posté le 12-07-2001 à 21:34:14    

gfive a écrit a écrit :

MyTextfield mt = new MyTextfield("toto" );
et ben (mt instanceof MyTextField) renverra true...




 
Hihi... heureusement ke ca renvoie True... :D

Reply

Marsh Posté le 12-07-2001 à 21:34:14   

Reply

Marsh Posté le 12-07-2001 à 21:38:10    

Au fait, je vous rappelle juste une chose : les interfaces en JAVA c pas pour faire de l'heritage multiple...
:D

Reply

Marsh Posté le 13-07-2001 à 12:25:58    

Si tu veux je te fais voir un peu sur quoi je travail, si tu dis que c'est de la merde je te dirai d'aller revoir les pattern Java histoire de te culturer !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed