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 :

Faire varier la couleur d'affichage du texte dans une jTextearea


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Faire varier la couleur d'affichage du texte dans une jTextearea
    Bonjour

    J'ai créé une ihm dans laquelle j'utilise une jTextearea qui fait office de console.

    Je souhaite afficher du texte au fur et a mesure dans cette console. J'utilise pour cela la fonction SetText(string). Cependant, a chaque fois que cette fonction est appelée, elle affiche le texte passé en parametre en effacant les précédentes lignes affichées.

    Pour pallier a cela je stockes les précédentes lignes dans un string, et je concataine les nouvelles dans ce string, La fonction SetText prend en parametre ce String. Cela me permet donc, visuellement, d'afficher les nouvelles lignes a la suite dans la console.

    Cependant je souhaite afficher certaines lignes en noires et d'autres en bleues. J'utilise donc la fonction setForeground(color) ; mais comme vous vous le doutez cela m'affiche toute les lignes de la couleur que je place en paramètre.

    Quelqu'un aurait t'il une idée dans la manière a procéder pour obtenir ce que je souhaite?

  2. #2
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Salut,

    primo si tu avais regardé la javadoc du composant JTextArea, tu aurais découvert la méthode append() qui te permet de rajouter tes chaînes de caractères à la suite et donc éviter le traitement long et pénible avec un setText(). Regarde ICI

    Ensuite, je vais looker pour la coloration des lignes mais ce sujet peut t'intéresser.

    http://www.developpez.net/forums/sho...d.php?t=199213
    "Le calendrier, c'est la bureaucratie du temps." Quino

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Merci sironimo pour ta reponse. En effet la fonction append() est deja plus propre que ce que j'avais fait. Je suis en train de regarder pour la couleur.
    Dis moi si tu trouve qqchose de ton coté.

    Grand merci

  4. #4
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    J'avais trouvé une imlementation du composant JTextPane (sachant que le composant JTextArea n'est pas très adapté à ton besoin) sur dvp, je sais plus où exactement.Enfin bref, la voilà :
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.text.*;
     
    public class AdvancedTextPane extends JTextPane {
     
    	//CLASS VAR.
    	static final long serialVersionUID = 0;
    	//PRIVATE VAR.
    	private StyledDocument styledDoc = getStyledDocument();
    	//PROTECTED VAR.
    	protected float COMPONENT_ALIGNEMENT = 0.82f;
     
    	/**
             * Invoked for generate a style name.
             * @param bold
             * @param italic
             * @param underline
             * @param size
             * @param color
             * @return
             */
    	private static String getNameStyle(boolean bold, boolean italic, boolean underline, int size, Color color) {
    		StringBuffer sb = new StringBuffer();
    		if(bold) {
    			sb.append("1");
    		}else {
    			sb.append("0");
    		}
    		if(italic) {
    			sb.append("1");
    		}else {
    			sb.append("0");
    		}
    		if(underline) {
    			sb.append("1");
    		}else {
    			sb.append("0");
    		}
     
    		sb.append(size);
    		sb.append(color.getRGB());
     
    		return sb.toString();
    	}
     
    	/**
             * Invoked for create and bet back the style define by the parameters.
             * @param bold
             * @param italic
             * @param underline
             * @param size
             * @param color
             * @return
             */
    	private Style getStyle(boolean bold, boolean italic, boolean underline, int size, Color color) {
     
    		String styleName = AdvancedTextPane.getNameStyle(bold, italic, underline, size, color);
     
    		Style style = styledDoc.getStyle(styleName);
     
    		if(style != null) {
    			return style;
    		}else {
    			style = styledDoc.addStyle(styleName, styledDoc.getStyle(StyleContext.DEFAULT_STYLE));
     
    			StyleConstants.setBold(style, bold);
    			StyleConstants.setItalic(style, italic);
    			StyleConstants.setUnderline(style, underline);
    			StyleConstants.setFontSize(style, size);
    			StyleConstants.setForeground(style, color);
     
    			return style;
    		}
    	}
     
     
     
    	/**
             * Invoked for add a text to the end of the text pane.
             * @param texte
             * @param bold
             * @param italic
             * @param underline
             * @param size
             * @param color
             */
    	public synchronized void insertTextEnd(String texte, boolean bold,
    			boolean italic, boolean underline, int size, Color color) {
    			try {
    				styledDoc.insertString(styledDoc.getLength(),
    						texte, getStyle(bold, italic, underline, size, color));
    				setCaretPosition(styledDoc.getLength());
    			}catch(Exception e) {}
    	}
     
     
    	/**
             * Invoked for insert a icon at the selection space.
             * @param icon
             */
    	public synchronized void insertIconSelect(Icon icon) {
    		insertIcon(icon);
    	}
     
     
    	/**
             * Invoked for add a icon to the end of the text pane.
             * @param icon
             */
    	public synchronized void insertIconEnd(Icon icon) {
    		select(styledDoc.getLength(), styledDoc.getLength());
    		insertIconSelect(icon);
    	}
     
     
    	/**
             * Invoked for insert a component at the selection place.
             * @param c
             */
    	public synchronized void insertComponentSelect(JComponent c) {
    		c.setAlignmentY(COMPONENT_ALIGNEMENT);
    		insertComponent(c);
    	}
     
    	/**
             * Invoked for add a component to the end of the text pane.
             * @param c
             */
    	public synchronized void insertComponentEnd(JComponent c) {
    		select(styledDoc.getLength(), styledDoc.getLength());
    		insertComponentSelect(c);
    	}	
     
    }
    Oublie le append() mais il y a la méthode insertTextEnd qui fait ce que tu veux.
    Bonne chance.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Ca marche impec!!!
    Encore merci du coup de main Janitrix!

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

Discussions similaires

  1. [Débutant] Affichage de texte dans une texte box
    Par lolocks dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/01/2013, 16h41
  2. Probleme affichage de texte dans une Div.
    Par philsand77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 10/02/2009, 15h19
  3. Affichage de texte dans une fenêtre
    Par whitebird001 dans le forum MFC
    Réponses: 3
    Dernier message: 19/05/2008, 00h22
  4. affichage de text dans une textbox
    Par geriler dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/02/2008, 16h22
  5. [VB.Net] Problème d'affichage de text dans une MessageBox
    Par eultartuffe dans le forum Windows Forms
    Réponses: 6
    Dernier message: 03/04/2006, 20h56

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