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

Composants Java Discussion :

[JEditorPane] Mise en page du texte, StyleSheet ?


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 12
    Points
    12
    Par défaut [JEditorPane] Mise en page du texte, StyleSheet ?
    Bonjour,

    J'ai besoin de créer et éditer un document en HTML et de le placer dans un JEditorPane. Rencontrant pas mal de problèmes avec HTMLDocument et JEditorKit poury insérer du html, j'ai trouvé une autre solution en utilisant la méthode setText en mettant le code que je veux (sous forme d'une seule chaine) dans la balise <body> et en créant une feuille de style spécifique.

    Mon problème est que ma feuille de style n'est pas totalement gérée par JEditorPane : des tags que j'ai moi-même créés sont ignorés dans le rendement.

    Voilà mon code actuel :

    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
    public class SLVArticle extends JEditorPane implements HyperlinkListener{
     
    	private SLVHTMLEditorKit kit;
    	private HTMLDocument doc;		
     
    	public SLVArticle(){
    		super();
     
    		setEditable(false); 
    		addHyperlinkListener(this);
    		setContentType("text/html");
    		kit = new SLVHTMLEditorKit(); // création de mon propre editeur
    		setEditorKit(kit);		
    		setText(getHTMLArticle()); // récupération du code et insertion		
    		saveDoc("filetosave"); // enregistrement du doc pour vérif
     
    	}
     
    	/**
             * set my own editorkit
             * override original method
             * @param kit
             */
        public void setEditorKit(SLVHTMLEditorKit kit) {
            EditorKit old = getEditorKit();
            if (old != null) {
                old.deinstall(this);
            }
            this.kit = kit;
            if (this.kit != null) {
                this.kit.install(this);
                setDocument(this.kit.createDefaultDocument());
            }
            firePropertyChange("editorKit", old, kit);
        }
    où la chaîne renvoyée par getHTMLArticle() vient de ce fichier test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <font>
    <entry>lexikon: </entry> 
    <fm>fm <a href="http://ordbok.fr">ordbok</a></fm> ; 
    <mf>mf <a href="http://ordbok.fr">rimlexikon</a>,
    konstruktionslexikon</mf> ; 
    <fmmf>fmmf lexikografisk, glossarium</fmmf>
    </font>
    Voici mon propre HTMLEditorKit, que j'ai écrit pour initialiser ma propre feuille de style (j'ai trouvé ce conseil sur le forum de SUN) :
    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
    	public class SLVHTMLEditorKit extends HTMLEditorKit {
     
    			public SLVHTMLEditorKit(){
    			super();
    			StyleSheet ss = new StyleSheet();
    			iniStyles(ss);
    			setStyleSheet(ss);
    		}
     
    		/**
                     * initialize SLVstyles in stylesheet
                     * @param ss, the stylesheet
                     */
    		private void iniStyles(StyleSheet ss){
     
    			ss.addRule("body { background: white }");
    			ss.addRule("a { text-decoration: none; }"); // do not underline links
    			ss.addRule("font { font-family: arial, serif; font-size: small; color: black}");
    			ss.addRule("entry {font-weight: bold; color: black }"); // tag entry
     
    			// add color styles
    			HashMap rels = applet.getSelectedRelations();
     
    		    Iterator it = rels.keySet().iterator();
    		    while (it.hasNext()) {
     
    		        String rel = (String)it.next();
    		        Color col = (Color)applet.getColors().getRelColor(rel);
    		        // style 1 : style of relation names
    		        StringBuffer style1 = 
    		        	new StringBuffer(rel + " { font-weight: bold; color: rgb(");
    // rule looks like this		        	:
    // fm { color: rgb(172, 133, 205); font-weight: bold }
    		        StringBuffer colors = new StringBuffer();
    		        colors.append(col.getRed() + ", " + col.getGreen() + ", "
    		        		+ col.getBlue() + ");}");
    		        style1.append(colors);
    		        ss.addRule(style1.toString());		     
     
    		    }
    		}
    	}
    Le résultat est que le document affiché dans l'editeur est bien affiché avec la police que j'ai spécifiée, et aussi avec le fond blanc (si je mets black, le fond est noir), mais les balises telles que <entry>, <fm>, <fp>, etc n'ont aucun effet sur le style. Là où c'est étrange, c'est que le fichier sauvegardé les styles sont bien insérés dans le fichier html et si je l'affiche dans mon navigateur, il s'affiche correctement.

    Est-ce que quelqu'un a déjà eu un problème avec une telle feuille de style et JEditorPane ? Peut-être que JEP ne prend pas encharge la création de nouvelles balises...?

  2. #2
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    Alors ce que je peut te proposer comme solution c'est ma classe.

    C'est un éditeur HTML qui permet de mettre en forme du text et de mettre son code html dans un JeditorPane

    Dis moi si c'est un truc du genre que tu souhaites :



    La je poffine un peu en changeant
    Nouvelle Jtoolbar (design,images)
    Nouveau Menu - Couleur (raccourci clavier, icones,ajout de couleur)
    - Mise en Forme Police

    Si ca t'interresse je te met le lien

    -------------------------------------------------------------------------------------

    Bon voila j'ai fini quelques modif :


  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci pour la proposition!
    Est-ce que ton éditeur prend les feuilles de style en charge ? Parce qu'en gros ce que je veux faire avec mon JEditorPane c'est mettre des mots qui sont cliquables (donc des liens), mais que suivant la catégorie du mot il ait une couleur différente. Sans feuille de style tous les liens ont la même couleur. D'où l'absolu besoin de pouvoir gérer une StyleSheet.
    Si ta classe la prend en charge je veux bien que tu me donnes le lien

  4. #4
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    Arf non malheureusement, il ne fait pas ca mais pourrait tu me détaillé un peu ce que tu veux car je ne capte pas trop !

    Tu veux en fait que dans le JEditorPane (la ou j'ai écrit bleu sur le screen)
    ca soit cliquable ? (un lien http ?)

    Et qu'il soit de couleur différente en fonction du texte ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    En fait je veux quelque chose qui ressemble à ça :

    entrée: fm mot1 ; fp mot2 ; fmmf mot3, mot4, mot5

    mais où les mots ici numérotés soient à la fois des liens, et de la couleur correspondant au codage avant (fm, fp...)

    Or si ce sont des liens, ils vont tous avoir la même couleur, car avec le code html on ne définit qu'une seule couleur pour un lien, pour toute une page. Mais moi je veux qu'ils aient des couleurs différentes selon le codage, d'où ma feuille de style qui contient ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    body { background: white; }
    a { text-decoration: none;}
    font { font-family: arial, serif; font-size: small;}
     
    entry { font-weight: bold; color: black; }
    fm { font-weight: bold; color: rgb(172, 133, 205);}
    fm a { font-weight: normal; color: rgb(172, 133, 205);}
     
    fp { font-weight: bold; color: rgb(140, 168, 234);}
    fp a { font-weight: normal; color: rgb(140, 168, 234);}
     
    // etc
    J'ai bien l'impression que JEditorPane ne gère pas les nouvelles balises car <entry>, <fm>, etc, ne marchent pas alors que les 3 premières lignes de la feuille de style fonctionnent.
    Je vais soit me résigner à afficher les mots avec lien en noir, à moins que quelqu'un ait une solution ?
    Merci en tout cas tchoukapi.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Finalement je suis revenue à mon ancienne implémentation en ajoutant les styles de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		//Initialize some styles.
    		Style def = StyleContext.getDefaultStyleContext().
    		getStyle(StyleContext.DEFAULT_STYLE);
     
    		Style regular = doc.addStyle("regular", def);
    		StyleConstants.setFontFamily(def, "arial, SansSerif");
    		Style bold = doc.addStyle("bold", regular);
    		StyleConstants.setBold(bold, true);
    En fait la création de style marche de cette manière et pour insérer le texte dans JEDitorPane, au lieu d'utiliser setText() directement, j'utilise un HTMLDocument avec la méthode insertHTML() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    kit = new HTMLEditorKit();
    doc = (HTMLDocument)kit.createDefaultDocument() ;
    // ....
     
    doc.insertString(doc.getLength(), "bla: ", doc.getStyle("bold") );
    doc.insertString(doc.getLength(), "blaa", doc.getStyle("regular") );
    Le problème qui se pose maintenant est comment insérer un lien avec du style ? Par exemple comment insérer un lien avec le style "bold" ?
    Par ce que je fais comme ça et ça n'utilise aucun style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String link = "<a href=\"http://kekpart.fr\">mot</a>";
    kit.insertHTML (doc, doc.getLength(), link, 0, 0, HTML.Tag.A);

  7. #7
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    En fait tu veux afficher du text depuis un code html ? ou afficher le code html depuis un text mise en forme ?

    Car perso j'utilise StyleEditorKit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Action a = viewer.getActionMap().get("font-bold");
    où viewer est un JTextPane

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private JTextPane viewer = new JTextPane();
    Mais JTextPane hérite de JEditorPane !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    En fait j'ecris une page en html et je veux qu'elle s'affiche dans JEditorPane comme si s'affichait une page web.
    Il me semble que la méthode que tu emploies c'est justement pour quand on veut créer un éditeur interactif et que l'utilisateur clique par exemple sur un bouton "bold" et ça déclenche une action bold, non ?

  9. #9
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    Ui c'est linverse de ce que tu veux en fait .

    J'ecrit un text je le mets en forme (gras,italic,etc...) et apres je récupere le code html généré

    Alors en gros toi tu veux un navigateur (lol)

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Oui c'est comme un navigateur et ça fonctionne. J'ai juste ce problème de stylesheet...

  11. #11
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    Nickel ca ca peut etre pas mal !!

    Je sais malheureusement pas la , je cale

    En tout cas si tu avais un screen pour voir car ca m'interresse !

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    voilà la partie avec le JEditorPane en bas :



    En fait c'est l'entrée d'un dictionnaire. Si la partie du code du JEditorPane t'intéresse je peux te l'envoyer.

  13. #13
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    Tu code ça pour IKEA mdr !!

    Euh ui je veux bien en effet si ca te dérange .
    J'y jeterais bien un coup d'oeil !

    En fait tu le recupere comment (enfin où) ton code HTML ?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par tchoukapi
    Tu code ça pour IKEA mdr !!
    ouais c'est pour nos amis les vikings

    Euh ui je veux bien en effet si ca te dérange .
    J'y jeterais bien un coup d'oeil !

    En fait tu le recupere comment (enfin où) ton code HTML ?
    tu veux dire comment j'enregistre la page dans un fichier html ?

    je t'envoie mon adresse email en mp pour le code

  15. #15
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    Je veux dire qu'il te faut une source en html que tu affiches (traduite) dans le JeditorPane .

    Mais comment vas tu depuis ton écran chercher cette source, par un jChooserFile ou ....

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Cette source elle est dans mon code. J'écris le code de la page html avec les méthodes insertString et insertHTML que j'ai écrites plus haut. La personne qui est devant l'interface n'a rien à faire. Il lui suffit de cliquer sur un mot pour que ma classe écrive le code html qui va servir à l'affichage de la page.
    Je sais pas si j'ai répondu à ta question

Discussions similaires

  1. Mise en page fichier texte
    Par rogerone dans le forum Pascal
    Réponses: 1
    Dernier message: 03/10/2009, 16h56
  2. [fncychap] mise en page du texte excepté les chapitres
    Par manupro dans le forum Mise en forme
    Réponses: 9
    Dernier message: 21/08/2009, 02h34
  3. [FLASH 8] Mise en page de texte
    Par touriste13 dans le forum Flash
    Réponses: 1
    Dernier message: 12/05/2006, 09h17
  4. Réponses: 8
    Dernier message: 09/09/2005, 09h51
  5. Transformation et mise en page d'un texte
    Par Perceval dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 03/08/2005, 10h26

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