KeyListener[Besoin d'aide]

Ce topic a été résolu
kinginventeur

kinginventeur Le 27 février 2017 à 04:12 (Édité le 25 janvier 2019 à 17:53)

Bonjour/Bonsoir à tous ! 😀

Alors voila j'ai un gros soucis , je crée une calculatrice en java pour m’entraîner mais voila j'ai crée des boutons et un système de saisie de touche de claviers pour faciliter l'utilisation.

Tout fonctionne correctement donc je fais 123 sur mon clavier nikel ! 😀
Puis 123 avec les boutons nikel ! 😋

Mais une fois appuyé sur les boutons PAF le KeyListener ne fonctionne plus et ne reçois plus aucune information ...

J'avais eu ce problème au départ et j'ai du mettre ceci dans mon Main ( JFrame ) " this.requestFocusInWindow(); "

Mais même en ayant ceci , le problème persiste quand j’appuie sur les boutons 😭

Une aide 😄 ?


Resumé : Quand j’appuie sur les boutons ma classe Key qui contient une implementations de KeyListener ne reçois plus aucune information.
kinginventeur

kinginventeur Le 28 février 2017 à 18:16

Probléme RESOLU :

En gros je ne sais pas pourquoi mais j'ai du ajouter mon KeyListener dans le JPanel et non dans ma JFrame.
Par la suite le this.requestFocusInWindow(); j'ai du le mettre aussi dans le JPanel et non dans le JFrame ( je ne sais pas non plus pourquoi )

Le this.requestFocusInWindow() je les mis dans ma function RUN qui est une boucle while(true) pour pouvoir refresh a chaque fois mon JLabel de ma calculatrice.

J'ai mis une condition :
public void run(){
while(true){

label.setText(labelText);

if(focus)
this.requestFocusInWindow();
focus = false;
}
}
Ceci est mon RUN dans la classe PANEL qui hérite de JPanel , mais une fois que je clic sur un bouton je vais dans ma classe interract :
   private Interract interract = new Interract(this);   

      button0.addActionListener(interract);
      button1.addActionListener(interract);
      button2.addActionListener(interract);
      button3.addActionListener(interract);
      button4.addActionListener(interract);
      button5.addActionListener(interract);
      button6.addActionListener(interract);
      button7.addActionListener(interract);
      button8.addActionListener(interract);
      button9.addActionListener(interract);
      button_point.addActionListener(interract);
      button_equals.addActionListener(interract);
      buttonC.addActionListener(interract);
      button_plus.addActionListener(interract);
      button_moins.addActionListener(interract);
      button_fois.addActionListener(interract);
      button_diviser.addActionListener(interract);
Donc dans la classe INTERRACT qui hérite de ActionListener j'ai fais en sorte que dés qu'elle est appelé , je remet la variable FOCUS de ma classe PANEL a true , pour que ma boucle remet le focus ...


panel.focus = true;

Et donc dans le panel il y a ceci :

public void run(){while(true){label.setText(labelText);if(focus)this.requestFocusInWindow();focus = false;}}

Et comme while tourne tout le temps , ben le focus est remis ...
Fin bref c'est un bordel , je dois a chaque fois reprendre le focus dans le JPanel pour pouvoir utiliser le clavier. Et il faux ajouter le keylistener dans le JPanel :

this.addKeyListener(new Key(interract));
Et le this.requestFocusInWindow() il faux le mettre a la fin du chargement de toute vos données donc moi je les mis dans run car c'est ma dernière function que j'appel dans mon code ...
Profil introuvable

Profil introuvable Le 1 mars 2017 à 13:02

Marque ce topic en résolu alors ! 😉
kinginventeur

kinginventeur Le 3 mars 2017 à 17:45

Voilà 😀
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte