[Java] JTextArea, KeyListener, Touche Entrée
Résolu
KX
Messages postés
16761
Date d'inscription
Statut
Modérateur
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Dans une application Java Swing, j'aimerai récupérer la valeur de mon JTextArea dès que l'utilisateur tape sur "Entrée". Je suppose qu'il faut faire cela avec des KeyListener mais je ne sais pas comment faire pour attendre que l'évènement se produise.
Dans mon code j'ai quelque chose comme ça :
Je ne sais pas si c'est très clair, mais si quelqu'un peut m'aiguiller je l'en remercie d'avance ;-)
Dans une application Java Swing, j'aimerai récupérer la valeur de mon JTextArea dès que l'utilisateur tape sur "Entrée". Je suppose qu'il faut faire cela avec des KeyListener mais je ne sais pas comment faire pour attendre que l'évènement se produise.
Dans mon code j'ai quelque chose comme ça :
private JTextArea area; public String saisie(String patron) { area.setText(patron); area.setEditable(true); // Attendre l'appuie sur la touche Entrée 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"); }
Je ne sais pas si c'est très clair, mais si quelqu'un peut m'aiguiller je l'en remercie d'avance ;-)
A voir également:
- Keyevent java example
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
3 réponses
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; }
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"); }
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 ^^
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.
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...
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 ^^.