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   -
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.

7 réponses

Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
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)
1
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
Bonjour Senkai,
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
0
Senkai Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   6
 
Oui c'est a peu ça, sauf que la balise ne se trouve pas forcément en début de ligne.
0
Senkai Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   6
 
Avec string.contains c'est ca?

Sinon, comment fait on pour récupérer une ligne précise d'un jtextarea?
0
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
Il faut récupérer l'ensemble du texte, et lire .. ligne par ligne
0
Senkai Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   6
 
Ok merci d'avoir répondu je vais essayer de me débrouiller seul maintenant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Senkai Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   6
 
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?
0
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
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
0
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
Penses à mettre "résolu"
0
Senkai Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   6
 
Super, merci.
0
Senkai Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   6
 
Ah non en fait j'arrive toujours pas à voir la touche que je recherche, vu que je connais pas son équivalent anglais.
0
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
Là je ne peux pas t'aider, désolé !
0
Senkai Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   6
 
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

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
0
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
Crée un nouveau post.
Après 2 semaines, c'est préférables si tu veux avoir des réponses
0
Senkai Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   6
 
Ok j'ai hesité à le faire, je pensais qu'on me demanderai de continuer sur celui là. Je vais donc attendre un peu avant de créer un nouveau sujet.
0
Heliotte Messages postés 1491 Date d'inscription   Statut Membre Dernière intervention   92
 
ok,bon week-end Senkai
0