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

クラスDefaultCaret

java.lang.Object
すべての実装されたインタフェース:
FocusListener, MouseListener, MouseMotionListener, Shape, Serializable, Cloneable, EventListener, Caret
直系の既知のサブクラス:
BasicTextUI.BasicCaret

public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener
Caretのデフォルトの実装です。 キャレットは、関連するJTextComponentのCaretColorプロパティで指定された色の垂直線として描画されます。 また、BlinkRateプロパティで指定した速さで点滅させることができます。

この実装は、非同期通知のソースが2つあることを想定しています。 タイマー・スレッドは非同期にトリガーされ、これにより、キャレットは最新のバウンディング・ボックスにペイントし直されます。 また、キャレットはドキュメントが更新されるたびに変更を追跡します。 通常これは、マウス・イベントまたはキーボード・イベントによるイベント・ディスパッチ・スレッドにおいて発生します。 キャレットの動作は、ドキュメントの同期的な更新でも非同期的な更新でも、UpdatePolicyプロパティによって制御されます。 新しいキャレット位置の再ペイントは、必ずイベント・スレッド上で発生します。これは、modelToViewの呼出しがイベント・スレッド上でのみ安全だからです。

キャレットは、インストール先のテキスト・コンポーネントでマウスおよびフォーカス・リスナーとして振る舞い、キャレットのセマンティックスをそうしたイベントに基づいて定義します。 セマンティックスを変更するには、リスナーのメソッドを実装し直します。 デフォルトでは、マウスの第1ボタンを使ってフォーカスとキャレット位置を設定します。 第1ボタンを使ってマウス・ポインタをドラッグすると、モデル内の隣接する選択部分を広げることができます。 関連するテキスト・コンポーネントが編集可能な場合は、キャレットはフォーカスを得たときに可視になり、フォーカスを失ったときに不可視になります。

関連するテキストへのHighlighter境界は、デフォルトでは選択部分を描画するために使用されます。 選択部分の表示は、ハイライトに使用するペインタを提供することでカスタマイズできます。 デフォルトでは、関連するテキスト・コンポーネントのSelectionColorプロパティで指定されたソリッド色で描画されます。 これは、getSelectionPainterメソッドを実装し直すことで簡単に変更できます。

キャレットの外観は、paintメソッドを実装し直すことでカスタマイズできます。 paintメソッドを変更する場合には、damageメソッドも実装し直して、キャレットの描画に使われる領域を描画し直してください。 キャレットは、Rectangleクラスを拡張しているため、キャレットが最後に描画されたバウンディング・ボックスを保持しています。 これによって、キャレットが移動したときに、モデルの更新とビューの修復の間で動作が不安定なmodelToViewメソッドを呼び出すことなく、スレッドに対して安全な方法で描画し直すことができます(modelToViewメソッドでは、DocumentListenerへの配信の順序が保証されない)。

キャレット位置が変更されるとき、マジック・キャレットの位置はnullに設定されています。 タイマーを使って、キャレット変更後の新しい位置を指定します。 タイマーがトリガーすると、マジック・キャレットの位置がまだnullの場合、現在のキャレット位置にリセットされます。 キャレット位置を変更し、マジック・キャレットの位置をそのままにしておくアクションの場合はすべて、マジック・キャレットの位置を覚え、カーソルを変更してから、マジック・キャレットの位置をその元の位置に設定します。 このメソッドには、マジック・キャレットの位置を持続させる(オープンまたはダウンさせるなど)アクションだけがそれを知っていればよいという利点があります。

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

関連項目: