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

クラスJTextComponent

java.lang.Object
すべての実装されたインタフェース:
ImageObserver, MenuContainer, Serializable, Accessible, Scrollable
直系の既知のサブクラス:
JEditorPane, JTextArea, JTextField

@JavaBean(defaultProperty="UI") public abstract class JTextComponent extends JComponent implements Scrollable, Accessible
JTextComponentは、Swingテキスト・コンポーネントのための基底クラスです。 java.awt.TextComponentクラスとある程度の互換性があります。 また、ほかのサービスも提供されており、プラグイン可能なUIやBeanのサポート以外の柔軟性もあります。 このクラスが提供する機能の使用方法については、「The Java Tutorial」の「General Rules for Using Text Components」を参照してください。
キャレット変更
キャレットは、Swingテキスト・コンポーネント内のプラガブル・オブジェクトです。 キャレット位置と選択領域の変更通知は、テキスト・コンポーネントに登録済みのCaretListenerインタフェースの実装に送られます。 UIは、カスタマイズしたキャレットが設定済みでないかぎりデフォルトのキャレットをインストールします。
デフォルトでは、キャレットは、イベント・ディスパッチ・スレッド上でのすべてのドキュメントの変更を追跡し、キャレットの前(キャレット位置)への挿入またはキャレット位置の前の削除が行われた場合は、それに従って位置を更新します。
DefaultCaretは、自身を表示しようとします。このため、JScrollPane内でテキスト・コンポーネントがスクロールされることがあります。 キャレットのデフォルトの動作を変更するには、DefaultCaret.setUpdatePolicy(int)メソッドを使用します。
ノート: 編集不能なテキスト・コンポーネントはペイントされない場合もありますが、キャレットは存在します。
Commands
テキスト・コンポーネントは、コンポーネントを操作するのに使うコマンドを提供します。 これは本質的に、コンポーネントがその機能を表現する方法です。 これらはTextActionの実装を使用して、swing Actionインタフェースの形で表現されます。 テキスト・コンポーネントがサポートするコマンド・セットは、getActions()メソッドで確認できます。 こうしたアクションは、ボタンなどから発生するキー・イベントに割り当てられます。
テキスト入力
テキスト・コンポーネントは、キーマップとインプット・メソッドのフレームワークを使用して柔軟で国際化されたテキスト入力をサポートしています。また、AWTリスナー・モデルとの互換性も備えています。

Keymapで、アプリケーションを使用するとキー・ストロークをアクションにバインドできます。 キーマップを複数のテキスト・コンポーネントで共有するために、TextActionを拡張するアクションを使用できます。 TextActionは、どのJTextComponentがフォーカスを持っていて、アクションの対象(アクションに送られたActionEventがターゲット・テキスト・コンポーネントをソースとして含んでいない場合)であるかを判定できます。

「入力メソッド・フレームワーク」を使用すると、テキスト・コンポーネントは入力メソッド、イベントを前処理する個別のソフトウェア・コンポーネントと相互作用し、ユーザーはキーがはるかに少ないキーボードを使用して数千の異なる文字を入力できます。 JTextComponentは、フレームワークのアクティブ・クライアントであるため、インプット・メソッドとやりとりするための適切なユーザー・インタフェースを実装します。 結果的に、キー・イベントの中にはインプット・メソッドにより処理されるため、テキスト・コンポーネントに到達しないものがあります。また、テキスト入力の中には、キー・イベントとしてではなくInputMethodEventの中の確定テキストとして、テキスト・コンポーネントに到達するものもあります。 完全なテキスト入力とは、keyTypedキー・イベントの文字と、インプット・メソッド・イベントの確定テキストとの組み合わせです。

AWTリスナー・モデルで、アプリケーションを使用してイベントをアクションにバインドするためにイベント・リスナーをコンポーネントと結び付けることができます。 Swingでは、リスナーではなくキーマップを使用することを推奨していますが、イベントを消費することによりそのイベントを横取りする機会をリスナーに与えることによってリスナーとの互換性を維持しています。

キーボード・イベントとインプット・メソッド・イベントは、次の工程で処理されます。

キーボードおよびインプット・メソッド・イベント処理の段階
ステージ KeyEvent InputMethodEvent
1. インプット・メソッド (ここで生成される)
2. フォーカス・マネージャ
3. 登録済みのキー・リスナー 登録済みのインプット・メソッド・リスナー
4. JTextComponentで処理するインプット・メソッド
5. 現在のキーマップを使用して処理するキーマップ
6. JComponentで処理するキーボード(アクセラレータ、コンポーネント・ナビゲーションなど)

キー・イベントには待機しているが、インプット・メソッド・イベントは認識しないアプリケーションとの互換性を保つため、工程4で処理するインプット・メソッドは、インプット・メソッドを処理しないコンポーネントのための互換性を提供しています。 これらのコンポーネントでは、確定テキストはkeyTypedキー・イベントに変換され、インプット・メソッドのイベント・パイプラインではなく、工程3で開始されるキー・イベント・パイプラインで処理されます。

コンポーネントはデフォルトで、すべてのJTextComponentのインスタンスによってデフォルト・キーマップとして共有されるキーマップ(DEFAULT_KEYMAP)を作成します。 一般的に、Look & Feelの実装は、デフォルトのキーマップに解決する別のキーマップをインストールして、デフォルトのキーマップを、別のキーマップにはないキー割当てに対応させます。 次に、最小の割り当てを示します。

  • エディタに印刷可能キーのコンテンツを挿入する。
  • バックスペース・キーとDelキーでコンテンツを削除する。
  • 順方向と逆方向のキャレット移動
モデル/ビュー分割
テキスト・コンポーネントはモデル/ビュー分割を持ちます。 テキスト・コンポーネントは、モデル、ビュー、コントローラを表すのに使うオブジェクトをまとめます。 テキスト・ドキュメント・モデルは、モデルのオブザーバとして動作するほかのビューによって共有されます(ドキュメントを複数のコンポーネントによって共有できるなど)。

コントローラ、ドキュメント、イベント、およびViewFactory間のやりとりを示す図

このモデルはDocumentインタフェースによって定義されます。 これは、編集時に変更を追跡する柔軟なテキスト・ストレージ・メカニズムを提供するためのもので、より高度なモデルに拡張できます。 モデル・インタフェースは、SGMLが提供する式の機能、つまり多様なコンテンツを表現するのに使うシステムを取り込むためのものです。 ドキュメントに加える各修正は、ビューを最新のモデルに同期できるようにするDocumentEventという形式で変更の詳細な通知がすべてのオブザーバに送られます。 このイベントは、DocumentListenerインタフェースを実装して監視中のモデルに配信対象を登録したオブザーバに送られます。

位置情報
ビューでテキスト位置を指定する機能が提供されます。 この情報を判定するために、modelToView(int)viewToModel(java.awt.Point)の2つのメソッドが用意されています。
元に戻す/再実行のサポート
編集履歴メカニズムのサポートが提供されているので、元に戻す/再実行の操作を行うことができます。 テキスト・コンポーネントはそれ自体ではデフォルトで履歴バッファを提供しませんが、履歴バッファと組み合わせて使うと、「元に戻す/再実行」をサポートするUndoableEditレコードを提供します。 そのサポートはDocumentモデルによって提供されます。このモデルにより、UndoableEditListenerの実装の追加が可能になります。
スレッド安全性
Swingテキスト・コンポーネントは特定のスレッドに対して安全な操作のサポートを提供します。 テキスト・コンポーネントは高度な構成機能を持つので、提供される保護機能を使用しないこともできます。 保護機能は主にモデルにより考え出されたもので、AbstractDocumentのマニュアルでは提供される保護の前提条件を説明しています。 非同期で安全に呼び出せるメソッドには、コメントが付けられています。
Newlines
改行の処理方法については、DefaultEditorKitを参照してください。
印刷のサポート
基本的なドキュメントの印刷処理のため、いくつかのprintメソッドが用意されています。 高度な印刷処理が必要な場合は、getPrintable(java.text.MessageFormat, java.text.MessageFormat)メソッドを使用します。

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

関連項目: