3. Concepts sur les Editor Panes et les Text Panes
Deux classes Swing supportent le texte stylisé : JEditorPane
et sa sous-classe
JTextPane.
Voici une liste d'informations permettant de mieux comprendre le role de
chacune de ses classes, ainsi que leurs possibilités. Ces informations
devraient vous permettre de bien comprendre les différences entre
ces deux classes, et dans quels cas les utiliser.
-
Un panneau d'édition (Editor Pane) ou une zone de texte (Text
Pane) peuvent facilement charger un texte à partir d'une URL
en utilisant la méthode setPage . La classe JEditorPane
fournit aussi des constructeurs qui nous permettent d'initialiser un panneau
d'édition grace à une URL. Par contre, la classe
JTextPane
n'a pas de tel constructeur.
Attention, rappelez vous que le document et l'editor kit peuvent etre
changés lorsque l'on a recours à la méthode setPage.
Par exemple, si un panneau d'édition contient du texte brut (plain
text, ce qui est vrai par défaut), et que vous chargez une page
HTML, le document va devenir un objet HTMLDocument et l'editor
kit va devenir une instance de la classe HTMLEditorKit. Si votre
programme utilise la méthode setPage , assurez-vous que
votre code se réajuste par rapport à ces changements de documents
et d'editor kit (n'oubliez pas de réenregistrer les document listeners
sur le nouveau document, etc).
-
Les panneau d'édition ont la possibilité de lire, écrire
et éditer du texte brut, du HTML, et du RTF. Par contre les zones
de texte (Text panes) hérite de ces capacités mais
imposent certaines limitations. Par exemple, un panneau d'édition
force son document à implémenter l'interface StyledDocument.
Ainsi HTMLDocument et RTFDocument sont tous deux des
sous-classes de StyledDocuments donc l'HTML et le RTF fonctionnent
comme l'on peut s'y attendre dans un text pane. Par contre si vous
chargez un texte brut dans un text pane, le document de ce
text
pane ne sera pas un PlainDocument comme l'on pourrait s'y
attendre, mais une instance de la classe DefaultStyledDocument.
-
Pour supporter un format de texte particulier, il suffit d'implémenter
un editor kit qui peut lire, écrire et éditer du texte
dans ce format. Ensuite il faut invoquer la méthode registerEditorKitForContentType
pour enregistrer notre nouveau kit avec notre classe JEditorPane.
En enregistrant un editor kit de cette manière, tous les
panneaux d'éditions ainsi que les zones de texte de notre application
pourront lire, écrire et éditer ce nouveau format. Cependant,
si le nouvel editor kit n'est pas un StyledEditorKit, les
text
panes ne pourront pas supporter ce nouveau format.
-
Comme mentionné un peu plus haut, un text pane nécessite
que son document soit une instance d'une classe implémentant l'interface
StyledDocument.
Le paquetage texte de Swing fournit une implémentation par défaut
de cette interface, DefaultStyledDocument, qui est le document
utilisé par défaut par les text panes. Un text
pane requiert aussi que son editor kit soit une instance de
StyledEditorKit
(ou une sous-classe). N'oubliez pas que les méthodes
read
et write de la classe
StyleEditorKit ne manipule que
du texte brut (plain text).
-
Grace à ses documents "stylisés" et ses editor kits
"stylisés, les text panes fournissent des facilités
pour la gestion de style nommés et de style logique. La classe JTextPane
elle meme contient des méthodes pour travailler avec les styles,
ces méthodes se contentant d'ailleurs d'invoquer les méthodes
de l'objet document ou encore de l'editor kit.
-
Grace à l'API de la classe JTextPane, vous pouvez inclure
des images ou des composants dans un text pane. Il est aussi possible
d'inclure des images dans un editor pane aussi, mais seulement en
les incluant dans un fichier HTML ou RTF.