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 :

Effacer un texte d'un StyledDocument


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Effacer un texte d'un StyledDocument
    Bonjour,

    Je développe une applet JAVA dans laquelle j'utilise un JtextPane associé à un StyledDocument. J'utilise ce type parce que j'ai besoin de mettre certain bout de texte de différentes couleurs.

    Jusqu'à là tout fonctionne.

    Mais j'ai également besoin de pouvoir effacer le texte contenu entièrement ou seulement en partie. Pour cela la méthode remove(pos,length) du styledDocument me paraissait tout indiquée. Mais voilà cela ne fonctionne pas.

    Ai-je oublié qqch??

    Merci par avance

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par Slartibartfast Voir le message
    Ai-je oublié qqch??
    Le code qui ne fonctionne pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Ah Je m'en doutais un peu. mais le code est assez long.
    Je vais en poster des extraits:

    Voici la déclaration de mon JTextPane et du StyledDocument
    FConsole = new JTextPane();
    Constyled = FConsole.getStyledDocument();
    Sclassic = FConsole.addStyle("Clasic", null);
    Ssurbrillance = FConsole.addStyle("Surbrillance", null);
    StyleConstants.setForeground(Ssurbrillance, Color.red);
    FConsole.setLogicalStyle(Sclassic);
    Scurrent=Sclassic;
    J'appelle la fonction suivante lorsque je reçois un caractère ASCII particulier:
    public void Efface (int posdebut, int posfin)
    {
    //System.out.println("Debut:"+posdebut+" Fin:"+posfin);
    try {
    Constyled.remove(posdebut, posdebut);
    } catch (BadLocationException e) {
    e.printStackTrace();
    }
    }

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Donne un code minimal compilable qui reproduit le problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Merci de ton aide dinobogan.

    J'ai donc essayé de faire un code minimal mais celui-ci fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    import java.awt.Color;
     
    import javax.swing.JApplet;
    import javax.swing.JPanel;
    import javax.swing.JTextPane;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.Style;
    import javax.swing.text.StyleConstants;
    import javax.swing.text.StyledDocument;
     
    public class test extends JApplet implements Runnable
    {
    	Thread me;
    	boolean KeepRunning=true;
     
    	JPanel MainPanel;
    	JTextPane FConsole;
    	StyledDocument Constyled;
    	Style Sclassic, Ssurbrillance, Scurrent;
     
    	public void init()
    	{
    		MainPanel = new JPanel();
    		FConsole = new JTextPane();
    		 Constyled = FConsole.getStyledDocument();
    		 Sclassic = FConsole.addStyle("Clasic", null);
    		 Ssurbrillance = FConsole.addStyle("Surbrillance", null);
    		 StyleConstants.setForeground(Ssurbrillance, Color.red);
    		 FConsole.setLogicalStyle(Sclassic);
    		 Scurrent=Sclassic;
    		 try {
    			Constyled.insertString(0, "Ceci est un test, Ceci est juste un test", Scurrent);
    		} catch (BadLocationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		 FConsole.setEditable(false);
    		 MainPanel.add(FConsole);
    		 setContentPane(MainPanel);
    		 this.validate();
    	}
    	public void start()
    	{
    		me=new Thread(this);
    		me.start();
    	}
    	public void stop()
    	{
    		KeepRunning=false;
    	}
    	public void destroy()
    	{
     
    	}
     
    	public void Efface (int début, int taille)
    	{
    		try {
    			Constyled.remove(début, taille);
    		} catch (BadLocationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public void run() {
    		while (KeepRunning) {
    			 try {
    				 Thread.sleep(1000);
    				 }
    			 catch (InterruptedException e) { }
    			 System.out.println("Réveil du Thread\n");
    			 Efface(0,1);
    		}
    	}
    }
    Cela me rassure sur l'emploi de cette méthode, mais je n'arrive toujours pas à voir le problème dans mon code. A mon avis, étant débutant en Java, il s'agit d'une subtilité du langage qui m'échappe, mais je n'ai pas réussi à trouver qqn qui avait le même problème.

    Dans mon code, la cadence du Thread est plus rapide, et il ajoute ou retire du texte suivant une condition qui un caractère ASCII reçu. Pour cela il appelle une méthode d'une classe extérieure mais j'ai vérifié que ma méthode était bien appelé avec le System.out.println(...) en commentaire dans mon précédent message et c'est apparemment le cas.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    J'ai résolu le problème. Mais comment dire j'ai honte
    J'appelais ma méthode comme ceci : Constyled.remove(posdebut, posdebut);
    Forcément pas très efficace. Faut que je fasse un peu plus gaffe à ce que j'écris quand je code!

    Au cas où cela intéresserait qqn qui voudrait faire la même chose je reposte ici le code minimal qui marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    import javax.swing.JApplet;
     
    public class test extends JApplet implements Runnable
    {
    	Thread me;
    	boolean KeepRunning=true;
    	private test1 MainPanel;
    	int i=0;
     
    	public void init()
    	{
    		MainPanel = new test1();
     
    		 setContentPane(MainPanel);
    		 this.validate();
    	}
    	public void start()
    	{
    		me=new Thread(this);
    		me.start();
    	}
    	public void stop()
    	{
    		KeepRunning=false;
    	}
    	public void destroy()
    	{
     
    	}
     
    	public void run() {
    		while (KeepRunning) {
    			 try {
    				 Thread.sleep(1000);
    				 }
    			 catch (InterruptedException e) { }
    			 System.out.println("Réveil du Thread\n");
    			 if (i%2==0)
    			 {
    				 MainPanel.Efface(0,1);
    			 }
    			 else
    			 {
    				 MainPanel.AjoutTexte("a");
    			 }
    			 i++;
    		}
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import java.awt.Color;
     
    import javax.swing.JPanel;
    import javax.swing.JTextPane;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.Style;
    import javax.swing.text.StyleConstants;
    import javax.swing.text.StyledDocument;
     
    public class test1 extends JPanel
    {
    	JTextPane FConsole;
    	StyledDocument Constyled;
    	Style Sclassic, Ssurbrillance, Scurrent;
     
    	public test1()
    	{
    		FConsole = new JTextPane();
    		 Constyled = FConsole.getStyledDocument();
    		 Sclassic = FConsole.addStyle("Clasic", null);
    		 Ssurbrillance = FConsole.addStyle("Surbrillance", null);
    		 StyleConstants.setForeground(Ssurbrillance, Color.red);
    		 FConsole.setLogicalStyle(Sclassic);
    		 Scurrent=Sclassic;
    		 try {
    			Constyled.insertString(0, "Ceci est un test, Ceci est juste un test", Scurrent);
    		} catch (BadLocationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		 FConsole.setEditable(false);
    		 add(FConsole);
    	}
     
    	public void Efface(int pos, int length)
    	{
    		try {
    			Constyled.remove(pos, length);
    		} catch (BadLocationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    	public void AjoutTexte(String string) {
    		try {
    			Constyled.insertString(Constyled.getLength(), string, Scurrent);
    		} catch (BadLocationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    	}
    }

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/07/2008, 09h23
  2. onFocus > effacer le texte par defaut
    Par harlock59 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/04/2007, 14h50
  3. Effacer du texte
    Par Dénisss dans le forum C++
    Réponses: 5
    Dernier message: 28/12/2006, 20h22
  4. Réponses: 2
    Dernier message: 28/04/2006, 17h51
  5. effacer du texte dans une fenetre
    Par exter666 dans le forum Windows
    Réponses: 5
    Dernier message: 08/03/2005, 11h25

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