2

Javaのテキストエディタコンポーネントを使用して、テキストを挿入するときにテキストに色を付ける方法を理解しようとしていますが、失敗しています。フル機能のシンタックスハイライトライブラリは必要ありません。

基本的に、私はJTextField(または他のJText ...コンポーネント)と単語のリストを持っています。リストに表示されるフィールド内の単語を赤にし、残りの単語を緑にします。したがって、たとえば、「火」がリストに含まれている場合、「モミ」は緑色で表示され、「火」は赤色で表示されます。

JTextPaneとDefaultStyledDocumentを使用し、KeyListenerを使用してドキュメント内のテキストを調べ、AbstractStyledDocument.replaceを使用して既存の単語を正しい属性を持つバージョンに置き換えてみました。これは何もしませんでした。私は何が間違っているのですか?

4

1 に答える 1

1

JTextPane JTextFieldフォーマットされたテキスト、つまり複数のフォーマットを持つテキストを表示することも、表示することもできません。ワードパッドや HTML に見られるようなテキスト エディタのような機能の場合、使用するコンポーネントは 、JEditorPaneまたはその子孫であるJTextPane.

最も簡単な方法は、JEditorPane の ContentType を「text/html」に設定し、そのテキストを HTML を含む文字列に設定することです。Java 構造化テキスト コンポーネントは、驚くほど HTML に対応しています。テーブルや DIV を表示でき、CSS2 の多くがサポートされています。スタイルをインラインで実行するのが最も簡単ですが、外部スタイルを実行することもできますhref

プログラムで工夫を凝らしたい場合は、 にアクセスして、DocumentModelそれぞれ独自のフォーマットを持つテキストのスパンからテキストを作成できます。DocumentModel は、基本的にプログラム可能なテキスト エディターのように機能します。


編集:あなたの質問を読み直して、私の答えがそれに完全に対応していないことがわかります。マルチカラーのテキストが必要なため、JEditorPane が唯一のオプションです。ただし、HTML などを介して事前に色付けされたテキストを単にパイプするのではなく、ドキュメント モデルにリスナーを配置して、入力時に導入された変更をキャッチする必要があります。また、ドキュメントを変更するたびに、(ドキュメント モデルからの) テキストを調べて、強調表示する必要があるテキストと強調表示する必要がないテキストを調べ、特定の一連のテキストに書式を適用する必要があります。

詳細には悪魔がいますが、これで始められるはずです。

于 2010-07-04T18:58:45.910 に答える