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以降、すべてのJavaBeans(tm)用の長期間の格納サポートが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メソッドは違います。詳細は、Swingでの並行性に関連しているサイトを参照してください。
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
はこのメソッドの適切な対応するgetterメソッドです。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, 2014, Oracle and/or its affiliates. All rights reserved.