IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Modifier le texte d'un JTextPane lors de l'appui d'une touche


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Par défaut Modifier le texte d'un JTextPane lors de l'appui d'une touche
    Bonjour tout le monde,

    Je souhaite faire un logiciel qui lit une chaine de caractères dans un JTextPane et lui applique des transformations, le tout en live.
    J'illustre mes propos :
    Vous tapez sur votre clavier un mot. A chaque caractère tapé, un analyseur va regarder s'il peut modifier la chaine et lorsqu'il possède un mot dans sa bibliothèque alors il remplace le mot.

    Par exemple : je tape "chat" et dans mon JTextPane il m'excrira "matou".

    Bon pour les curieux qui se demande à quoi ça va me servir, je veux pas remplacer "chat" par "matou" mais transformer l'écriture romaine en japonais : si je tape ka il va m'écrire le symbole か.

    J'ai déjà fait beaucoup de choses mais je bute sur le remplacement (et surtout trouver une méthode optimale).
    Pour le moment, j'écoute l'évènement keyTyped() du JTextPane qui m'indique la touche appuyée et je peux parcourir mon arbre en même temps que la saisie. A chaque mot complet, je récupère le String et je le met dans un objet de type StringBuffer. Grâce au fonction delete et insert j'arrive à transformer ma chaine que je reinjecte au widget.
    MAIS le problème est que l'action keyTyped() est éffectuée avant l' écriture sur le JTextPane.
    C'est-à-dire que si je tape "chat" , il va correctement le supprimer et écrire "matou" mais il rajoutera le t de chat soit "matout".

    Bref j'aimerai régler le problème de transformation et aussi optimiser (éviter de récuperer le string et le réinjecter ?)

    Merci pour votre aide !

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Ce serait moi, je tenterais de travailler à partir du DocumentFilter du Document du JTextPane. Tu trouveras quelques infos à Implementing a Document Filter, et si cette piste te parait bonne, j'essaierai de t'aider si besoin est.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Par défaut
    Merci pour ton aide je vais regardé la classe JTextComponent qui me semble très simpatique.
    Je te tiens au courant et posterai ma solution lorsque je l'aurai trouvé.

    Je regarde aussi les actions des KeyLister et je n'arrive pas à trouver l'action qui modifie le widget.
    En fait , le plus simple serai de gérer l'ajout dans le widget manuellement (si c'est possible car j'ai retourné les evenements mais je n'ai pas trouvé de choses interressantes !)

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    je ne suis pas fan des composants texte, mais il me semble que la gestion du clavier dans les TextComponents est réalisée avec des InputMaps et non des KeyListeners. Je ne saurais pas te dire quelle méthode est la plus adaptée (il me semble que tu auras besoin de montrer une popup afin de choisir entre plusieurs idéogrammes, non ?).

    Un tuto sur les InputMaps. Bon courage.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    La méthode la plus simple est d'utiliser le DocumentFilter.

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Par défaut
    Bon alors en me résignant (ou presque), j'ai décidé de changer d'API graphique.
    J'ai donc utilisé SWT et là je n'ai eut aucun soucis pour faire ce programme.

    Je suis prennant si quelqu'un arrive à trouver un boût de code qui résoud mon problème sous Swing/AWT.

    Bref, je vais quand même décrire les actions à utiliser :

    Mon widget de texte est un StyledText.
    L'action modifyText() permet de savoir si le texte a été modifié (et bien sur après que la modification soit effectuée).
    Ensuite je récupère manuellement la touche appuyée.
    Petite explication : il existe un outil nommé le caret qui correspond à la barre verticale indiquant où l'on écrit.
    Grâce au fonction setCaretOffset et getCaretOffset, on peut donc manipuler la position d'écriture (et donc obtenir la touche appuyée en regardant juste avant).
    Donc dans mon analyseur, je m'ammuse juste à déplacer le caret afin de supprimer ou écrire mes kana/kanji.

    Bon comme vous pouvez le devinez c'est du bricolage (mais ça marche !!! )

    Je posterai sur ce topic l'adresse vers le code source (dès que j'aurai fait quelque chose de fiable).
    Je met le sujet en tant que Résolu mais si vous vous sentez l'âme à trouver une meilleur solution n'hésitez pas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2009, 09h23
  2. Réponses: 3
    Dernier message: 30/03/2009, 18h23
  3. Contrôle lors de l'appui d'une touche
    Par sly60 dans le forum Débuter
    Réponses: 3
    Dernier message: 29/01/2008, 14h23
  4. recuperer les coordonnées de la souris lors d'un appui sur une touche
    Par haraelendil dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 22/11/2007, 13h23
  5. Réponses: 3
    Dernier message: 24/01/2005, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo