|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjavax.swing.text.AbstractDocument
public abstract class AbstractDocument
ドキュメントインタフェースの実装であり、各種のドキュメントを実装するときのベースになります。このレベルではポリシーがごくわずかなので、それに応じて使用が難しくなります。
このクラスは、ドキュメントのロック機構を実装します。この機構によって、複数の読み込みまたは 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 に適しています。JDK Version 1.4 以降、すべての JavaBeans™ の長期間の運用サポートは、java.beans パッケージに追加されています。詳細は、XMLEncoder を参照してください。
| 入れ子のクラスの概要 | |
|---|---|
class |
AbstractDocument.AbstractElement
要素の抽象部分を実装します。 |
static interface |
AbstractDocument.AttributeContext
このインタフェースは、プラグイン可能な属性圧縮手法を MutableAttributeSet の実装で使用可能にするために使用できます。 |
class |
AbstractDocument.BranchElement
ほかの要素を含む複合要素を実装します。 |
static interface |
AbstractDocument.Content
編集可能な文字のシーケンスを示すインタフェースです。 |
class |
AbstractDocument.DefaultDocumentEvent
ドキュメントが変更された場合に、ドキュメントの変更を格納します。 |
static class |
AbstractDocument.ElementEdit
ドキュメントのイベントに追加できる ElementChange の実装です。 |
class |
AbstractDocument.LeafElement
ある種のコンテンツを直接表す要素を実装します。 |
| フィールドの概要 | |
|---|---|
protected static String |
BAD_LOCATION
不正な位置を示すエラーメッセージです。 |
static String |
BidiElementName
単方向の実行を示す要素の名前です。 |
static String |
ContentElementName
内容を示す要素の名前です。 |
static String |
ElementNameAttribute
要素の名前の指定に使う属性の名前です。 |
protected EventListenerList |
listenerList
ドキュメントのイベントリスナーです。 |
static String |
ParagraphElementName
段落を示す要素の名前です。 |
static String |
SectionElementName
行、段落などのセクションを示す要素の名前です。 |
| インタフェース javax.swing.text.Document から継承されたフィールド |
|---|
StreamDescriptionProperty, TitleProperty |
| コンストラクタの概要 | |
|---|---|
protected |
AbstractDocument(AbstractDocument.Content data)
なんらかの内容記憶機構をラップした、新しい AbstractDocument を構築します。 |
protected |
AbstractDocument(AbstractDocument.Content data,
AbstractDocument.AttributeContext context)
なんらかの内容記憶機構をラップした、新しい AbstractDocument を構築します。 |
| メソッドの概要 | ||
|---|---|---|
void |
addDocumentListener(DocumentListener listener)
ドキュメントリスナーを追加し、変更があったときに通知されるようにします。 |
|
void |
addUndoableEditListener(UndoableEditListener listener)
任意の変更を通知するアンドゥリスナーを追加します。 |
|
protected Element |
createBranchElement(Element parent,
AttributeSet a)
ドキュメントの枝の要素を作成します。 |
|
protected Element |
createLeafElement(Element parent,
AttributeSet a,
int p0,
int p1)
ドキュメントの葉の要素を作成します。 |
|
Position |
createPosition(int offs)
ドキュメントが変更されたときに、変更を追跡する位置を返します。 |
|
void |
dump(PrintStream out)
診断用のダンプを出力します。 |
|
protected void |
fireChangedUpdate(DocumentEvent e)
通知の配信対象を、指定されたイベント型で登録したすべてのリスナーに通知します。 |
|
protected void |
fireInsertUpdate(DocumentEvent e)
通知の配信対象を、指定されたイベント型で登録したすべてのリスナーに通知します。 |
|
protected void |
fireRemoveUpdate(DocumentEvent e)
通知の配信対象を、指定されたイベント型で登録したすべてのリスナーに通知します。 |
|
protected void |
fireUndoableEditUpdate(UndoableEditEvent e)
通知の配信対象を、指定されたイベント型で登録したすべてのリスナーに通知します。 |
|
int |
getAsynchronousLoadPriority()
非同期ロードの優先順位を取得します。 |
|
protected AbstractDocument.AttributeContext |
getAttributeContext()
属性を管理するためのコンテキストを返します。 |
|
Element |
getBidiRootElement()
ドキュメントの双方向構造のルート要素を返します。 |
|
protected AbstractDocument.Content |
getContent()
ドキュメントの内容を取得します。 |
|
protected Thread |
getCurrentWriter()
現在の書き込みスレッドがあれば、それを取得します。 |
|
abstract Element |
getDefaultRootElement()
ルート要素を返します。 |
|
DocumentFilter |
getDocumentFilter()
挿入または削除のフィルタを行う DocumentFilter を返します。 |
|
DocumentListener[] |
getDocumentListeners()
このドキュメントに登録された、すべてのドキュメントリスナーから成る配列を返します。 |
|
Dictionary<Object,Object> |
getDocumentProperties()
プロパティーのセットの管理をサポートします。 |
|
Position |
getEndPosition()
ドキュメントの末尾を表す位置を返します。 |
|
int |
getLength()
データの長さを返します。 |
|
|
getListeners(Class<T> listenerType)
このドキュメントに FooListener として現在登録されているすべてのオブジェクトの配列を返します。 |
|
abstract Element |
getParagraphElement(int pos)
指定された位置を保持する段落要素を取得します。 |
|
Object |
getProperty(Object key)
プロパティーの値を調べるのに便利なメソッドです。 |
|
Element[] |
getRootElements()
定義されているルート要素をすべて取得します。 |
|
Position |
getStartPosition()
ドキュメントの先頭を表す位置を返します。 |
|
String |
getText(int offset,
int length)
ドキュメントからテキストのシーケンスを取得します。 |
|
void |
getText(int offset,
int length,
Segment txt)
ドキュメントの指定部分内にあるテキストを取得します。 |
|
UndoableEditListener[] |
getUndoableEditListeners()
このドキュメントに登録された、すべての取り消し可能編集リスナーから成る配列を返します。 |
|
void |
insertString(int offs,
String str,
AttributeSet a)
ドキュメントに内容を挿入します。 |
|
protected void |
insertUpdate(AbstractDocument.DefaultDocumentEvent chng,
AttributeSet attr)
ドキュメント構造をテキスト挿入の結果で更新します。 |
|
protected void |
postRemoveUpdate(AbstractDocument.DefaultDocumentEvent chng)
ドキュメント構造をテキスト削除の結果で更新します。 |
|
void |
putProperty(Object key,
Object value)
プロパティーの値を格納するのに便利なメソッドです。 |
|
void |
readLock()
ロックを取得して、ドキュメントからなんらかの状態の読み込みを開始できるようにします。 |
|
void |
readUnlock()
読み込みのロックを解除します。 |
|
void |
remove(int offs,
int len)
ドキュメントから内容を削除します。 |
|
void |
removeDocumentListener(DocumentListener listener)
ドキュメントリスナーを削除します。 |
|
void |
removeUndoableEditListener(UndoableEditListener listener)
アンドゥリスナーを削除します。 |
|
protected void |
removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
ドキュメント構造をテキスト削除の結果で更新します。 |
|
void |
render(Runnable r)
モデルが非同期的な更新をサポートしている場合、並行性に直面してモデルを安全に描画できるようにします。 |
|
void |
replace(int offset,
int length,
String text,
AttributeSet attrs)
offset から offset + length までのテキスト領域を削除し、text に置き換えます。 |
|
void |
setAsynchronousLoadPriority(int p)
非同期ロードの優先順位を設定します。 |
|
void |
setDocumentFilter(DocumentFilter filter)
DocumentFilter を設定します。 |
|
void |
setDocumentProperties(Dictionary<Object,Object> x)
このドキュメントのドキュメントプロパティーの辞書を置き換えます。 |
|
protected void |
writeLock()
ロックを取得して、ロックが保護しているドキュメントの変更を開始できるようにします。 |
|
protected void |
writeUnlock()
以前 writeLock 経由で取得された書き込みロックを解除します。 |
|
| クラス java.lang.Object から継承されたメソッド |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| フィールドの詳細 |
|---|
protected EventListenerList listenerList
protected static final String BAD_LOCATION
public static final String ParagraphElementName
public static final String ContentElementName
public static final String SectionElementName
public static final String BidiElementName
public static final String ElementNameAttribute
| コンストラクタの詳細 |
|---|
protected AbstractDocument(AbstractDocument.Content data)
AbstractDocument を構築します。
data - コンテンツ
protected AbstractDocument(AbstractDocument.Content data,
AbstractDocument.AttributeContext context)
AbstractDocument を構築します。
data - コンテンツcontext - 属性のコンテキスト| メソッドの詳細 |
|---|
public Dictionary<Object,Object> getDocumentProperties()
documentProperties の辞書を使用して、ドキュメント全体に関するプロパティーの注釈を付加できます。
null 以外の DictionarysetDocumentProperties(java.util.Dictionary) public void setDocumentProperties(Dictionary<Object,Object> x)
x - 新規辞書getDocumentProperties()protected void fireInsertUpdate(DocumentEvent e)
e - イベントEventListenerListprotected void fireChangedUpdate(DocumentEvent e)
e - イベントEventListenerListprotected void fireRemoveUpdate(DocumentEvent e)
e - イベントEventListenerListprotected void fireUndoableEditUpdate(UndoableEditEvent e)
e - イベントEventListenerListpublic <T extends EventListener> T[] getListeners(Class<T> listenerType)
FooListener として現在登録されているすべてのオブジェクトの配列を返します。FooListener は、addFooListener メソッドを使用して登録します。
FooListener.class といったクラスリテラルを使用して、listenerType 引数を指定できます。たとえば次のコードを使用して、ドキュメント d をそのドキュメントリスナーに照会できます。
DocumentListener[] mls = (DocumentListener[])(d.getListeners(DocumentListener.class));このようなリスナーがない場合は空の配列を返します。
listenerType - 要求されるリスナーの型。java.util.EventListener の下位インタフェースを指定
FooListener として登録されているすべてのオブジェクトの配列。リスナーが登録されていない場合は空の配列を返す
ClassCastException - listenerType が java.util.EventListener を実装するクラスまたはインタフェースを指定しない場合getDocumentListeners(),
getUndoableEditListeners()public int getAsynchronousLoadPriority()
-1public void setAsynchronousLoadPriority(int p)
p - 新しい非同期ロードの優先順位。 0 より小さい値の場合、 ドキュメントは非同期でロードされないpublic void setDocumentFilter(DocumentFilter filter)
DocumentFilter を設定します。DocumentFilter が insert と remove に渡され、条件付きでテキストの挿入や削除が可能になります。null 値は、フィルタが実行されないことを表します。
filter - テキストの制約に使用される DocumentFiltergetDocumentFilter()public DocumentFilter getDocumentFilter()
DocumentFilter を返します。戻り値 null は、フィルタが実行されないことを表します。
setDocumentFilter(javax.swing.text.DocumentFilter)public void render(Runnable r)
この実装は、実行している間、読み込みロックを取得するためのものです。複数を同時に実行している場合、アクティブに描画中のオブジェクトがある間は、すべての書き込みがブロックされます。オブジェクトが例外をスローした場合、そのロックは安全に解放されます。決して終了しないオブジェクトに対する保護はなく、事実上、ドキュメントは自身が存在する間ずっとロックされます。
指定されたオブジェクトがどのような変更を試みても、デッドロックが発生します。この状況を検知できるようにするために個々の描画スレッドを追跡することはできません。 また、サブクラスは、描画スレッドの追跡、およびエラーのスローのオーバーヘッドを発生させる可能性があります。
このメソッドはスレッドに対して安全ですが、ほとんどの Swing メソッドは違います。詳細は、「How to Use Threads」を参照してください。
Document 内の renderr - 実行するレンダリングpublic int getLength()
Document 内の getLengthDocument.getLength()public void addDocumentListener(DocumentListener listener)
Document 内の addDocumentListenerlistener - 追加する DocumentListenerDocument.addDocumentListener(javax.swing.event.DocumentListener)public void removeDocumentListener(DocumentListener listener)
Document 内の removeDocumentListenerlistener - 削除する DocumentListenerDocument.removeDocumentListener(javax.swing.event.DocumentListener)public DocumentListener[] getDocumentListeners()
DocumentListener。 ドキュメントリスナーが現在登録されていない場合は 空の配列addDocumentListener(javax.swing.event.DocumentListener),
removeDocumentListener(javax.swing.event.DocumentListener)public void addUndoableEditListener(UndoableEditListener listener)
UndoableEdit で実行される「元に戻す/再実行」操作は、適切な DocumetnEvent を発生させて、ビュー (複数の場合もあり) をモデルと同期させます。
Document 内の addUndoableEditListenerlistener - 追加する UndoableEditListenerDocument.addUndoableEditListener(javax.swing.event.UndoableEditListener)public void removeUndoableEditListener(UndoableEditListener listener)
Document 内の removeUndoableEditListenerlistener - 削除する UndoableEditListenerDocument.removeDocumentListener(javax.swing.event.DocumentListener)public UndoableEditListener[] getUndoableEditListeners()
UndoableEditListener。 取り消し可能編集リスナーが現在登録されていない場合は 空の配列addUndoableEditListener(javax.swing.event.UndoableEditListener),
removeUndoableEditListener(javax.swing.event.UndoableEditListener)public final Object getProperty(Object key)
getDocumentProperties().get(key);
Document 内の getPropertykey - null 以外のプロパティーキー
nullgetDocumentProperties()
public final void putProperty(Object key,
Object value)
getDocumentProperties().put(key, value);
value が null の場合、このメソッドはプロパティーを削除します。
Document 内の putPropertykey - null 以外のキーvalue - プロパティーの値getDocumentProperties()
public void remove(int offs,
int len)
throws BadLocationException
このメソッドはスレッドに対して安全ですが、ほとんどの Swing メソッドは違います。詳細は、「How to Use Threads」を参照してください。
Document 内の removeoffs - 開始オフセット <= 0len - 削除対象の文字数 >= 0
BadLocationException - 指定された削除位置が ドキュメント内の有効な位置でない場合Document.remove(int, int)
public void replace(int offset,
int length,
String text,
AttributeSet attrs)
throws BadLocationException
offset から offset + length までのテキスト領域を削除し、text に置き換えます。この動作がどのように実装されるかはその実装に左右され、削除してから挿入を行うというように別々の 2 つの操作として実装することもあれば、置き換えを行うというように 1 つの基本操作として実装することもあります。
offset - 子要素のインデックスlength - 削除するテキストの長さ。 0 の場合は 何も削除されないtext - 挿入するテキスト。 null の場合、テキストは挿入されないattrs - 挿入されたテキストの属性を示す AttributeSet。 null も可。 空の属性セットとして扱われるが、 サブクラスで正確な解釈をする
BadLocationException - 指定された位置が ドキュメント内の有効な位置でない場合
public void insertString(int offs,
String str,
AttributeSet a)
throws BadLocationException
このメソッドはスレッドに対して安全ですが、ほとんどの Swing メソッドは違います。詳細は、「How to Use Threads」を参照してください。
Document 内の insertStringoffs - 開始オフセット <= 0str - 挿入する文字列。null や空の文字列の場合は何もしないa - 挿入されたコンテンツの属性
BadLocationException - 指定された挿入位置が ドキュメント内の有効な位置でない場合Document.insertString(int, java.lang.String, javax.swing.text.AttributeSet)
public String getText(int offset,
int length)
throws BadLocationException
Document 内の getTextoffset - 開始オフセット <= 0length - 検索対象の文字数 >= 0
BadLocationException - 指定された範囲に、ドキュメント内の 無効な位置が含まれる場合Document.getText(int, int)
public void getText(int offset,
int length,
Segment txt)
throws BadLocationException
txt パラメータの partialReturn プロパティーが false の場合、Segment で返されたデータは、要求された長さ全体になり、データの格納方法によってコピーになる場合とならない場合があります。partialReturn プロパティーが true の場合は、コピーを作成しなくても返すことが可能なテキストの量だけが返されます。部分的に返すことで、ドキュメントの大部分をスキャンする場合のパフォーマンスが向上します。部分的に返す方法でドキュメント全体にアクセスする例を次に示します。
int nleft = doc.getDocumentLength();
Segment text = new Segment();
int offs = 0;
text.setPartialReturn(true);
while (nleft > 0) {
doc.getText(offs, nleft, text);
// do something with text
nleft -= text.count;
offs += text.count;
}
Document 内の getTextoffset - 開始オフセット <= 0length - 検索対象の文字数 >= 0txt - テキストを取得する Segment オブジェクト
BadLocationException - 指定された範囲に、ドキュメント内の 無効な位置が含まれる場合
public Position createPosition(int offs)
throws BadLocationException
このメソッドはスレッドに対して安全ですが、ほとんどの Swing メソッドは違います。詳細は、「How to Use Threads」を参照してください。
Document 内の createPositionoffs - モデル内の位置 >= 0
BadLocationException - 指定された位置が、関連するドキュメント内の 有効な位置を示さない場合Document.createPosition(int)public final Position getStartPosition()
Document 内の getStartPositionpublic final Position getEndPosition()
Document 内の getEndPositionpublic Element[] getRootElements()
Document 内の getRootElementspublic abstract Element getDefaultRootElement()
Document 内の getDefaultRootElementDocument.getDefaultRootElement()public Element getBidiRootElement()
public abstract Element getParagraphElement(int pos)
pos - 開始オフセット <= 0
protected final AbstractDocument.AttributeContext getAttributeContext()
protected void insertUpdate(AbstractDocument.DefaultDocumentEvent chng,
AttributeSet attr)
chng - 変更の説明attr - 変更の属性protected void removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
chng - 変更の説明protected void postRemoveUpdate(AbstractDocument.DefaultDocumentEvent chng)
chng - 変更の説明public void dump(PrintStream out)
out - 出力ストリームprotected final AbstractDocument.Content getContent()
protected Element createLeafElement(Element parent,
AttributeSet a,
int p0,
int p1)
parent - 親要素a - 要素の属性p0 - 範囲の始点 >= 0p1 - 範囲の終点 >= p0
protected Element createBranchElement(Element parent,
AttributeSet a)
parent - 親要素a - 属性
protected final Thread getCurrentWriter()
nullprotected final void writeLock()
writeLock を取得しようとしないかぎり、複数の writeLock を取得できます。DocumentListener 通知内から writeLock を取得しようとすると、IllegalStateException となります。スレッドごとに複数の writeLock を取得する機能により、サブクラスは writeLock を取得し、多数の操作を実行してから、ロックを開放できます。
writeLock の呼び出しは、writeUnlock の呼び出しと回数が同じである必要があります。そうでないと、Document がロック状態のままになり、読み込みや書き込みを実行できません。
IllegalStateException - 不正なロックを試みた場合にスローされる。ドキュメントが適切に実装されていれば、ドキュメントリスナーがドキュメントの変更を試みた場合にのみこの例外が発生する。こうした状況は、Bean イベントモデルに違反している。このイベントモデルでは配信の順序に保証はなく、変更が許可される前に、すべてのリスナーに通知される必要があるprotected final void writeUnlock()
writeLock 経由で取得された書き込みロックを解除します。ロック数を 1 つ減らしたあと、未処理のロックがない場合は、新しい書き込み側または読み込み側が許可されます。
writeLock()public final void readLock()
readUnlock を呼び出してください。
readUnlock()public final void readUnlock()
readLock();
try {
// do something
} finally {
readUnlock();
}
readLock()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。