Jtextarea detection/indentation automatique
Senkai
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
Heliotte Messages postés 1491 Date d'inscription Statut Membre Dernière intervention -
Heliotte Messages postés 1491 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'aimerai savoir s'il y a un moyen de faire une indentation automatique sur plusieurs lignes dans un jtextarea (ou jtextpane) lorsque l'utisateur tape certaines balises html, et arreter l'indentation lorsque celui ci la referme.
Par exemple si l'utlisateur tape <body>, à partir de ce moment à chaque fois que celui ci va à la ligne, une tabulation se fait automatiquement (donc un jtextarea.append(" ")) et ceci jusqu'à ce que l'utilisateur tape </body>.
Et le problème est que je ne sais pas comment faire pour détecter que l'utilisateur à tapé une balise (La liste de balises concernées ouvrantes et fermantes étant chacune dans un fichier texte avec une balise par ligne). En gros je veux une fonction à la keylistener, mais sur un string.
Un peu d'aide serait la bienvenue.
Merci, en espérant avoir été assez clair.
J'aimerai savoir s'il y a un moyen de faire une indentation automatique sur plusieurs lignes dans un jtextarea (ou jtextpane) lorsque l'utisateur tape certaines balises html, et arreter l'indentation lorsque celui ci la referme.
Par exemple si l'utlisateur tape <body>, à partir de ce moment à chaque fois que celui ci va à la ligne, une tabulation se fait automatiquement (donc un jtextarea.append(" ")) et ceci jusqu'à ce que l'utilisateur tape </body>.
Et le problème est que je ne sais pas comment faire pour détecter que l'utilisateur à tapé une balise (La liste de balises concernées ouvrantes et fermantes étant chacune dans un fichier texte avec une balise par ligne). En gros je veux une fonction à la keylistener, mais sur un string.
Un peu d'aide serait la bienvenue.
Merci, en espérant avoir été assez clair.
A voir également:
- Jtextarea detection/indentation automatique
- Réponse automatique thunderbird - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Logiciel de sauvegarde automatique gratuit - Guide
- Detection materiel pc - Guide
- Réponse automatique gmail - Guide
7 réponses
Tu remplace le moment où tu vérifies le début de chaine avec une des balises (du tableau, d'un fichier texte, d'une table de base de données) par:
Vérifier si BALISE existe dans CHAINE
Et comme ce genre de vérification est plus long, avant l'utilisation de la "jtextarea", tu mets toutes les balises du fichier en mémoire (dans un tableau à parcourir, ligne par ligne)
Vérifier si BALISE existe dans CHAINE
Et comme ce genre de vérification est plus long, avant l'utilisation de la "jtextarea", tu mets toutes les balises du fichier en mémoire (dans un tableau à parcourir, ligne par ligne)
Bonjour Senkai,
Un truc de genre ?
Mettre un évènement sur ta "jtextarea", dans lequel tu lui dit:
Un truc de genre ?
Mettre un évènement sur ta "jtextarea", dans lequel tu lui dit:
SI le dernier caractère entré est un "ENTER" (retour de ligne), ALORS vérifie si le début de ligne correspond à une balise que tu trouves dans le fichier (ou tableau = plus rapide) SI VRAI ....Indentation=Indentation+1 "jtextarea"="jtextarea"+indentation+dernière ligne de texte ....Sortir de la procédure SI FAUX ....tu sort de la procédure
Avec string.contains c'est ca?
Sinon, comment fait on pour récupérer une ligne précise d'un jtextarea?
Sinon, comment fait on pour récupérer une ligne précise d'un jtextarea?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Juste une dernière chose j'aimerai savoir a quel evenement pour le keylistener correspond l'appui sur les touches shift et "<".
Pour shift je sais que c'est KeyEvent.SHIFT_DOWN_MASK mais pour l'autre aucune idée.
D'ailleurs il n'existe pas un endroit ou je pourrait voir à quel évènement correspond chaque touche?
Pour shift je sais que c'est KeyEvent.SHIFT_DOWN_MASK mais pour l'autre aucune idée.
D'ailleurs il n'existe pas un endroit ou je pourrait voir à quel évènement correspond chaque touche?
D'ailleurs il n'existe pas un endroit ou je pourrait voir à quel évènement correspond chaque touche?
Il suffit de demander :
https://docs.oracle.com/javase/6/docs/api/java/awt/event/KeyEvent.html
Il suffit de demander :
https://docs.oracle.com/javase/6/docs/api/java/awt/event/KeyEvent.html
ReBonjour,
Donc pour résoudre mon problème, j'ai mis toutes les balises dans un tableau et pour chaque ligne j'ai une fonction incrementation (qui prend une ligne en argument) qui ressemble à ca
sachant que decrementation contient ca:
Ca fonctionne assez bien sauf qu'il y a plusieurs problèmes avec la première fonction.
- Le premier c'est que j'aimerai savoir l'ordre dans lequel apparaissent les strings trouvés dans le texte (avec la pile), alors que là je peux seulement recuperer l'ordre dans lequelles ils apparaissent dans le tableau (si une ligne contient plusieurs balises).
- Le second c'est que la méthode est trop complexe, étant donné qu'on doit reparcourir la ligne à chaque case du tableau, et j'aimerai avoir à le faire qu'une seule fois, si possible.
Bref j'aimerai savoir s'il n y a pas une méthode plus efficace pour faire ce que j'ai décrit.
Merci
Configuration: Windows 7 / Firefox 16.0
Donc pour résoudre mon problème, j'ai mis toutes les balises dans un tableau et pour chaque ligne j'ai une fonction incrementation (qui prend une ligne en argument) qui ressemble à ca
for (int i = 0 ; i < tableaulength ; i++){ if (ligne.contains(tableau[i])){ // Met la balise dans une pile (si elle n y est pas déjà) et incrémente la variable indentation } decrementation(ligne) } }
sachant que decrementation contient ca:
if(!pile.empty()){ String balisefermante = "</" + pile.peek() + ">"; if (ligne.contains(balisefermante)){ //On retire la balise de la pile et on décrémente indentation } decrementation(ligne);
Ca fonctionne assez bien sauf qu'il y a plusieurs problèmes avec la première fonction.
- Le premier c'est que j'aimerai savoir l'ordre dans lequel apparaissent les strings trouvés dans le texte (avec la pile), alors que là je peux seulement recuperer l'ordre dans lequelles ils apparaissent dans le tableau (si une ligne contient plusieurs balises).
- Le second c'est que la méthode est trop complexe, étant donné qu'on doit reparcourir la ligne à chaque case du tableau, et j'aimerai avoir à le faire qu'une seule fois, si possible.
Bref j'aimerai savoir s'il n y a pas une méthode plus efficace pour faire ce que j'ai décrit.
Merci
Configuration: Windows 7 / Firefox 16.0