- 所有已实现的接口:
FocusListener,MouseListener,MouseMotionListener,Shape,Serializable,Cloneable,EventListener,Caret
- 已知子类:
BasicTextUI.BasicCaret
此实现需要两个异步通知源。计时器线程异步触发,并导致插入符号简单地重新绘制最近的边界框。插入符号还跟踪文档修改时的变化。通常,由于某些鼠标或键盘事件,这将发生在事件分派线程上。同步和异步文档更新的插入符行为由 UpdatePolicy 属性控制。在任何情况下,新插入位置的重绘都将发生在事件线程上,因为对 modelToView 的调用仅在事件线程上是安全的。
插入符号充当鼠标并关注安装它的文本组件上的监听,并根据这些事件定义插入符号语义。可以重新实现监听方法以更改语义。默认情况下,第一个鼠标按钮将用于设置焦点和插入符号位置。用第一个鼠标按钮拖动鼠标指针将扫出模型中连续的选择。如果关联的文本组件是可编辑的,则插入符号将在获得焦点时变为可见,而在失去焦点时不可见。
绑定到关联文本组件的荧光笔默认用于呈现选择。可以通过提供用于高光的绘制器来定制选择外观。默认情况下,使用一个 painter 来呈现 SelectionColor 属性中关联文本组件中指定的纯色。这可以通过重新实现 getSelectionPainter 方法轻松更改。
可以通过重新实现 paint 方法来实现定制的插入符外观。如果更改了绘制方法,则还应重新实现损坏方法以重新绘制渲染插入符所需的区域。插入符号扩展了 Rectangle 类,该类用于保存插入符号最后呈现位置的边界框。这使插入符号能够在插入符号移动时以线程安全的方式重新绘制,而无需调用模型更新和视图修复之间不稳定的 modelToView(即无法保证交付到 DocumentListeners 的顺序)。
当插入符号位置改变时,魔法插入符号位置设置为空。计时器用于确定新位置(在插入符号更改之后)。当计时器触发时,如果魔法插入符位置仍然为空,它将重置为当前插入符位置。任何更改插入符号位置并希望魔法插入符号位置保持不变的操作,必须记住魔法插入符号位置,更改光标,然后将魔法插入符号位置设置为其原始值。这样做的好处是只有希望魔术插入位置持续存在的操作(例如打开/向下)才需要知道它。
Warning: 此类的序列化对象将与未来的 Swing 版本不兼容。当前的序列化支持适用于运行相同版本 Swing 的应用程序之间的短期存储或 RMI。从 1.4 开始,对所有 JavaBeans 的长期存储的支持已添加到 java.beans 包中。请参阅 XMLEncoder 。
- 参见:
-
内部类总结
在类 java.awt.geom.Rectangle2D 中声明的嵌套类/接口
Rectangle2D.Double, Rectangle2D.Float -
字段摘要
字段修饰符和类型Field描述static final int表示插入符号位置是总是无论文档更新是否在事件调度线程上执行,都会根据文档更改进行相应更新。protected ChangeEvent模型的更改事件。protected EventListenerList事件监听列表。static final int表示无论任何文档更新,插入符号都应保持在文档中相同的绝对位置,除非文档长度因删除而变得小于当前插入符号位置。static final int指示仅当在事件调度线程上执行文档更改时才更新插入符号位置。在类 java.awt.geom.Rectangle2D 中声明的字段
OUT_BOTTOM, OUT_LEFT, OUT_RIGHT, OUT_TOP -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述void添加一个监听以在插入符号位置更改时进行跟踪。protected voidadjustVisibility(Rectangle nloc) 滚动关联的视图(如有必要)以使插入符号可见。protected void损坏插入符周围的区域,使其在新位置重新绘制。void从 JTextComponent 的界面中删除 UI 时调用。boolean将此对象与指定对象进行比较。protected void通知所有已注册对此事件类型的通知感兴趣的监听。void当包含插入符号的组件获得焦点时调用。void当包含插入符号的组件失去焦点时调用。int获取插入符闪烁率。返回在此插入符号上注册的所有更改监听的数组。protected final JTextComponent获取此插入符号绑定到的文本编辑器组件。intgetDot()获取插入符号的当前位置。返回插入符号位置的偏差。<T extends EventListener>
T[]getListeners(Class<T> listenerType) 返回当前在此插入符号上注册为FooListener的所有对象的数组。获取保存的插入符位置。intgetMark()获取标记的当前位置。返回标记的偏差。protected Highlighter.HighlightPainter获取荧光笔的绘制器。int获取有关文档更新的插入符号移动策略。void在将 UI 安装到 JTextComponent 的界面时调用。booleanisActive()确定插入符号当前是否处于活动状态。boolean检查当前选择是否可见。boolean指示插入符当前是否可见。void单击鼠标时调用。void根据鼠标指针的当前位置移动插入符号位置。void当鼠标进入一个区域时调用。void当鼠标离开区域时调用。void移动鼠标时调用。void如果按下按钮 1,则执行此操作以请求关注关联的文本组件,并设置插入符号位置。void释放鼠标时调用。protected void尝试使用 viewToModel() 从鼠标事件的坐标移动插入符号的位置。voidmoveDot(int dot) 将插入符号位置移动到指定位置,并向前偏移。voidmoveDot(int dot, Position.Bias dotBias) 将插入符号位置移动到指定位置,具有指定的偏差。void将插入符号呈现为垂直线。protected void尝试使用 viewToModel() 从鼠标事件的坐标设置插入符号的位置。void删除跟踪插入符位置更改的监听。protected final voidrepaint()使插入符被绘制。voidsetBlinkRate(int rate) 设置插入符闪烁率。voidsetDot(int dot) 将插入符号位置和标记设置到指定位置,并向前偏移。voidsetDot(int dot, Position.Bias dotBias) 将插入符号位置和标记设置为具有指定偏差的指定位置。void保存当前插入符位置。voidsetSelectionVisible(boolean vis) 更改选择可见性。voidsetUpdatePolicy(int policy) 设置文档更新的插入符号移动策略。voidsetVisible(boolean e) 设置插入符号可见性,并重新绘制插入符号。在类 java.awt.Rectangle 中声明的方法
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, toString, translate, union在类 java.awt.geom.Rectangle2D 中声明的方法
add, add, add, contains, contains, getPathIterator, getPathIterator, hashCode, intersect, intersects, intersectsLine, intersectsLine, outcode, setFrame, setRect, union在类 java.awt.geom.RectangularShape 中声明的方法
clone, contains, contains, getCenterX, getCenterY, getFrame, getMaxX, getMaxY, getMinX, getMinY, intersects, setFrame, setFrame, setFrameFromCenter, setFrameFromCenter, setFrameFromDiagonal, setFrameFromDiagonal在接口 java.awt.Shape 中声明的方法
contains, contains, contains, contains, getPathIterator, getPathIterator, intersects, intersects
-
字段详细信息
-
UPDATE_WHEN_ON_EDT
public static final int UPDATE_WHEN_ON_EDT指示仅当在事件调度线程上执行文档更改时才更新插入符号位置。- 自从:
- 1.5
- 参见:
-
NEVER_UPDATE
public static final int NEVER_UPDATE表示无论任何文档更新,插入符号都应保持在文档中相同的绝对位置,除非文档长度因删除而变得小于当前插入符号位置。在这种情况下,插入符位置会调整到文档的末尾。- 自从:
- 1.5
- 参见:
-
ALWAYS_UPDATE
public static final int ALWAYS_UPDATE表示插入符号位置是总是无论文档更新是否在事件调度线程上执行,都会根据文档更改进行相应更新。- 自从:
- 1.5
- 参见:
-
listenerList
事件监听列表。 -
changeEvent
模型的更改事件。每个模型实例只需要一个 ChangeEvent,因为事件的唯一(只读)状态是源属性。这里产生的事件源总是“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
public int getUpdatePolicy()获取有关文档更新的插入符号移动策略。- 返回:
-
以下值之一:
UPDATE_WHEN_ON_EDT、NEVER_UPDATE、ALWAYS_UPDATE - 自从:
- 1.5
- 参见:
-
getComponent
获取此插入符号绑定到的文本编辑器组件。- 返回:
- 组件
-
repaint
protected final void repaint()使插入符被绘制。重绘区域是插入符号的边界框(即插入符号矩形或 this )。此方法是线程安全的,尽管大多数 Swing 方法不是。请参阅 Swing 中的并发 了解更多信息。
-
damage
损坏插入符周围的区域,使其在新位置重新绘制。如果 paint() 被重新实现,这个方法也应该被重新实现。此方法应更新插入符边界(x、y、宽度和高度)。- 参数:
r- 插入符号的当前位置- 参见:
-
adjustVisibility
滚动关联的视图(如有必要)以使插入符号可见。由于应该如何完成这在某种程度上是一种策略,因此可以重新实现此方法以更改行为。默认情况下,在关联组件上调用 scrollRectToVisible 方法。- 参数:
nloc- 滚动到的新位置
-
getSelectionPainter
获取荧光笔的绘制器。- 返回:
- 绘制器
-
positionCaret
尝试使用 viewToModel() 从鼠标事件的坐标设置插入符号的位置。- 参数:
e- 鼠标事件
-
moveCaret
尝试使用 viewToModel() 从鼠标事件的坐标移动插入符号的位置。如果点和标记不同,这将导致选择。- 参数:
e- 鼠标事件
-
focusGained
当包含插入符号的组件获得焦点时调用。这是为了在组件可编辑时将插入符号设置为可见。- 指定者:
focusGained在接口FocusListener中- 参数:
e- 焦点事件- 参见:
-
focusLost
当包含插入符号的组件失去焦点时调用。这是为了将插入符号的可见性设置为 false。- 指定者:
focusLost在接口FocusListener中- 参数:
e- 焦点事件- 参见:
-
mouseClicked
单击鼠标时调用。如果单击是从 button1 生成的,则双击选择一个词,然后三次单击当前行。- 指定者:
mouseClicked在接口MouseListener中- 参数:
e- 鼠标事件- 参见:
-
mousePressed
如果按下按钮 1,则执行此操作以请求关注关联的文本组件,并设置插入符号位置。如果按住 shift 键,插入符号将被移动,可能导致选择,否则插入符号位置将设置为新位置。如果组件未启用,则不会请求焦点。- 指定者:
mousePressed在接口MouseListener中- 参数:
e- 鼠标事件- 参见:
-
mouseReleased
释放鼠标时调用。- 指定者:
mouseReleased在接口MouseListener中- 参数:
e- 鼠标事件- 参见:
-
mouseEntered
当鼠标进入一个区域时调用。- 指定者:
mouseEntered在接口MouseListener中- 参数:
e- 鼠标事件- 参见:
-
mouseExited
当鼠标离开区域时调用。- 指定者:
mouseExited在接口MouseListener中- 参数:
e- 鼠标事件- 参见:
-
mouseDragged
根据鼠标指针的当前位置移动插入符号位置。这有效地扩展了选择范围。默认情况下,这仅适用于鼠标按钮 1。- 指定者:
mouseDragged在接口MouseMotionListener中- 参数:
e- 鼠标事件- 参见:
-
mouseMoved
移动鼠标时调用。- 指定者:
mouseMoved在接口MouseMotionListener中- 参数:
e- 鼠标事件- 参见:
-
paint
将插入符号呈现为垂直线。如果重新实现,损坏方法也应该重新实现,因为它假设插入符号的形状是一条垂直线。将插入符颜色设置为 getCaretColor() 返回的值。如果关联文档中存在多个文本方向,将呈现一个指示插入符号偏差的标志。仅当关联文档是 AbstractDocument 的子类并且在 bidi 元素结构中存在多个 bidi 级别(即文本具有与其关联的多个方向)时才会发生这种情况。
-
install
在将 UI 安装到 JTextComponent 的界面时调用。这可用于访问通过此接口的实现正在导航的模型。将点和标记设置为 0,并建立文档、属性更改、焦点、鼠标和鼠标移动监听。 -
deinstall
从 JTextComponent 的界面中删除 UI 时调用。这用于注销任何附加的监听。 -
addChangeListener
添加一个监听以在插入符号位置更改时进行跟踪。- 指定者:
addChangeListener在接口Caret中- 参数:
l- 听众- 参见:
-
removeChangeListener
删除跟踪插入符位置更改的监听。- 指定者:
removeChangeListener在接口Caret中- 参数:
l- 听众- 参见:
-
getChangeListeners
返回在此插入符号上注册的所有更改监听的数组。- 返回:
-
所有这个插入符号的
ChangeListeners 或一个空数组,如果当前没有注册任何更改监听器 - 自从:
- 1.4
- 参见:
-
fireStateChanged
protected void fireStateChanged()通知所有已注册对此事件类型的通知感兴趣的监听。事件实例是使用传递给 fire 方法的参数延迟创建的。监听列表从最后到最先处理。- 参见:
-
getListeners
返回当前在此插入符号上注册为FooListener的所有对象的数组。FooListener是使用addFooListener方法注册的。您可以使用类文字指定
listenerType参数,例如FooListener.class。例如,您可以使用以下代码查询DefaultCaretc的更改监听器:ChangeListener[] cls = (ChangeListener[])(c.getListeners(ChangeListener.class));
如果不存在这样的监听器,则此方法返回一个空数组。- 类型参数:
T- 监听器类型- 参数:
listenerType- 请求的监听器类型- 返回:
-
在此组件上注册为
FooListener的所有对象的数组,如果没有添加此类监听器,则为空数组 - 抛出:
ClassCastException- 如果listenerType没有指定实现java.util.EventListener的类或接口- 自从:
- 1.3
- 参见:
-
setSelectionVisible
public void setSelectionVisible(boolean vis) 更改选择可见性。- 指定者:
setSelectionVisible在接口Caret中- 参数:
vis- 新的可见性
-
isSelectionVisible
public boolean isSelectionVisible()检查当前选择是否可见。- 指定者:
isSelectionVisible在接口Caret中- 返回:
- 如果选择可见,则为真
-
isActive
public boolean isActive()确定插入符号当前是否处于活动状态。此方法返回
Caret当前是否处于闪烁状态。它不提供关于它当前是闪烁还是关闭的信息。要确定插入符当前是否已绘制,请使用isVisible方法。- 返回:
true如果激活 elsefalse- 自从:
- 1.5
- 参见:
-
isVisible
public boolean isVisible()指示插入符当前是否可见。当插入符号闪烁时,返回值将在插入符号被绘制时为 true 和插入符号未被绘制时为 false 之间变化。isActive指示插入符号是否处于闪烁状态,这样它能可见,isVisible表示插入符是否是实际上可见。希望呈现不同闪烁插入符的子类应该重写 paint 并且仅当此方法返回 true 时才绘制插入符。
-
setVisible
public void setVisible(boolean e) 设置插入符号可见性,并重新绘制插入符号。了解此方法、isVisible和isActive之间的关系很重要。使用值true调用此方法会激活插入符号闪烁。将其设置为false可将其完全关闭。要确定闪烁是否处于活动状态,您应该调用isActive。实际上,isActive是一个合适的对应“getter”方法。isVisible可用于获取插入符号的当前可见性状态,即当前是否已绘制。此状态将随着插入符号的闪烁而改变。下面的列表显示了调用此方法后
isActive和isVisible的潜在返回值:setVisible(true):- isActive(): 真
- isVisible():true 或 false 取决于插入符是否闪烁
setVisible(false):- isActive(): false
- isVisible(): false
- 指定者:
setVisible在接口Caret中- 参数:
e- 可见性说明符- 参见:
-
setBlinkRate
public void setBlinkRate(int rate) 设置插入符闪烁率。- 指定者:
setBlinkRate在接口Caret中- 参数:
rate- 以毫秒为单位的速率,0 停止闪烁- 参见:
-
getBlinkRate
public int getBlinkRate()获取插入符闪烁率。- 指定者:
getBlinkRate在接口Caret中- 返回:
- 以毫秒为单位的延迟。如果这是零,插入符号将不会闪烁。
- 参见:
-
getDot
public int getDot()获取插入符号的当前位置。 -
getMark
public int getMark()获取标记的当前位置。如果有选择,点和标记将不会相同。 -
setDot
public void setDot(int dot) 将插入符号位置和标记设置到指定位置,并向前偏移。这隐含地将选择范围设置为零。 -
moveDot
public void moveDot(int dot) 将插入符号位置移动到指定位置,并向前偏移。 -
moveDot
将插入符号位置移动到指定位置,具有指定的偏差。- 参数:
dot- 位置 >= 0dotBias- 这个位置的偏差,而不是null- 抛出:
IllegalArgumentException- 如果偏差为null- 自从:
- 1.6
- 参见:
-
setDot
将插入符号位置和标记设置为具有指定偏差的指定位置。这隐含地将选择范围设置为零。- 参数:
dot- 位置 >= 0dotBias- 这个位置的偏差,而不是null- 抛出:
IllegalArgumentException- 如果偏差为null- 自从:
- 1.6
- 参见:
-
getDotBias
返回插入符号位置的偏差。- 返回:
- 插入符号位置的偏差
- 自从:
- 1.6
-
getMarkBias
返回标记的偏差。- 返回:
- 商标的偏见
- 自从:
- 1.6
-
setMagicCaretPosition
保存当前插入符位置。当发生插入符号向上/向下动作时使用它,在具有不均匀结束位置的行之间移动。- 指定者:
setMagicCaretPosition在接口Caret中- 参数:
p- 位置- 参见:
-
getMagicCaretPosition
获取保存的插入符位置。- 指定者:
getMagicCaretPosition在接口Caret中- 返回:
- 位置见#setMagicCaretPosition
- 参见:
-
equals
将此对象与指定对象进行比较。不需要比较矩形的超类行为,因此将其更改为对象行为。
-