Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1433 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Mise a jour de la vue dans un JTextArea

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mise a jour de la vue dans un JTextArea

n°1089908
Chronoklaz​m
Posté le 19-05-2005 à 20:11:35  profilanswer
 

Salut, voila j'ai redirigé la sortie standard vers le JTextArea de ma fenetre ... donc le texte se rajoute au fur et a mesure vers le Bas, le probleme c'est que je n'arrive pas a mettre a jour la vue ... cad comme si on descendais le scrollbar a chaque insertion de texte dans le JTextArea pour voir "effectivement" le texte rajouté.
 
Quelqu'un a til un conseil svp ?


Message édité par Chronoklazm le 19-05-2005 à 20:12:47

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
mood
Publicité
Posté le 19-05-2005 à 20:11:35  profilanswer
 

n°1089943
Chronoklaz​m
Posté le 19-05-2005 à 20:41:20  profilanswer
 

Voila le code ... :
 

Code :
  1. /** Redirection de la sortie standard vers le JTextArea */
  2.     public static void redirStdOut(final JTextArea interactions){
  3. //input=input+new String(b,0,b.length);  
  4. OutputStream  stdOutStrm =
  5.         new OutputStream() {
  6. boolean saut = false; // détection des \n\r
  7. String buf = "";      // le buffer final a rajouter
  8. //Redefinition de la methode write de OutputStream
  9. public void write(int b) throws IOException {
  10.     char a = (char) b;
  11.     if (a == '\r') this.saut = true;
  12.     else {
  13.          if ((this.saut) && (a != '\n')){
  14.           String ch = interactions.getText();
  15.   if (ch.indexOf("\n" ) < 0) {
  16.           interactions.replaceRange("", 0, ch.length());
  17.                 } else
  18.          interactions.replaceRange("", ch.lastIndexOf("\n" )+1, ch.length());
  19.        }
  20.         buf = buf+String.valueOf(a);
  21.         this.saut = false;
  22.     }
  23.     if ((a == '\n') || (a == '\r')) {
  24.         interactions.append(buf);
  25.         buf = "";
  26.     }
  27.        }
  28.    };
  29. System.setOut(new PrintStream(stdOutStrm));


 
Une idée, un conseil ... un avis ?


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1090054
Chronoklaz​m
Posté le 19-05-2005 à 21:57:38  profilanswer
 

Moi je dis UP !


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1090178
Chronoklaz​m
Posté le 20-05-2005 à 00:33:57  profilanswer
 

Et aussi je dis :
 
Suffit de rajouter :

Code :
  1. interactions.setCaretPosition((interactions.getText()).lastIndexOf("\n" )+1);


juste apres

Code :
  1. interactions.append(buf);


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1090217
the real m​oins moins
Posté le 20-05-2005 à 02:59:57  profilanswer
 

pourquoi pas simplement un setCaretPosition(txt.length()) ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1090218
the real m​oins moins
Posté le 20-05-2005 à 03:04:01  profilanswer
 

Citation :

setCaretPosition
 
public void setCaretPosition(int position)
 
    Sets the position of the text insertion caret for the TextComponent. Note that the caret tracks change, so this may move if the underlying text of the component is changed. If the document is null, does nothing. The position must be between 0 and the length of the component's text or else an exception is thrown.


 
bon alors, pourquoi il faut le bouger à la main?
aussi, c'est pas le viewpane qu'il faudrait poueter, plutot? (enfin le bidule qui gere le scrolling quoi, ché pas)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1090362
nraynaud
lol
Posté le 20-05-2005 à 10:30:33  profilanswer
 

-- > la technique c'est de mette le caret à la fin (y'a une Position spéciale si je me souviens bien) et de mettre une propriété genre viewFollowCaret()
 
sauf que quand on clique, on déplace le caret. donc soit il faut remettre le caret à la fin de chaque insert, soit on coupe le lien entre l'évènement de souris et le déplacement du caret.


---------------
trainoo.com, c'est fini
n°1090535
Chronoklaz​m
Posté le 20-05-2005 à 12:08:29  profilanswer
 

Effectivement ca marche nikel le setCaretPosition(interactions.getText().length()), donc meme si on remonte la scrollBar a chaque insertion d'une nouvelle chaine ca descend le scrollBar automatiquement, mais bon le fait de recalculer le length() du text c'est pas franchement genial :/


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1090566
nraynaud
lol
Posté le 20-05-2005 à 12:44:52  profilanswer
 

je pense qu'il y a un cache de la longueur, ça m'étonnerait qu'il la recalcule à chaque fois.


