public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener
この実装は、非同期通知のソースが 2 つあることを前提とします。タイマースレッドは非同期にトリガーされ、これにより、キャレットは最新のバウンディングボックスにペイントし直されます。また、キャレットはドキュメントが更新されるたびに変更を追跡します。通常、ドキュメントの更新は、マウスイベントまたはキーボードイベントによるイベントディスパッチスレッドにおいて発生します。キャレットの動作は、ドキュメントの同期的な更新でも非同期的な更新でも、UpdatePolicy
プロパティーによって制御されます。新しいキャレット位置の再ペイントは、必ずイベントスレッドに上で発生します。これは、modelToView
の呼び出しがイベントスレッド上でのみ安全だからです。
キャレットは、インストール先のテキストコンポーネントでマウスおよびフォーカスリスナーとして振る舞い、キャレットのセマンティクスをそうしたイベントに基づいて定義します。セマンティクスを変更するには、リスナーのメソッドを実装し直します。デフォルトでは、マウスの第 1 ボタンを使ってフォーカスとキャレット位置を設定します。第 1 ボタンを使ってマウスポインタをドラッグすると、モデル内の隣接する選択部分を広げることができます。関連するテキストコンポーネントが編集可能な場合は、キャレットはフォーカスを得たときに可視になり、フォーカスを失ったときに不可視になります。
関連するテキストへの Highlighter 境界は、デフォルトでは選択部分を描画するために使用されます。選択部分の表示は、ハイライトに使用するペインタを提供することでカスタマイズできます。デフォルトでは、関連するテキストコンポーネントの SelectionColor
プロパティーで指定されたソリッド色で描画されます。これは、getSelectionPainter
メソッドを実装し直すことで簡単に変更できます。
キャレットの外観は、paint メソッドを実装し直すことでカスタマイズできます。paint メソッドを変更する場合には、damage メソッドも実装し直して、キャレットの描画に使われる領域を描画し直してください。キャレットは、Rectangle クラスを拡張しているため、キャレットが最後に描画されたバウンディングボックスを保持しています。これによって、キャレットが移動したときに、モデルの更新とビューの修復の間で動作が不安定な modelToView メソッドを呼び出すことなく、スレッドに対して安全な方法で描画し直すことができます (modelToView メソッドでは、DocumentListener への配信の順序が保証されない)。
キャレット位置が変更されるとき、マジックキャレットの位置は null に設定されています。タイマーを使って、キャレット変更後の新しい位置を指定します。タイマーがトリガーすると、マジックキャレットの位置がまだ null の場合、現在のキャレット位置にリセットされます。キャレット位置を変更し、マジックキャレットの位置をそのままにしておくアクションの場合はすべて、マジックキャレットの位置を覚え、カーソルを変更してから、マジックキャレットの位置をその元の位置に設定します。このメソッドには、マジックキャレットの位置を持続させる (オープンまたはダウンさせるなど) アクションだけがそれを知っていればよいという利点があります。
警告: このクラスの直列化されたオブジェクトは、今後の Swing リリースとの互換性がなくなる予定です。現在の直列化のサポートは、短期間の格納や、同じバージョンの Swing を実行するアプリケーション間の RMI に適しています。1.4 以降、すべての JavaBeansTM 用の長期間の格納サポートが java.beans
パッケージに追加されています。XMLEncoder
を参照してください。
Caret
Rectangle2D.Double, Rectangle2D.Float
修飾子と型 | フィールドと説明 |
---|---|
static int |
ALWAYS_UPDATE
ドキュメントの更新がイベントディスパッチスレッドで行われるかどうかに関係なく、ドキュメントの変更に従ってキャレット位置が必ず更新されることを示します。
|
protected ChangeEvent |
changeEvent
モデルの変更を示すイベントです。
|
protected EventListenerList |
listenerList
イベントリスナーのリストです。
|
static int |
NEVER_UPDATE
削除のせいでドキュメントの長さが現在のキャレット位置よりも短くなる場合を除き、ドキュメントの更新に関係なく、ドキュメント内のキャレットの絶対位置が変わらないことを示します。
|
static int |
UPDATE_WHEN_ON_EDT
イベントディスパッチスレッドでドキュメントの変更が行われる場合にのみキャレット位置が更新されることを示します。
|
OUT_BOTTOM, OUT_LEFT, OUT_RIGHT, OUT_TOP
コンストラクタと説明 |
---|
DefaultCaret()
デフォルトのキャレットを構築します。
|
修飾子と型 | メソッドと説明 |
---|---|
void |
addChangeListener(ChangeListener l)
キャレットの移動を常に追跡するために、リスナーを追加します。
|
protected void |
adjustVisibility(Rectangle nloc)
必要に応じて、関連するビューをスクロールして、キャレットを表示します。
|
protected void |
damage(Rectangle r)
キャレットを囲む領域を壊して、新しい位置に再ペイントされるようにします。
|
void |
deinstall(JTextComponent c)
UI が JTextComponent のインタフェースから削除されたときに呼び出されます。
|
boolean |
equals(Object obj)
このオブジェクトを指定されたオブジェクトと比較します。
|
protected void |
fireStateChanged()
このイベントタイプの通知対象として登録されているすべてのリスナーに通知します。
|
void |
focusGained(FocusEvent e)
キャレットを含むコンポーネントがフォーカスを取得したときに呼び出されます。
|
void |
focusLost(FocusEvent e)
キャレットを含むコンポーネントがフォーカスを失ったときに呼び出されます。
|
int |
getBlinkRate()
キャレットの点滅間隔を取得します。
|
ChangeListener[] |
getChangeListeners()
このキャレットに登録された、すべての変更リスナーからなる配列を返します。
|
protected JTextComponent |
getComponent()
このキャレットを使用するテキストエディタコンポーネントを返します。
|
int |
getDot()
キャレットの現在の位置を取り出します。
|
Position.Bias |
getDotBias()
キャレットの位置のバイアスを返します。
|
<T extends EventListener> |
getListeners(Class<T> listenerType)
このキャレットに
FooListener として現在登録されているすべてのオブジェクトの配列を返します。 |
Point |
getMagicCaretPosition()
保存されているキャレットの位置を取得します。
|
int |
getMark()
マークの現在の位置を取り出します。
|
Position.Bias |
getMarkBias()
マークのバイアスを返します。
|
protected Highlighter.HighlightPainter |
getSelectionPainter()
ハイライタのペインタを取得します。
|
int |
getUpdatePolicy()
ドキュメントの更新に対するキャレット移動ポリシーを取得します。
|
void |
install(JTextComponent c)
JTextComponent のインタフェースに UI がインストールされるときに呼び出されます。
|
boolean |
isActive()
キャレットが現在アクティブであるかどうかを判定します。
|
boolean |
isSelectionVisible()
現在の選択範囲が可視であるかどうかを判定します。
|
boolean |
isVisible()
キャレットが現在可視状態であるかどうかを示します。
|
void |
mouseClicked(MouseEvent e)
マウスがクリックされたときに呼び出されます。
|
void |
mouseDragged(MouseEvent e)
マウスポインタの現在位置に従って、キャレットを移動します。
|
void |
mouseEntered(MouseEvent e)
マウスが領域に入ったときに呼び出されます。
|
void |
mouseExited(MouseEvent e)
マウスが領域から出たときに呼び出されます。
|
void |
mouseMoved(MouseEvent e)
マウスが移動したときに呼び出されます。
|
void |
mousePressed(MouseEvent e)
ボタン 1 がクリックされた場合に、関連するテキストコンポーネントへのフォーカスを要求し、キャレットの位置を設定するために実装されます。
|
void |
mouseReleased(MouseEvent e)
マウスボタンを離したときに呼び出されます。
|
protected void |
moveCaret(MouseEvent e)
viewToModel() を使用して、マウスイベントの座標からキャレットの移動を試みます。
|
void |
moveDot(int dot)
転送バイアスを使って、キャレット位置を指定された位置に移動します。
|
void |
moveDot(int dot, Position.Bias dotBias)
指定されたバイアスを使って、キャレット位置を指定された位置に移動します。
|
void |
paint(Graphics g)
キャレットを垂直線としてレンダリングします。
|
protected void |
positionCaret(MouseEvent e)
viewToModel() を使用して、マウスイベントの座標からキャレットの位置の設定を試みます。
|
void |
removeChangeListener(ChangeListener l)
キャレットの移動を追跡しているリスナーを削除します。
|
protected void |
repaint()
キャレットを描画します。
|
void |
setBlinkRate(int rate)
キャレットの点滅間隔を設定します。
|
void |
setDot(int dot)
転送バイアスを使って、キャレット位置を設定し、指定された位置をマークします。
|
void |
setDot(int dot, Position.Bias dotBias)
指定されたバイアスを使って、キャレット位置を設定し、指定された位置をマークします。
|
void |
setMagicCaretPosition(Point p)
キャレットの現在の位置を保存します。
|
void |
setSelectionVisible(boolean vis)
選択範囲の可視性を変更します。
|
void |
setUpdatePolicy(int policy)
ドキュメントの更新に対するキャレット移動ポリシーを設定します。
|
void |
setVisible(boolean e)
キャレットの可視性を設定し、キャレットを再ペイントします。
|
String |
toString()
この
Rectangle とその値を表す String を返します。 |
add, add, add, contains, contains, contains, contains, createIntersection, createUnion, getBounds, getBounds2D, getHeight, getLocation, getSize, getWidth, getX, getY, grow, inside, intersection, intersects, isEmpty, move, outcode, reshape, resize, setBounds, setBounds, setLocation, setLocation, setRect, setSize, setSize, translate, union
add, add, add, contains, contains, getPathIterator, getPathIterator, hashCode, intersect, intersects, intersectsLine, intersectsLine, outcode, setFrame, setRect, union
clone, contains, contains, getCenterX, getCenterY, getFrame, getMaxX, getMaxY, getMinX, getMinY, intersects, setFrame, setFrame, setFrameFromCenter, setFrameFromCenter, setFrameFromDiagonal, setFrameFromDiagonal
contains, contains, contains, contains, getPathIterator, getPathIterator, intersects, intersects
public static final int UPDATE_WHEN_ON_EDT
setUpdatePolicy(int)
, getUpdatePolicy()
, 定数フィールド値public static final int NEVER_UPDATE
setUpdatePolicy(int)
, getUpdatePolicy()
, 定数フィールド値public static final int ALWAYS_UPDATE
setUpdatePolicy(int)
, getUpdatePolicy()
, 定数フィールド値protected EventListenerList listenerList
protected transient ChangeEvent changeEvent
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
- 渡された値が無効な場合getUpdatePolicy()
, adjustVisibility(java.awt.Rectangle)
, UPDATE_WHEN_ON_EDT
, NEVER_UPDATE
, ALWAYS_UPDATE
public int getUpdatePolicy()
UPDATE_WHEN_ON_EDT
, NEVER_UPDATE
, ALWAYS_UPDATE
setUpdatePolicy(int)
, UPDATE_WHEN_ON_EDT
, NEVER_UPDATE
, ALWAYS_UPDATE
protected final JTextComponent getComponent()
protected final void repaint()
このメソッドはスレッドセーフですが、ほとんどの Swing メソッドは違います。詳細は、「How to Use Threads」を参照してください。
protected void damage(Rectangle r)
r
- キャレットの現在の位置paint(java.awt.Graphics)
protected void adjustVisibility(Rectangle nloc)
nloc
- スクロール先の新しい位置protected Highlighter.HighlightPainter getSelectionPainter()
protected void positionCaret(MouseEvent e)
e
- マウスイベントprotected void moveCaret(MouseEvent e)
e
- マウスイベントpublic void focusGained(FocusEvent e)
focusGained
、インタフェース: FocusListener
e
- フォーカスイベントFocusListener.focusGained(java.awt.event.FocusEvent)
public void focusLost(FocusEvent e)
focusLost
、インタフェース: FocusListener
e
- フォーカスイベントFocusListener.focusLost(java.awt.event.FocusEvent)
public void mouseClicked(MouseEvent e)
mouseClicked
、インタフェース: MouseListener
e
- マウスイベントMouseListener.mouseClicked(java.awt.event.MouseEvent)
public void mousePressed(MouseEvent e)
mousePressed
、インタフェース: MouseListener
e
- マウスイベントMouseListener.mousePressed(java.awt.event.MouseEvent)
public void mouseReleased(MouseEvent e)
mouseReleased
、インタフェース: MouseListener
e
- マウスイベントMouseListener.mouseReleased(java.awt.event.MouseEvent)
public void mouseEntered(MouseEvent e)
mouseEntered
、インタフェース: MouseListener
e
- マウスイベントMouseListener.mouseEntered(java.awt.event.MouseEvent)
public void mouseExited(MouseEvent e)
mouseExited
、インタフェース: MouseListener
e
- マウスイベントMouseListener.mouseExited(java.awt.event.MouseEvent)
public void mouseDragged(MouseEvent e)
mouseDragged
、インタフェース: MouseMotionListener
e
- マウスイベントMouseMotionListener.mouseDragged(java.awt.event.MouseEvent)
public void mouseMoved(MouseEvent e)
mouseMoved
、インタフェース: MouseMotionListener
e
- マウスイベントMouseMotionListener.mouseMoved(java.awt.event.MouseEvent)
public void paint(Graphics g)
関連したドキュメントに複数のテキスト方向がある場合は、キャレットのバイアスを示すフラグが描画されます。これは、関連するドキュメントが AbstractDocument のサブクラスであり、かつ、BIDI 要素構造内に複数の BIDI レベルが存在する場合 (すなわち、テキストがテキスト自身に関連した複数の方向を持っている場合) にのみ発生します。
paint
、インタフェース: Caret
g
- グラフィックスコンテキストdamage(java.awt.Rectangle)
public void install(JTextComponent c)
install
、インタフェース: Caret
c
- コンポーネントCaret.install(javax.swing.text.JTextComponent)
public void deinstall(JTextComponent c)
deinstall
、インタフェース: Caret
c
- コンポーネントCaret.deinstall(javax.swing.text.JTextComponent)
public void addChangeListener(ChangeListener l)
addChangeListener
、インタフェース: Caret
l
- リスナーCaret.addChangeListener(javax.swing.event.ChangeListener)
public void removeChangeListener(ChangeListener l)
removeChangeListener
、インタフェース: Caret
l
- リスナーCaret.removeChangeListener(javax.swing.event.ChangeListener)
public ChangeListener[] getChangeListeners()
ChangeListener
。変更リスナーが現在登録されていない場合は空の配列addChangeListener(javax.swing.event.ChangeListener)
, removeChangeListener(javax.swing.event.ChangeListener)
protected void fireStateChanged()
EventListenerList
public <T extends EventListener> T[] getListeners(Class<T> listenerType)
FooListener
として現在登録されているすべてのオブジェクトの配列を返します。FooListener
は、addFooListener
メソッドを使用して登録されます。
FooListener.class
などのクラスリテラルを使用して listenerType
引数を指定できます。たとえば、次のコードを使用すると、DefaultCaret
c
の変更リスナーを照会できます。
ChangeListener[] cls = (ChangeListener[])(c.getListeners(ChangeListener.class));このようなリスナーがない場合は空の配列を返します。
listenerType
- 要求されるリスナーの型。次の下位インタフェースを指定: java.util.EventListener
FooListener
として登録されたすべてのオブジェクトの配列、またはこのようなリスナーが追加されていない場合は空の配列ClassCastException
- listenerType
で、java.util.EventListener
を実装するクラスまたはインタフェースが指定されなかった場合getChangeListeners()
public void setSelectionVisible(boolean vis)
setSelectionVisible
、インタフェース: Caret
vis
- 新しい可視性public boolean isSelectionVisible()
isSelectionVisible
、インタフェース: Caret
public boolean isActive()
このメソッドは、キャレットが現在点滅状態にあるかどうかを返します。キャレットの点滅が現在オンまたはオフのどちらになっているかの情報は返しません。キャレットが現在ペイントされるかどうかを確認するには、isVisible
メソッドを使用してください。
true
(アクティブな場合)。そうでない場合は false
isVisible()
public boolean isVisible()
isActive
は、キャレットが点滅状態にあるかどうかを示します。たとえば、キャレットを可視にできる場合、isVisible
はキャレットが実際に可視状態かどうかを示します。
別の点滅するキャレットを描画する場合は、サブクラスで paint メソッドをオーバーライドし、そのメソッドが true を返した場合にのみキャレットをペイントします。
isVisible
、インタフェース: Caret
Caret.isVisible()
, isActive()
public void setVisible(boolean e)
isVisible
および isActive
との関係を理解することが大切です。このメソッドを true
の値で呼び出すと、キャレットの点滅がアクティブになります。これを false
に設定すると、キャレットの点滅が完全にオフになります。点滅がアクティブかどうかを確認するには、isActive
を呼び出す必要があります。要するに、isActive
はこのメソッドの適切な対応する get メソッドです。isVisible
を使用すると、キャレットの現在の可視性、つまりキャレットが現在ペイントされるかどうかを取り出すことができます。この状態は、キャレットの点滅のオン/オフに伴って変わります。
次に、このメソッドを呼び出してあとで、isActive
および isVisible
の考えられる戻り値のリストを示します。
setVisible(true)
:
setVisible(false)
:
setVisible
、インタフェース: Caret
e
- 可視性指定子isActive()
, Caret.setVisible(boolean)
public void setBlinkRate(int rate)
setBlinkRate
、インタフェース: Caret
rate
- ミリ秒単位の間隔で、0 の場合は点滅を停止Caret.setBlinkRate(int)
public int getBlinkRate()
getBlinkRate
、インタフェース: Caret
Caret.getBlinkRate()
public int getDot()
getDot
、インタフェース: Caret
Caret.getDot()
public int getMark()
getMark
、インタフェース: Caret
Caret.getMark()
public void setDot(int dot)
setDot
、インタフェース: Caret
dot
- 位置 >= 0setDot(int, Position.Bias)
, Caret.setDot(int)
public void moveDot(int dot)
moveDot
、インタフェース: Caret
dot
- 位置 >= 0moveDot(int, javax.swing.text.Position.Bias)
, Caret.moveDot(int)
public void moveDot(int dot, Position.Bias dotBias)
dot
- 位置 >= 0dotBias
- 位置のバイアス。次のもの以外: null
IllegalArgumentException
- バイアスが次の場合: null
Caret.moveDot(int)
public void setDot(int dot, Position.Bias dotBias)
dot
- 位置 >= 0dotBias
- 位置のバイアス。次のもの以外: null
IllegalArgumentException
- バイアスが次の場合: null
Caret.setDot(int)
public Position.Bias getDotBias()
public Position.Bias getMarkBias()
public void setMagicCaretPosition(Point p)
setMagicCaretPosition
、インタフェース: Caret
p
- 位置getMagicCaretPosition()
public Point getMagicCaretPosition()
getMagicCaretPosition
、インタフェース: Caret
Caret.setMagicCaretPosition(java.awt.Point)
public boolean equals(Object obj)
equals
、クラス: Rectangle
obj
- このフォントと比較されるオブジェクトtrue
、そうでない場合は false
Object.hashCode()
, HashMap
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.