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

クラスAbstractDocument

java.lang.Object
javax.swing.text.AbstractDocument
すべての実装されたインタフェース:
Serializable, Document
直系の既知のサブクラス:
DefaultStyledDocument, PlainDocument

public abstract class AbstractDocument extends Object implements Document, Serializable
ドキュメント・インタフェースの実装であり、各種のドキュメントを実装するときのベースになります。 このレベルではポリシーがごくわずかなので、それに応じて使用が難しくなります。

このクラスはドキュメントのロック・メカニズムを実装します。 これによって、複数の読取りまたは1つの書込みを扱えるようになり、複数の書込みがあっても、ドキュメントのオブザーバ全員に以前の変更が通知されるまで、ドキュメントに別の変更を加えることができません。 読取りロックの取得および解放には、renderメソッドを使用します。 書込みロックは、ドキュメントを変更するメソッドによって取得され、そのメソッド呼出しの間は保持されます。 通知は、ドキュメントを変更するスレッド上で行われます。このスレッドは、通知の間はドキュメントへの完全な読取りアクセス権を持っています。一方で、その他の読取り側は、通知が完了するまではアクセスを許されません。 通知はBeansイベント通知であり、すべてのリスナーが通知を受け取るまでは他の変更を許可しません。

このクラスからサブクラス化された任意のモデルで、BasicTextUIから派生したLook & Feelの実装を持つテキスト・コンポーネントと関連して使用されるものは、非同期に更新しても問題ありません。これは、ドキュメントのタイプがAbstractDocumentの場合には、View階層へのすべてのアクセスがBasicTextUIによって直列化されるからです。 ロックでは、独立したスレッドのView階層へのアクセスは必ずDocumentListenerメソッドを介して行われ、また、1回につきアクティブなイベント・スレッドは1つしか存在しないと見なします。

同期のサポートが必要な場合は、さらに次の前提条件があります。 任意のDocumentListenerおよびUndoListenerの実装に対するコード・パスがスレッドに対して安全であること、また、デッドロックを避ける場合には、コンポーネントのロックにアクセスしないこと、という条件です。 JComponentのrepaintメソッドおよびrevalidateメソッドは安全です。

AbstractDocumentはドキュメントの最後に暗黙のブレークをモデル化します。 さまざまなことが可能ですが、その1つとして最後の文字のあとにキャレットを配置できます。 その結果、Contentより短いgetLengthを返します。 独自のContentを生成する場合は、文字を追加して初期化するようにしてください。 この例についてはStringContentとGapContentを参照してください。 別の前提条件は、暗黙の最終文字をモデル化するElementsはendOffset ==(getLength()+1)となることです。 たとえば、DefaultStyledDocumentの場合はgetParagraphElement(getLength()).getEndOffset()== getLength()+1 です。

警告: このクラスの直列化されたオブジェクトは、今後のSwingリリースと互換ではなくなる予定です。 現在の直列化のサポートは、短期間の格納や、同じバージョンのSwingを実行するアプリケーション間のRMIに適しています。 1.4では、すべてのJavaBeansの長期ストレージのサポートがjava.beansパッケージに追加されました。 XMLEncoderを参照してください。