モジュール java.desktop
パッケージ javax.swing.text.html

クラスHTMLEditorKit

java.lang.Object
すべての実装されたインタフェース:
Serializable, Cloneable, Accessible

public class HTMLEditorKit extends StyledEditorKit implements Accessible
SwingのJEditorPaneテキスト・コンポーネントは、EditorKitと呼ばれるプラグイン・メカニズムにより、さまざまな種類のコンテンツをサポートしています。 HTMLは非常に一般的な形式なので、部分的なサポートをデフォルトで提供しています。 このクラスが提供するデフォルトのサポートは、HTML 3.2 (一部の拡張を含む)をサポートしており、現在4.0のサポートに向けて移行中です。 今のところ<applet>タグはサポートされていませんが、<object>タグの一部分はサポートされています。

HTML EditorKitはいくつかの目標を持って提供されており、これはHTMLをモデル化する手法に反映されています。 そうした目標が、クラスの設計に実質的な影響を与えています。

編集のサポート
JEditorPane用のプラグインが編集をサポートすべきということはきわめて明白かもしれませんが、編集をサポートするには設計上の考慮すべき問題がいくつかあります。 HTML仕様に完全には準拠しないHTMLドキュメントがたくさん出回っているという事実があります。 こうしたドキュメントを編集するには、なんらかの方法で正しい形式に正規化する必要があります。 さらに、ユーザーは多量の構造編集を好まないという事実があります。このため、HTMLドキュメントで定義されているとおりのHTML構造ではなく、従来のテキスト編集の操作が好まれます。

HTMLのモデル化は、HTMLDocumentクラスで提供されています。 HTMLのモデル化については、そのドキュメントに詳しく記載されています。 編集のサポートは、主にtextパッケージで提供されます。

拡張可能/スケーラブル
このキットを無駄なく活用できるようにするために、キットを拡張可能にする努力が払われています。 次にその内容の一部を示します。
  1. パーサーは置換え可能です。 デフォルトのパーサーはDTDに基づいたHotJavaパーサーです。 別のDTDを使ったり、まったく別のパーサーを使うこともできます。 パーサーを変更するには、getParserメソッドを実装し直してください。 デフォルトのパーサーは、最初の要求があったときに動的にロードされるため、別のパーサーを使用する場合はロードされません。 デフォルトのパーサーは、このパッケージとは独立に、下位のparserパッケージにあります。
  2. パーサーは、HTMLDocumentによって提供されるParserCallbackを作動させます。 コールバックを変更するには、HTMLDocumentをサブクラス化し、別のリーダーを生成するドキュメントを返すようにcreateDefaultDocumentメソッドを実装し直してください。 リーダーは、ドキュメントがどのように構造化されるかを制御します。 Documentは、デフォルトではHTMLサポートを提供しますが、HTML以外のタグによって別の要素構造をサポートすることも可能です。
  3. そのモデルのデフォルトのビューは、View実装の階層として提供されますので、特定の要素の表示方法をカスタマイズしたり、新しいViewの実装を提供することで、新しい種類の要素に対する機能を容易に追加できます。 デフォルトのビューのセットは、HTMLFactoryクラスによって提供されます。 ビューのセットを変更するには、HTMLFactoryをサブクラス化または置き換えた上で、getViewFactoryメソッドを実装し直して別のファクトリを返すようにします。
  4. Viewの実装は、主に、ビュー内に保持されているCSS属性を使用して機能します。 これにより、実質的に異なって見える同じモデルに複数のビューをマッピングすることが可能になります。 これは、出力の際に特に便利です。 HTML属性の多くに関しては、表示用にHTML属性がCSS属性に変換されます。 これは、Viewの実装を汎用的にするのに役立ちます。
非同期ロード
大きなドキュメントでは、大量の構文解析が必要になりロードに多少時間がかかります。 デフォルトでは、このキットはJEditorPane.setPageを使ってロードする場合に非同期でロードされるドキュメントを生成します。 これは、ドキュメントのプロパティによって制御されます。 これを変更するには、メソッドcreateDefaultDocumentをオーバーライドできます。 作業のバッチ処理は、HTMLDocument.HTMLReaderクラスによって行われます。 実際の作業は、textパッケージ内のDefaultStyledDocumentおよびAbstractDocumentクラスによって行われます。
現在のLAFからのカスタマイズ
HTMLは、よく知られた表示機能を提供しますが、その表示特性は正確には指定されていません。 Swingは、Look & Feelの実装にテーマ・メカニズムを持っています。 このLook & Feelが、HTMLビューに表示特性を与えるようになっていれば便利です。 たとえば、視力の弱い人が、通常よりコントラストが強くサイズの大きいフォントを使えるようになります。

この機能のサポートは、StyleSheetクラスによって提供されます。 HTMLの表現は、EditorKitのStyleSheetプロパティの設定によって、自由に変えることができます。

データの損失なし
EditorKitはドキュメントを読み込んで保存する能力を持っています。 一般にユーザーにとっては、読み込みと保存の操作の間にデータの損失がないことが望まれます。 HTMLEditorKitのポリシーは、認識できなかったものや表示されないものもあとで書き出すときのためにメモリーに保存しておくことです。 したがって、HTMLドキュメントのモデルでは、通常、ドキュメントの読込み中に検出された情報はすべて格納されます。 しかし、このポリシーは編集をサポートするためにある種の制約を受けます(不正確なドキュメントを正規化しなければならない場合など)。 結局、ガイドラインとなる原則は、「情報は失われないように、しかし、より正確なモデルを作成するために、部分的な合成や並べ換えはありうる」ということになります。