Jtextarea detection/indentation automatique

Fermé
Senkai Messages postés 21 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 24 mai 2014 - 31 oct. 2012 à 16:36
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 - 16 nov. 2012 à 14:58
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
Modifié par Heliotte le 1/11/2012 à 15:38
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
1 nov. 2012 à 08:24
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 mercredi 31 octobre 2012 Statut Membre Dernière intervention 24 mai 2014 6
1 nov. 2012 à 14:21
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 mercredi 31 octobre 2012 Statut Membre Dernière intervention 24 mai 2014 6
2 nov. 2012 à 15:30
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
Modifié par Heliotte le 2/11/2012 à 16:22
Il faut récupérer l'ensemble du texte, et lire .. ligne par ligne
0
Senkai Messages postés 21 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 24 mai 2014 6
3 nov. 2012 à 15:18
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 mercredi 31 octobre 2012 Statut Membre Dernière intervention 24 mai 2014 6
3 nov. 2012 à 22:08
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
3 nov. 2012 à 22:59
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
3 nov. 2012 à 23:00
Penses à mettre "résolu"
0
Senkai Messages postés 21 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 24 mai 2014 6
3 nov. 2012 à 23:44
Super, merci.
0
Senkai Messages postés 21 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 24 mai 2014 6
4 nov. 2012 à 04:37
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
4 nov. 2012 à 11:46
Là je ne peux pas t'aider, désolé !
0
Senkai Messages postés 21 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 24 mai 2014 6
16 nov. 2012 à 11:42
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
16 nov. 2012 à 11:57
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 mercredi 31 octobre 2012 Statut Membre Dernière intervention 24 mai 2014 6
16 nov. 2012 à 12:19
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 vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
16 nov. 2012 à 14:58
ok,bon week-end Senkai
0