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

クラスDefaultCaret

  • すべての実装されたインタフェース:
    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を参照してください。

    関連項目:
    Caret, 「直列化されたフォーム」
    • フィールドの詳細

      • UPDATE_WHEN_ON_EDT

        public static final int UPDATE_WHEN_ON_EDT
        イベント・ディスパッチ・スレッドでドキュメントの変更が行われる場合にのみキャレット位置が更新されることを示します。
        導入されたバージョン:
        1.5
        関連項目:
        setUpdatePolicy(int), getUpdatePolicy(), 定数フィールド値
      • NEVER_UPDATE

        public static final int NEVER_UPDATE
        削除のせいでドキュメントの長さが現在のキャレット位置よりも短くなる場合を除き、ドキュメントの更新に関係なく、ドキュメント内のキャレットの絶対位置が変わらないことを示します。 ドキュメントの長さが現在のキャレット位置よりも短くなる場合は、ドキュメントの末尾に合わせてキャレット位置が調整されます。
        導入されたバージョン:
        1.5
        関連項目:
        setUpdatePolicy(int), getUpdatePolicy(), 定数フィールド値
      • ALWAYS_UPDATE

        public static final int ALWAYS_UPDATE
        ドキュメントの更新がイベント・ディスパッチ・スレッドで行われるかどうかに関係なく、ドキュメントの変更に従ってキャレット位置が必ず更新されることを示します。
        導入されたバージョン:
        1.5
        関連項目:
        setUpdatePolicy(int), getUpdatePolicy(), 定数フィールド値
      • listenerList

        protected EventListenerList listenerList
        イベント・リスナーのリストです。
      • changeEvent

        protected transient ChangeEvent changeEvent
        モデルの変更を示すイベントです。 イベント専用の(読込み専用)状態がソース・プロパティなので、必要なChangeEventの数はモデル・インスタンスごとに1つです。 ここで生成されたイベントのソースは、常に「this」です。
    • コンストラクタの詳細

      • DefaultCaret

        public DefaultCaret()
        デフォルトのキャレットを構築します。
    • メソッドの詳細

      • setUpdatePolicy

        public void setUpdatePolicy​(int policy)
        ドキュメントの更新に対するキャレット移動ポリシーを設定します。 通常は、キャレット位置の前またはその位置に挿入が行われた場合、あるいはキャレット位置の前で削除が行われた場合に、ドキュメント内のキャレットの絶対位置が更新されます。 ここでの「絶対位置」とは、ドキュメントの先頭を基準にした位置のことです。 たとえば、編集可能なテキスト・コンポーネント内に文字を入力すると、その文字はキャレット位置に挿入され、キャレットは挿入のせいでドキュメント内の次の絶対位置に移動します。次に、BACKSPACEを入力すると、キャレット位置の前にある文字が削除されたためにキャレットの絶対位置が減少します。 場合によっては、キャレット位置の更新をオフにして、ドキュメントの更新に関係なく、ドキュメント位置におけるキャレットの絶対位置を同じままにしておくことが有効なこともあります。

        次の更新ポリシーを設定できます。

        • NEVER_UPDATE: 削除のせいでドキュメントの長さが現在のキャレット位置よりも短くなる場合を除き、ドキュメントの更新に関係なく、ドキュメント内のキャレットの絶対位置が変わらないことを示します。 ドキュメントの長さが現在のキャレット位置よりも短くなる場合は、ドキュメントの末尾に合わせてキャレット位置が調整されます。 このポリシーの使用時は、キャレットは関連したビューをスクロールして、キャレット自体を可視状態にしておこうとはしません。
        • ALWAYS_UPDATE: キャレットは常にドキュメントの変更を追跡します。 通常の変更では、キャレットの現在位置の前またはその位置に挿入が行われると、キャレット位置が増加し、キャレットの現在位置の前で削除が行われると、キャレット位置が減少します。 更新を元に戻したり、再実行したりする場合、キャレットは常に更新が行われた位置に移動します。 また、キャレットはadjustVisibilityメソッドを呼び出して、キャレット自体を可視状態にしておこうとします。
        • UPDATE_WHEN_ON_EDT: ドキュメントの更新がイベント・ディスパッチ・スレッドに対して行われた場合は、ALWAYS_UPDATEのように動作し、ほかのスレッドに対して行われた場合は、NEVER_UPDATEのように動作します。

        プロパティのデフォルト値はUPDATE_WHEN_ON_EDTです。

        パラメータ:
        policy - 次の値のいずれか。UPDATE_WHEN_ON_EDT, NEVER_UPDATE, ALWAYS_UPDATE
        例外:
        IllegalArgumentException - 渡された値が無効な場合
        導入されたバージョン:
        1.5
        関連項目:
        getUpdatePolicy(), adjustVisibility(java.awt.Rectangle), UPDATE_WHEN_ON_EDT, NEVER_UPDATE, ALWAYS_UPDATE
      • getUpdatePolicy

        public int getUpdatePolicy()
        ドキュメントの更新に対するキャレット移動ポリシーを取得します。
        戻り値:
        次の値のいずれか。UPDATE_WHEN_ON_EDT, NEVER_UPDATE, ALWAYS_UPDATE
        導入されたバージョン:
        1.5
        関連項目:
        setUpdatePolicy(int), UPDATE_WHEN_ON_EDT, NEVER_UPDATE, ALWAYS_UPDATE
      • getComponent

        protected final JTextComponent getComponent()
        このキャレットを使用するテキスト・エディタ・コンポーネントを返します。
        戻り値:
        コンポーネント
      • repaint

        protected final void repaint()
        キャレットを描画します。 描画し直す領域は、キャレットのバウンディング・ボックス(キャレットの矩形、つまりthis)です。

        このメソッドはスレッド・セーフですが、ほとんどのSwingメソッドは違います。 詳細は、Swingでの並行性に関連しているサイトを参照してください。

      • damage

        protected void damage​(Rectangle r)
        キャレットを囲む領域を壊して、新しい位置に再ペイントされるようにします。 paint()の実装をやり直した場合は、このメソッドも実装し直してください。 このメソッドは、キャレットの境界(x、y、幅、高さ)を更新します。
        パラメータ:
        r - キャレットの現在の位置
        関連項目:
        paint(java.awt.Graphics)
      • adjustVisibility

        protected void adjustVisibility​(Rectangle nloc)
        必要に応じて、関連するビューをスクロールして、キャレットを表示します。 この操作の処理方法はポリシーによって変わるので、メソッドの実装をやり直して動作を変更してもかまいません。 デフォルトでは、関連するコンポーネントでscrollRectToVisibleメソッドが呼び出されます。
        パラメータ:
        nloc - スクロール先の新しい位置
      • getSelectionPainter

        protected Highlighter.HighlightPainter getSelectionPainter()
        ハイライタのペインタを取得します。
        戻り値:
        ペインタ
      • positionCaret

        protected void positionCaret​(MouseEvent e)
        viewToModel()を使用して、マウス・イベントの座標からキャレットの位置の設定を試みます。
        パラメータ:
        e - マウス・イベント
      • moveCaret

        protected void moveCaret​(MouseEvent e)
        viewToModel()を使用して、マウス・イベントの座標からキャレットの移動を試みます。 ドットとマークの位置が異なる場合は、範囲の選択になります。
        パラメータ:
        e - マウス・イベント
      • focusGained

        public void focusGained​(FocusEvent e)
        キャレットを含むコンポーネントがフォーカスを取得したときに呼び出されます。 編集可能なコンポーネントのキャレットを可視に設定するために実装されています。
        定義:
        focusGained、インタフェースFocusListener
        パラメータ:
        e - フォーカス・イベント
        関連項目:
        FocusListener.focusGained(java.awt.event.FocusEvent)
      • focusLost

        public void focusLost​(FocusEvent e)
        キャレットを含むコンポーネントがフォーカスを失ったときに呼び出されます。 キャレットの可視属性をfalseに設定するために実装されています。
        定義:
        focusLost、インタフェースFocusListener
        パラメータ:
        e - フォーカス・イベント
        関連項目:
        FocusListener.focusLost(java.awt.event.FocusEvent)
      • mouseClicked

        public void mouseClicked​(MouseEvent e)
        マウスがクリックされたときに呼び出されます。 ボタン1がクリックされた場合、ダブルクリックでは単語を、トリプル・クリックでは現在の行(1行)を選択します。
        定義:
        mouseClicked、インタフェースMouseListener
        パラメータ:
        e - マウス・イベント
        関連項目:
        MouseListener.mouseClicked(java.awt.event.MouseEvent)
      • mousePressed

        public void mousePressed​(MouseEvent e)
        ボタン1がクリックされた場合に、関連するテキスト・コンポーネントへのフォーカスを要求し、キャレットの位置を設定するために実装されます。 Shiftキーを押したままだと、キャレットは選択範囲内に移動されることもあります。押していなければ、キャレットの位置は新しい位置に設定されます。 コンポーネントが有効になっていない場合は、フォーカスの要求は出されません。
        定義:
        mousePressed、インタフェースMouseListener
        パラメータ:
        e - マウス・イベント
        関連項目:
        MouseListener.mousePressed(java.awt.event.MouseEvent)
      • paint

        public void paint​(Graphics g)
        キャレットを垂直線としてレンダリングします。 この実装をやり直した場合は、damageメソッドの実装もやり直してください。これは、damageメソッドが、キャレットの形状を垂直線と仮定しているからです。 キャレットの色は、getCaretColor()の戻り値に従って設定します。

        関連したドキュメントに複数のテキスト方向がある場合は、キャレットのバイアスを示すフラグが描画されます。 これは、関連するドキュメントがAbstractDocumentのサブクラスであり、かつ、BIDI要素構造内に複数のBIDIレベルが存在する場合(すなわち、テキストがテキスト自身に関連した複数の方向を持っている場合)にのみ発生します。

        定義:
        paint、インタフェースCaret
        パラメータ:
        g - グラフィックス・コンテキスト
        関連項目:
        damage(java.awt.Rectangle)
      • install

        public void install​(JTextComponent c)
        JTextComponentのインタフェースにUIがインストールされるときに呼び出されます。 このメソッドを使うと、このインタフェースの実装によってナビゲートされているモデルにアクセスできます。 dotとmarkを0に設定し、ドキュメント、プロパティの変更、フォーカス、マウス、およびマウス移動のリスナーを生成します。
        定義:
        install、インタフェースCaret
        パラメータ:
        c - コンポーネント
        関連項目:
        Caret.install(javax.swing.text.JTextComponent)
      • deinstall

        public void deinstall​(JTextComponent c)
        UIがJTextComponentのインタフェースから削除されたときに呼び出されます。 このメソッドは、追加されたリスナーの登録を解除するために使用されます。
        定義:
        deinstall、インタフェースCaret
        パラメータ:
        c - コンポーネント
        関連項目:
        Caret.deinstall(javax.swing.text.JTextComponent)
      • fireStateChanged

        protected void fireStateChanged()
        このイベント・タイプの通知対象として登録されているすべてのリスナーに通知します。 イベント・インスタンスは、fireメソッドに渡されるパラメータを使って簡単に生成されます。 リスナーのリストは、最後から先頭に向かって処理されます。
        関連項目:
        EventListenerList
      • getListeners

        public <T extends EventListener> T[] getListeners​(Class<T> listenerType)
        このキャレットにFooListenerとして現在登録されているすべてのオブジェクトの配列を返します。 FooListenerは、addFooListenerメソッドを使用して登録されます。

        FooListener.classなどのクラス・リテラルを使用してlistenerType引数を指定できます。 たとえば、次のコードを使用すると、DefaultCaret cの変更リスナーを照会できます。

        ChangeListener[] cls = (ChangeListener[])(c.getListeners(ChangeListener.class));
        このようなリスナーがない場合は空の配列を返します。

        型パラメータ:
        T - リスナー型
        パラメータ:
        listenerType - リクエストされたリスナーの型
        戻り値:
        このコンポーネント上でFooListenerとして登録されたすべてのオブジェクトの配列、またはこのようなリスナーが追加されていない場合は空の配列
        例外:
        ClassCastException - listenerTypeで、java.util.EventListenerを実装するクラスまたはインタフェースが指定されなかった場合
        導入されたバージョン:
        1.3
        関連項目:
        getChangeListeners()
      • setSelectionVisible

        public void setSelectionVisible​(boolean vis)
        選択範囲の可視性を変更します。
        定義:
        setSelectionVisible、インタフェースCaret
        パラメータ:
        vis - 新しい可視性
      • isSelectionVisible

        public boolean isSelectionVisible()
        現在の選択範囲が可視であるかどうかを判定します。
        定義:
        isSelectionVisible、インタフェースCaret
        戻り値:
        選択範囲が可視の場合はtrue
      • isActive

        public boolean isActive()
        キャレットが現在アクティブであるかどうかを判定します。

        このメソッドは、キャレットが現在点滅状態にあるかどうかを返します。 キャレットの点滅が現在オンまたはオフのどちらになっているかの情報は返しません。 キャレットが現在ペイントされるかどうかを確認するには、isVisibleメソッドを使用してください。

        戻り値:
        true (アクティブな場合)。そうでない場合はfalse
        導入されたバージョン:
        1.5
        関連項目:
        isVisible()
      • isVisible

        public boolean isVisible()
        キャレットが現在可視状態であるかどうかを示します。 キャレットは点滅するため、このメソッドの戻り値は、キャレットがペイントされる場合はtrueとなり、キャレットがペイントされない場合はfalseとなります。isActiveは、キャレットが点滅状態にあるかどうかを示します。たとえば、キャレットを可視にできる場合、isVisibleはキャレットが実際に可視状態かどうかを示します。

        別の点滅するキャレットを描画する場合は、サブクラスでpaintメソッドをオーバーライドし、そのメソッドがtrueを返した場合にのみキャレットをペイントします。

        定義:
        isVisible、インタフェースCaret
        戻り値:
        可視の場合はtrue、そうでない場合はfalse
        関連項目:
        Caret.isVisible(), isActive()
      • setVisible

        public void setVisible​(boolean e)
        キャレットの可視性を設定し、キャレットを再ペイントします。 このメソッドと、isVisibleおよびisActiveとの関係を理解することが大切です。 このメソッドをtrueの値で呼び出すと、キャレットの点滅がアクティブになります。 これをfalseに設定すると、キャレットの点滅が完全にオフになります。 点滅がアクティブかどうかを確認するには、isActiveを呼び出す必要があります。 要するに、isActiveはこのメソッドの適切な対応するgetterメソッドです。isVisibleを使用すると、キャレットの現在の可視ステータス、つまりキャレットが現在ペイントされるかどうかを取り出すことができます。 このステータスは、キャレットの点滅のオン/オフに伴って変わります。

        次に、このメソッドを呼び出してあとで、isActiveおよびisVisibleの考えられる戻り値のリストを示します。

        setVisible(true):

        • isActive():true
        • isVisible(): キャレットの点滅がオンまたはオフのどちらになるかによってtrueまたはfalse

        setVisible(false):

        • isActive():false
        • isVisible():false

        定義:
        setVisible、インタフェースCaret
        パラメータ:
        e - 可視性指定子
        関連項目:
        isActive(), Caret.setVisible(boolean)
      • setBlinkRate

        public void setBlinkRate​(int rate)
        キャレットの点滅間隔を設定します。
        定義:
        setBlinkRate、インタフェースCaret
        パラメータ:
        rate - ミリ秒単位の間隔で、0の場合は点滅を停止
        関連項目:
        Caret.setBlinkRate(int)
      • getBlinkRate

        public int getBlinkRate()
        キャレットの点滅間隔を取得します。
        定義:
        getBlinkRate、インタフェースCaret
        戻り値:
        ミリ秒単位の遅延。 キャレットの点滅がない場合は0。
        関連項目:
        Caret.getBlinkRate()
      • getDot

        public int getDot()
        キャレットの現在の位置を取り出します。
        定義:
        getDot、インタフェースCaret
        戻り値:
        位置>= 0
        関連項目:
        Caret.getDot()
      • getMark

        public int getMark()
        マークの現在の位置を取り出します。 選択範囲がある場合、dotとmarkは同じにはなりません。
        定義:
        getMark、インタフェースCaret
        戻り値:
        位置>= 0
        関連項目:
        Caret.getMark()
      • setDot

        public void setDot​(int dot)
        転送バイアスを使って、キャレット位置を設定し、指定された位置をマークします。 選択範囲が、暗黙のうちにゼロに設定されます。
        定義:
        setDot、インタフェースCaret
        パラメータ:
        dot - 位置>= 0
        関連項目:
        setDot(int, Position.Bias), Caret.setDot(int)
      • moveDot

        public void moveDot​(int dot,
                            Position.Bias dotBias)
        指定されたバイアスを使って、キャレット位置を指定された位置に移動します。
        パラメータ:
        dot - 位置>= 0
        dotBias - 位置のバイアス。null以外
        例外:
        IllegalArgumentException - バイアスがnullの場合
        導入されたバージョン:
        1.6
        関連項目:
        Caret.moveDot(int)
      • setDot

        public void setDot​(int dot,
                           Position.Bias dotBias)
        指定されたバイアスを使って、キャレット位置を設定し、指定された位置をマークします。 選択範囲が、暗黙のうちにゼロに設定されます。
        パラメータ:
        dot - 位置>= 0
        dotBias - 位置のバイアス。null以外
        例外:
        IllegalArgumentException - バイアスがnullの場合
        導入されたバージョン:
        1.6
        関連項目:
        Caret.setDot(int)
      • getDotBias

        public Position.Bias getDotBias()
        キャレットの位置のバイアスを返します。
        戻り値:
        キャレットの位置のバイアス
        導入されたバージョン:
        1.6
      • getMarkBias

        public Position.Bias getMarkBias()
        マークのバイアスを返します。
        戻り値:
        マークのバイアス
        導入されたバージョン:
        1.6
      • setMagicCaretPosition

        public void setMagicCaretPosition​(Point p)
        キャレットの現在の位置を保存します。 キャレットが上下に動き、終端位置が均等でない行の間を移動する場合に使用します。
        定義:
        setMagicCaretPosition、インタフェースCaret
        パラメータ:
        p - 位置
        関連項目:
        getMagicCaretPosition()
      • equals

        public boolean equals​(Object obj)
        このオブジェクトを指定されたオブジェクトと比較します。 矩形を比較するというスーパー・クラスの動作は必要ないため、Object動作に変更されます。
        オーバーライド:
        equals、クラスRectangle
        パラメータ:
        obj - このフォントと比較されるオブジェクト
        戻り値:
        オブジェクトが等しい場合はtrue、そうでない場合はfalse
        関連項目:
        Object.hashCode()HashMap