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

SWT/JFace Java Discussion :

Mettre en gras/couleur des chaînes dans des cellules d'une TableViewer ?


Sujet :

SWT/JFace Java

  1. #1
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut Mettre en gras/couleur des chaînes dans des cellules d'une TableViewer ?
    Bonjour,

    Nous utilisons un table viewer pour afficher des informations dans des cellules :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableViewer viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);

    Et nous avons une classe héritant de LabelProvider pour afficher le contenu texte dans les cellules avec la méthode suivante :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public String getColumnText(Object element, int colIdx) {
     
       return "du texte pour la cellule"
    }

    Comment faire pour afficher des éléments en gras ou en couleur dans le contenu d'une cellule ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Je vais finir par croire que ne n'est pas possible de changer la couleur d'une partie d'un texte dans une cellule avec un TableViewer ?

    J'arrive seulement à changer la couleur du texte entier dans la cellulle

    Des idées pour colorer seulement une chaine de mon texte dans une cellule ?

  3. #3
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 72 948
    Points
    72 948
    Par défaut
    Salut,

    Ah la TableViewer, pas aussi flexible que le JTable de Swing.

    Je n'ai pas testé mais je pense que tu devrais utiliser des décorateurs pour ton LabelProvider.

    Essaye avec IFontDecorator et IColorDecorator. Le premier pour dire que c'est en gras et le second pour choisir ta couleur.

    Va faire un tour ici http://www.cct.lsu.edu/~rguidry/ecl3...r.html#line.27
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  4. #4
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    D'après ce que j'en vois les décorateurs permettent d'ajouter de l'information.

    Par exemple d'ajouter une balise <b> autour d'un mot dans une chaîne que j'aurais dans une cellule.

    Par contre pour ce qui est d'afficher mon mot en gras , c'est une autre affaire...

    Donc toujours pas de solution pour ça ?
    Merci d'avance pour vos idées.

  5. #5
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 72 948
    Points
    72 948
    Par défaut
    Salut,

    En fait, il s'agit des interfaces IColorProvider et IFontProvider qui permettent de modifier la couleur et la fonte. Je n'arrive pas trop à voir la nuance avec IColorDecorator et IFontDecorator (peut être avec les points d'extensions?)

    Bref, pour dire que ça 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
     
        class ViewLabelProvider extends LabelProvider implements
                ITableLabelProvider, IFontProvider, IColorProvider {
            public String getColumnText(Object obj, int index) {
                return getText(obj);
            }
     
            public Image getColumnImage(Object obj, int index) {
                return getImage(obj);
            }
     
            public Image getImage(Object obj) {
                return PlatformUI.getWorkbench().getSharedImages().getImage(
                        ISharedImages.IMG_OBJ_ELEMENT);
            }
     
            public Color getBackground(Object element) {
                return Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
            }
     
            public Color getForeground(Object element) {
                return Display.getDefault().getSystemColor(SWT.COLOR_BLUE);
            }
     
            public Font getFont(Object element) {
                if (element instanceof String) {
                    if (((String)element).equals("One")) {
                        return new Font(Display.getDefault(), "Fixedsys", 10, SWT.BOLD);
                    }
                }
                return new Font(Display.getDefault(), "Fixedsys", 10, SWT.ITALIC);
            }
        }
    Il s'agit d'un code à l'arrache, basé sur le template généré par Eclipse.

    A faire ensuite

    viewer.setLabelProvider(new ViewLabelProvider());

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  6. #6
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Oui, mais avec ce code si je prends la méthode suivante :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            public Color getForeground(Object element) {
                return Display.getDefault().getSystemColor(SWT.COLOR_BLUE);
            }

    La couleur du texte à l'intérieur d'une cellule sera bleue.

    Et si par exemple j'ai dans une cellule le texte suivant : "le petit chien mange des bananes" et que je veux colorier en bleu le mot "petit" et uniquement ce mot (le reste en noir par exemple) aucun décorator ne pourra m'aider.

    D'autres idées ?

  7. #7
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 72 948
    Points
    72 948
    Par défaut
    Bonsoir,

    J'ai deux propositions.
    Sachant que pour chaque cellule d'une Table tu peux retourner une image via ton LabelProvider, tu as moyen de générer une image suivant l'objet à afficher. A ce moment là, tu passes par Graphical Context pour dessiner (à la Swing en bref). Vu que tu dessines tu peux tout faire. J'ai déjà testé cette solution pour y placer des éléments graphiques dans une table.

    La seconde solution serait de pouvoir placer dans chaque cellule un composant SWT. L'avantage est de pouvoir utiliser le composant TextLayout qui permet d'afficher du texte comme tu le souhaites (une partie en couleur et l'autre pas). Après il faut regarder comment fait-on pour insérer un composant TableItem?

    Facile à dire

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  8. #8
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    effectivement, facile à dire, l'option de l'image ne me convient pas trop en fait.

    Pour la seconde, saurais tu comment faire ? aurais tu un lien vers un code existant ?

    Merci d'avance.

  9. #9
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 72 948
    Points
    72 948
    Par défaut
    Salut,

    J'ai peut être une solution qui se rapproche de l'idée de dessiner.

    Depuis Eclipse 3.3 JFace a été étendu et notamment tu as la classe OwnerDrawLabelProvider. Il s'agit d'un objet de type IBaseLabelProvider permettant d'afficher le contenu.

    Cette classe offre notamment la possibilité de choisir la hauteur d'une cellule et de dessiner ce que tu veux grace à la méthode paint(Event e, Object). Avec Event tu peux récupérer le GC et par conséquent tu peux donner à ta chaine différentes fontes. Un exemple simpliste :

    e.gc.drawText("le début");
    e.gc.setFont(...);
    e.gc.drawText("le milieu");
    e.gc.setFont(...);

    Voilà une adresse où trouver un exemple https://bugs.eclipse.org/bugs/attachment.cgi?id=58971

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  10. #10
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    je regarde ça dès que je trouve un moment, merci d'y avoir pensé.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 145
    Points : 179
    Points
    179
    Par défaut
    Peut-être que cet article pourra t'aider... (particulièrement la dernière partie)
    Custom Drawing Table and Tree Items

  12. #12
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Citation Envoyé par Jense
    Peut-être que cet article pourra t'aider... (particulièrement la dernière partie)
    Custom Drawing Table and Tree Items
    Merci bcp pour ce lien, je vais le regarder plus en détails, mais à première vue il ne répondrait pas à ma problématique de colorer (ou marquer en gras) uniquement quelques caractères dans le texte contenue dans une cellule.

    Je vais creuser davantage.

  13. #13
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 72 948
    Points
    72 948
    Par défaut
    Salut,

    Je viens de proposer un exemple sur mon blog qui répondrait à ton problème. C'est peut être un peu tard mais bon, il y aura une trace et tu pourras placer ton message comme résolu.

    Voilà le lien de mon blog avec l'exemple : http://keulkeul.blogspot.com/2007/08...lprovider.html

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  14. #14
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Ce n'est pas trop tard, de mon côté c'était resté en suspens (le client chez qui je travaille, heureusement n'est pas trop exigent...)

    J'ai bookmarké ton blog, merci pour cette infos, ça semble exactement correspondre à ce que l'on souhaite. Je regarderai au moment ou je reviendrai dessus.

    En tout cas , merci d'y avoir pensé.

    Bonne journée, je marque en résolu.

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

Discussions similaires

  1. Comment ajouter des séries dans des graphes sur des feuilles variables
    Par Molomarcopolo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/07/2012, 16h26
  2. Réponses: 2
    Dernier message: 12/04/2007, 17h12
  3. Manipuler des chaînes dans un tableau
    Par cirtey dans le forum C
    Réponses: 5
    Dernier message: 01/03/2007, 22h08
  4. effacer des caracteres dans chaque cellule d'une plage
    Par chamus dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/11/2006, 17h14
  5. [D6] Comment remplacer des chaînes dans un fichier ?
    Par fabien25 dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2005, 13h37

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