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 :
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
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); }
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 <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>
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.
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()); } } }
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...?
Partager