模块  java.desktop
软件包  javax.swing.text

Class DefaultCaret

  • 实现的所有接口
    FocusListenerMouseListenerMouseMotionListenerShapeSerializableCloneableEventListenerCaret
    已知直接子类:
    BasicTextUI.BasicCaret

    public class DefaultCaret
    extends Rectangle
    implements Caret, FocusListener, MouseListener, MouseMotionListener
    Caret的默认实现。 插入符呈现为由关联的JTextComponent的CaretColor属性指定的颜色的垂直线。 它可以以BlinkRate属性指定的速率闪烁。

    此实现需要两个异步通知源。 计时器线程异步触发,并使插入符只是重新绘制最新的边界框。 插入符号还会在文档被修改时跟踪更改。 通常,这将发生在事件调度线程上,因为某些鼠标或键盘事件。 同步和异步文档更新上的插入符行为由UpdatePolicy属性控制。 在任何情况下,新插入符号位置的重绘都将出现在事件线程上,因为对事件线程的调用modelToView是安全的modelToView

    插入符号作为鼠标并在其安装的文本组件上聚焦侦听器,并根据这些事件定义插入符号语义。 可以重新实现侦听器方法以更改语义。 默认情况下,第一个鼠标按钮将用于设置焦点和插入位置。 使用第一个鼠标按钮拖动鼠标指针将清除模型中连续的选择。 如果关联的文本组件是可编辑的,则在获得焦点时,插入符将变为可见,而在焦点丢失时,该插入符将不可见。

    绑定到关联文本组件的突出显示器用于默认呈现选择。 可以通过提供用于高光的画家来定制选择外观。 默认情况下,使用画笔将呈现SelectionColor属性中关联文本组件中指定的SelectionColor 通过重新实现getSelectionPainter方法可以轻松更改此设置

    通过重新实施涂料方法可以实现定制的插入符外观。 如果更改了绘制方法,则还应重新实现损坏方法,以便重新绘制渲染插入符号所需的区域。 插入符扩展了Rectangle类,该类用于保存最后呈现插入符号的位置的边界框。 这使插入符号能够在插入符号移动时以线程安全的方式重新绘制,而不会调用模型更新和视图修复之间不稳定的modelToView(即无法保证传递给DocumentListeners的顺序)。

    当插入符位置改变时,魔术插入位置被设置为空。 计时器用于确定新位置(插入符号更改后)。 当计时器触发时,如果魔术插入位置仍为空,则将其重置为当前插入位置。 任何改变插入位置并希望魔术插入位置保持不变的动作必须记住魔术插入位置,更改光标,然后将魔术插入位置设置为其原始值。 这样做的好处是,只有想要魔术插入位置持续存在的动作(例如打开/关闭)才需要了解它。

    警告:此类的序列化对象与以后的Swing版本不兼容。 当前的序列化支持适用于运行相同版本Swing的应用程序之间的短期存储或RMI。 从1.4开始, java.beans软件包中添加了对所有JavaBeans java.beans长期存储的支持。 请参阅XMLEncoder

    另请参见:
    CaretSerialized Form
    • 字段详细信息

      • 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()常数字段值
      • changeEvent

        protected transient ChangeEvent changeEvent
        模型的更改事件。 每个模型实例只需要一个ChangeEvent,因为事件的唯一(只读)状态是source属性。 这里生成的事件源始终是“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_EDTNEVER_UPDATEALWAYS_UPDATE
        异常
        IllegalArgumentException - 如果传递了无效值
        从以下版本开始:
        1.5
        另请参见:
        getUpdatePolicy()adjustVisibility(java.awt.Rectangle)UPDATE_WHEN_ON_EDTNEVER_UPDATEALWAYS_UPDATE
      • getComponent

        protected final JTextComponent getComponent()
        获取此插入符绑定的文本编辑器组件。
        结果
        组件
      • repaint

        protected final void repaint()
        导致插入符号。 重绘区域是插入符号的边界框(即插入符矩形或 )。

        虽然大多数Swing方法都不是,但这种方法是线程安全的。 有关更多信息,请参阅Concurrency in Swing

      • damage

        protected void damage​(Rectangle r)
        损坏插入符号周围的区域,使其在新位置重新绘制。 如果重新实现paint(),则还应重新实现此方法。 此方法应更新插入符号边界(x,y,width和height)。
        参数
        r - 插入符号的当前位置
        另请参见:
        paint(java.awt.Graphics)
      • adjustVisibility

        protected void adjustVisibility​(Rectangle nloc)
        滚动关联的视图(如有必要)以使插入符号可见。 由于这应该如何完成某种策略,因此可以重新实现此方法以更改行为。 默认情况下,在关联的组件上调用scrollRectToVisible方法。
        参数
        nloc - 要滚动到的新位置
      • positionCaret

        protected void positionCaret​(MouseEvent e)
        尝试使用viewToModel()从鼠标事件的坐标设置插入符的位置。
        参数
        e - 鼠标事件
      • moveCaret

        protected void moveCaret​(MouseEvent e)
        尝试使用viewToModel()从鼠标事件的坐标移动插入符的位置。 如果点和标记不同,这将导致选择。
        参数
        e - 鼠标事件
      • mousePressed

        public void mousePressed​(MouseEvent e)
        如果按下按钮1,则执行此操作以请求关注相关文本组件,并设置插入符号位置。 如果按住shift键,将移动插入符号,可能导致选择,否则插入符号位置将设置为新位置。 如果未启用该组件,则不会有焦点请求。
        Specified by:
        mousePressed在界面 MouseListener
        参数
        e - 鼠标事件
        另请参见:
        MouseListener.mousePressed(java.awt.event.MouseEvent)
      • paint

        public void paint​(Graphics g)
        将插入符呈现为垂直线。 如果重新实现,则损伤方法也应重新实现,因为它假设插入符的形状是垂直线。 将插入符颜色设置为getCaretColor()返回的值。

        如果相关文档中存在多个文本方向,则将呈现指示插入符号偏差的标记。 仅当关联文档是AbstractDocument的子类并且bidi元素结构中存在多个bidi级别(即文本具有与其关联的多个方向)时,才会发生这种情况。

        Specified by:
        paint在界面 Caret
        参数
        g - 图形上下文
        另请参见:
        damage(java.awt.Rectangle)
      • install

        public void install​(JTextComponent c)
        在将UI安装到JTextComponent的接口时调用。 这可用于访问通过此接口的实现导航的模型。 将点和标记设置为0,并建立文档,属性更改,焦点,鼠标和鼠标移动侦听器。
        Specified by:
        install在界面 Caret
        参数
        c - 该组件
        另请参见:
        Caret.install(javax.swing.text.JTextComponent)
      • fireStateChanged

        protected void fireStateChanged()
        通知所有已注册对此事件类型的通知感兴趣的听众。 使用传递给fire方法的参数延迟创建事件实例。 侦听器列表从最后到第一个处理。
        另请参见:
        EventListenerList
      • getListeners

        public <T extends EventListener> T[] getListeners​(<T> listenerType)
        返回当前在此插入符号上注册为FooListener的所有对象的数组。 FooListener s使用addFooListener方法注册。

        您可以使用类文字指定listenerType参数,例如FooListener.class 例如,您可以使用以下代码查询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)
        更改选择可见性。
        Specified by:
        setSelectionVisible在界面 Caret
        参数
        vis - 新的可见性
      • isSelectionVisible

        public boolean isSelectionVisible()
        检查当前选择是否可见。
        Specified by:
        isSelectionVisible在界面 Caret
        结果
        如果选择可见,则为true
      • isActive

        public boolean isActive()
        确定插入符号当前是否处于活动状态。

        此方法返回Caret当前是否处于闪烁状态。 它不提供有关当前是否闪烁的信息。 要确定当前是否绘制了插入符,请使用isVisible方法。

        结果
        true如果有效,请 false
        从以下版本开始:
        1.5
        另请参见:
        isVisible()
      • isVisible

        public boolean isVisible()
        指示插入符号当前是否可见。 当插入符号闪烁时,返回值将在true之间,当插入符号被绘制时变为false,而在插入符号时不会被绘制。 isActive指示插入符是否处于闪烁状态,以使得它可以是可见的,并且isVisible指示插入符是否实际可见。

        希望渲染不同闪烁插入符的子类应覆盖绘制,并且只有在此方法返回true时才绘制插入符。

        Specified by:
        isVisible在界面 Caret
        结果
        如果可见则为true,则为true
        另请参见:
        Caret.isVisible()isActive()
      • setVisible

        public void setVisible​(boolean e)
        设置插入符可见性,并重新绘制插入符号。 了解此方法, isVisibleisActive之间的关系非常重要。 使用值true调用此方法可激活插入符号闪烁。 将其设置为false将其完全关闭。 要确定闪烁是否处于活动状态,请致电isActive 实际上, isActive对于这个是适当的相应“getter”方法。 isVisible可用于获取插入符的当前可见性状态,表示它是否当前已绘制。 插入符号闪烁时,此状态将发生变化。

        这是一个列表,显示调用此方法后isActiveisVisible的潜在返回值:

        setVisible(true)

        • isActive():是的
        • isVisible():true或false,具体取决于插入符号是否闪烁

        setVisible(false)

        • isActive():false
        • isVisible():false
        Specified by:
        setVisible在界面 Caret
        参数
        e - 可见性说明符
        另请参见:
        isActive()Caret.setVisible(boolean)
      • setBlinkRate

        public void setBlinkRate​(int rate)
        设置插入符闪烁率。
        Specified by:
        setBlinkRate在界面 Caret
        参数
        rate - 以毫秒为单位的速率,0表示停止闪烁
        另请参见:
        Caret.setBlinkRate(int)
      • getBlinkRate

        public int getBlinkRate()
        获取插入符号闪烁率。
        Specified by:
        getBlinkRate在界面 Caret
        结果
        延迟以毫秒为单位。 如果为零,则插入符号不会闪烁。
        另请参见:
        Caret.getBlinkRate()
      • getDot

        public int getDot()
        获取插入符号的当前位置。
        Specified by:
        getDot在界面 Caret
        结果
        位置> = 0
        另请参见:
        Caret.getDot()
      • getMark

        public int getMark()
        获取标记的当前位置。 如果有选择,则点和标记将不相同。
        Specified by:
        getMark在界面 Caret
        结果
        位置> = 0
        另请参见:
        Caret.getMark()
      • setDot

        public void setDot​(int dot)
        设置插入符号位置并使用正向偏移标记到指定位置。 这隐式地将选择范围设置为零。
        Specified by:
        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 - 此 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)
        保存当前的插入位置。 当插入符号向上/向下动作发生时,在具有不均匀结束位置的行之间移动时使用此选项。
        Specified by:
        setMagicCaretPosition在界面 Caret
        参数
        p - 职位
        另请参见:
        getMagicCaretPosition()
      • equals

        public boolean equals​(Object obj)
        将此对象与指定的对象进行比较。 不需要比较矩形的超类行为,因此将其更改为Object行为。
        重写:
        equals在课堂上 Rectangle
        参数
        obj - 要与此字体进行比较的对象
        结果
        true如果对象相等; 否则为false
        另请参见:
        Object.hashCode()HashMap