---------------
trainoo.com, c'est fini
n°1090621
the real m​oins moins
Posté le 20-05-2005 à 13:42:00  profilanswer
 

"Note that the caret tracks change, so this may move if the underlying text of the component is changed." mais !? :??:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 20-05-2005 à 13:42:00  profilanswer
 

n°1091684
nraynaud
lol
Posté le 21-05-2005 à 16:44:45  profilanswer
 

-- > ben tu regardes l'offset du caret, tu insères du texte avant cet ofsset, tu re-regarde l'offset et le caret s'est barré à droite (enfin l'offset a augmenté [:aloy]), rien d'extraordinaire.


---------------
trainoo.com, c'est fini
n°1091801
the real m​oins moins
Posté le 21-05-2005 à 19:52:20  profilanswer
 

ben j'aurais cru que c'était aussi applicable si on ajoutait du texte à la fin.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1091812
nraynaud
lol
Posté le 21-05-2005 à 20:12:55  profilanswer
 

c'est le cas.


---------------
trainoo.com, c'est fini
n°1091813
the real m​oins moins
Posté le 21-05-2005 à 20:13:57  profilanswer
 

[:icon15] mais alors a quoi on joue ici avec setCaret là [:icon15]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1091817
nraynaud
lol
Posté le 21-05-2005 à 20:20:08  profilanswer
 

parce que l'utilisateur, avec sa cliquette, il risque d'avoir déplacé le caret depuis la dernière insertion si tu n'a pas trafiqué le traitement des évènements :heink:

n°1091818
Chronoklaz​m
Posté le 21-05-2005 à 20:20:37  profilanswer
 

On joue à "la methode bourrine qui marche nikel" ...


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1091820
nraynaud
lol
Posté le 21-05-2005 à 20:22:22  profilanswer
 

bah perso, j'estime avoir fait un truc assez fin :o

n°1091834
the real m​oins moins
Posté le 21-05-2005 à 20:31:17  profilanswer
 

nraynaud a écrit :

parce que l'utilisateur, avec sa cliquette, il risque d'avoir déplacé le caret depuis la dernière insertion si tu n'a pas trafiqué le traitement des évènements :heink:


ha, oui ! :D
donc dans le cas d'un composant de texte non editable, le bidule va scroller automatiquement vers le bas tout seul?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1091847
nraynaud
lol
Posté le 21-05-2005 à 20:38:01  profilanswer
 

the real moins moins a écrit :

ha, oui ! :D
donc dans le cas d'un composant de texte non editable, le bidule va scroller automatiquement vers le bas tout seul?


non [:le kneu]
 
 
parce qu'on peut déplacer le curseur dans un truc non-éditable [:le kneu]
 
 
interro surprise pour voir si tu suis : dis-moi à quoi ça sert de déplacer le curseur sur un composant texte non-editable [:le kneu]

n°1091896
Chronoklaz​m
Posté le 21-05-2005 à 21:28:29  profilanswer
 

nraynaud a écrit :

non [:le kneu]
 
 
parce qu'on peut déplacer le curseur dans un truc non-éditable [:le kneu]
 
 
interro surprise pour voir si tu suis : dis-moi à quoi ça sert de déplacer le curseur sur un composant texte non-editable [:le kneu]


 
Le curseur c'est le caret non ?  :??:  
 
Sinon je sais pas si t'a dis ca en plaisantant mais quand je fait setEditable(false) sur un JTextArea on peut rien deplacer à part une eventuelle srcollBar ... par contre on peut plus selectionner le texte :/ faudrait un truc du genre setSelectable(true)  [:chronoklazm]
 
EDIT : ah non dsl j'ai dis des betises le texte est bien selectionable !
 
RE-EDIT : Ca serait possible de le rendre non selectionable ?  :lol:


Message édité par Chronoklazm le 21-05-2005 à 21:31:40

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1091914
nraynaud
lol
Posté le 21-05-2005 à 21:44:22  profilanswer
 

en mettant le selectionModel à null ? (pas testé)
 
déplacer le caret quand c'est désactivé, ça permet de faire la sélection avec shift+flèches.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Mise a jour de la vue dans un JTextArea

 

Sujets relatifs
Mise à jour automatique de base Acces à Mysql ??pb mise en ligne site internet
mise en forme conditionnelle[Css] Mise en forme Complexe de blocks
mise dans une variable d'une chaine entre cote???[Debutant] MSSQL => Lancement script TransacSQL, cyclique chaque jour
[vba excel] Mise a jour automatique de calculs : une option ??[wx] mise à jour de sizer
Plus de sujets relatifs à : Mise a jour de la vue dans un JTextArea


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR