2010-07-04 5 views
2

J'essaie et je n'arrive pas à comprendre comment utiliser les composants de l'éditeur de texte Java pour coloriser le texte lorsque vous l'insérez. Je ne veux pas ou besoin d'une bibliothèque de mise en évidence de la syntaxe complète.Faire des mots de différentes couleurs dans JTextField/JTextPane /?

Fondamentalement, j'ai un JTextField (ou un autre composant JText ...), et une liste de mots. Je veux que tous les mots dans le champ qui apparaissent dans la liste soient rouges, et le reste des mots soit vert. Ainsi, par exemple, si "fire" est dans la liste, "fir" apparaîtra en vert et "fire" apparaîtra en rouge.

J'ai essayé d'utiliser un JTextPane et un DefaultStyledDocument, en utilisant un KeyListener pour passer en revue le texte dans le document et en utilisant AbstractStyledDocument.replace pour remplacer les mots existants par des versions qui ont les attributs corrects. Cela n'a rien fait. Qu'est-ce que je fais mal?

Répondre

1

Ni JTextPane niJTextField ne peut pas présenter de texte formaté, c'est-à-dire de texte ayant plus d'un format. Pour les fonctionnalités de type éditeur de texte comme celles que vous trouverez dans WordPad ou HTML, le composant à utiliser est le JEditorPane ou son descendant, JTextPane. La chose la plus simple que vous pouvez faire est de définir le ContentType du JEditorPane à "text/html" et simplement définir son texte à une chaîne contenant du HTML. Les composants de texte structuré Java sont étonnamment compétents avec HTML; vous pouvez afficher des tables et/ou des DIVs, et il existe un support pour beaucoup de CSS2. Plus simple de faire vos styles en ligne, mais vous pouvez même faire le style externe href s.

Si vous voulez vous familiariser par programme, vous pouvez accéder au DocumentModel et créer du texte à partir de portions de texte ayant chacun leur propre formatage. Le DocumentModel fonctionne essentiellement comme un éditeur de texte programmable. EDIT: Relisant votre question, je vois que ma réponse ne répond pas tout à fait. Puisque vous voulez du texte multicolore JEditorPane est votre seule option; mais plutôt que de simplement insérer du texte pré-coloré via HTML ou autre, vous devrez placer un écouteur sur votre modèle de document pour intercepter les modifications introduites lorsque vous tapez; et après chaque changement de document, vous voudrez examiner le texte (encore une fois à partir du modèle de document) pour le texte qui devrait ou ne devrait pas être mis en évidence, et vous voudrez appliquer la mise en forme à certaines exécutions de texte.

Il y a des diables dans les détails, mais cela devrait vous aider à démarrer.

+0

La difficulté est que j'ai besoin de faire cette coloration à la volée lorsque l'utilisateur tape dans le texte. Donc je n'ai pas autant besoin de créer du texte que de le colorer au fur et à mesure. – Zarkonnen

+0

Les trucs de mon EDIT (au sud de la ligne horizontale) devraient vous aider. L'écoute sur le modèle vous permet de répondre à tout texte nouveau/modifié en le colorisant comme bon vous semble. –

Questions connexes