[Java] JTextArea, KeyListener, Touche Entrée
Résolu/Fermé
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
-
10 juil. 2011 à 03:43
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 10 juil. 2011 à 17:56
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 10 juil. 2011 à 17:56
A voir également:
- Keyevent java example
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
- Java runtime environment - Télécharger - Langages
3 réponses
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
10 juil. 2011 à 17:56
10 juil. 2011 à 17:56
Bon j'ai pas mal galéré, mais voici une manière de résoudre mon problème...
public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { synchronized(this) { this.notifyAll(); } } } //----------------------------------------- public String saisie(String patron) { area.setText(patron); area.setEditable(true); synchronized(area) { try { area.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } area.setEditable(false); String str = area.getText(); area.setText(""); return str; }
dariumis
Messages postés
571
Date d'inscription
mardi 16 mars 2010
Statut
Membre
Dernière intervention
18 avril 2018
63
10 juil. 2011 à 06:48
10 juil. 2011 à 06:48
Salut, normalement dans un jtextarea la touche entrée sert à revenir à la ligne, enfin, tu peux te faire un objet qui hérite de jtextarea implementant keylistner:
et puis dans ton code tu utilise cet objet à la place du Jtextarea:
public class Ton_textArea extends JTextArea implements KeyListener { public Ton_textArea() { addKeyListener(this); } public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { //traitement sur la touche entrée } } public void keyReleased(KeyEvent e) { } }
et puis dans ton code tu utilise cet objet à la place du Jtextarea:
private Ton_textArea area; public String saisie(String patron) { area.setText(patron); area.setEditable(true); String str = console.getText(); area.setText(""); area.setEditable(false); return str; } public String saisie() { return saisie(""); } public static void main() { String nom = saisie(); String date = saisie("jj/mm/aaaa"); String heure = saisie("hh:mm"); }
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
10 juil. 2011 à 12:55
10 juil. 2011 à 12:55
Merci de me répondre, cependant j'avais bien compris le principe du KeyListener, mon problème vient du fait que je ne sais pas comment attendre que l'évènement se produise, et seulement une fois celui-ci produit continuer mon programme.
En gros je voudrais faire quelque chose comme ceci, mais ici la boucle while va me pomper toute la CPU ce qui est loin d'être idéal...
Si tu as une idée ^^
En gros je voudrais faire quelque chose comme ceci, mais ici la boucle while va me pomper toute la CPU ce qui est loin d'être idéal...
public boolean entree; public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { entree=true; // touche Entrée appuyée } } //---------------------------------- public String saisie(String patron) { area.setText(patron); area.setEditable(true); area.entree=false; while (!area.entree); // attendre l'appuie de la touche Entrée area.setEditable(false); String str = console.getText(); area.setText(""); return str; }
Si tu as une idée ^^
dariumis
Messages postés
571
Date d'inscription
mardi 16 mars 2010
Statut
Membre
Dernière intervention
18 avril 2018
63
10 juil. 2011 à 13:10
10 juil. 2011 à 13:10
Pourquoi ne continu tu pas simplement ton programme dans le if du keypressed, du style:
c'est bien sûr pas exactement ça, mais dans l'esprit.
public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { area.setEditable(false); String str = console.getText(); area.setText(""); } }
c'est bien sûr pas exactement ça, mais dans l'esprit.
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
10 juil. 2011 à 13:33
10 juil. 2011 à 13:33
Le problème c'est que ma fonction saisie() doit être bloquante, or elle est synchrone tandis que l'évènement KeyEvent est asynchrone. Donc il me faudrait un moyen pour que la méthode saisie() soit bloquée jusqu'à ce que le KeyEvent.VK_ENTER ait lieu, et qu'une fois celui-ci relevé je débloque ma méthode saisie() pour faire mon return str;
En gros je veux faire une console, où je dois attendre que l'utilisateur valide sa saisie avant de continuer le programme avec la valeur donnée...
En gros je veux faire une console, où je dois attendre que l'utilisateur valide sa saisie avant de continuer le programme avec la valeur donnée...
dariumis
Messages postés
571
Date d'inscription
mardi 16 mars 2010
Statut
Membre
Dernière intervention
18 avril 2018
63
10 juil. 2011 à 13:36
10 juil. 2011 à 13:36
Alors peut être faut il utiliser les thread, mais là ça dépasse un peu mon niveau en java désolé.
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
10 juil. 2011 à 13:41
10 juil. 2011 à 13:41
En fait ce serait plutôt un anti-thread qu'il me faut ^^
Pour synchroniser les KeyEvent qui sont déjà des threads...
Pour synchroniser les KeyEvent qui sont déjà des threads...
dariumis
Messages postés
571
Date d'inscription
mardi 16 mars 2010
Statut
Membre
Dernière intervention
18 avril 2018
63
10 juil. 2011 à 14:00
10 juil. 2011 à 14:00
Après je ne pense que ton while de tout à l'heure soit si gourmand en cpu
Vu que tu ne fais rien dans son bloc, on fait bien des boucles infinie, pour les programme client serveur, ou les jeux. ou les traitement sont important, et ça reste rapide d'execution. Mais la j'suis désolé, moi je répondrais plus, car j'ai pas le niveau en fait, désolé, d'avoir pourris ton sujet ^^.
while (!area.entree); // attendre l'appuie de la touche Entrée
Vu que tu ne fais rien dans son bloc, on fait bien des boucles infinie, pour les programme client serveur, ou les jeux. ou les traitement sont important, et ça reste rapide d'execution. Mais la j'suis désolé, moi je répondrais plus, car j'ai pas le niveau en fait, désolé, d'avoir pourris ton sujet ^^.