public class DefaultCaret extends Rectangle implements Caret, FocusListener, MouseListener, MouseMotionListener
此实现期望异步通知的两个来源。 定时器线程异步触发,并使插入符简单地重新绘制最近的边界框。 插入符号也会跟踪文档的修改。 通常情况下,由于某些鼠标或键盘事件,事件发送线程将发生。 同步和异步文档更新的插入行为由UpdatePolicy
属性控制。 在任何情况下,新插入位置的重新绘制将发生在事件线程上,因为对事件线程的调用modelToView
。
插入符作为鼠标和焦点侦听器在已安装的文本组件上,并根据这些事件定义插入符语义。 可以重新实现侦听器方法来改变语义。 默认情况下,第一个鼠标按钮将用于设置焦点和插入位置。 使用第一个鼠标按钮拖动鼠标指针将扫出模型中连续的选择。 如果相关联的文本组件可编辑,则在获得焦点时插入符将变得可见,并且在焦点丢失时不可见。
与相关联的文本组件绑定的荧光笔用于默认呈现选择。 选择外观可以通过提供一个画家来定制,用于亮点。 默认情况下,将使用一个绘画器,它将呈现SelectionColor
属性中关联的文本组件中指定的SelectionColor
。 这可以通过重新实现getSelectionPainter
方法来轻松改变。
可以通过重新实现涂漆方法来实现定制的插入符号外观。 如果油漆方法发生变化,还应重新实施损坏方法,以便对所需的区域进行重新绘制,以提供插入符号。 插入符号扩展Rectangle类,该类用于保存上一次呈现插入符的位置的边界框。 这使得插入符号在插入符号移动时不会调用modelToView,因此在模型更新和视图修复之间是不稳定的(即不能保证传递给DocumentListeners的顺序),因此可以以线程安全的方式重绘。
当插入位置更改时,魔术插入位置设置为null。 定时器用于确定新位置(插入符号更改后)。 当定时器触发时,如果魔术插入位置仍为空,则它将重置为当前插入符位置。 任何改变插入位置并希望魔术插入位置保持不变的动作必须记住魔术插入位置,更改光标,然后将魔法插入符位置设置为其原始值。 这有一个好处,只有想要魔术插入位置的动作(如开/关)需要知道。
警告:此类的序列化对象与将来的Swing版本不兼容。 当前的序列化支持适用于运行相同版本的Swing的应用程序之间的短期存储或RMI。 从1.4开始,对所有JavaBeans的长期存储的支持已经添加到java.beans
包中。 请参阅XMLEncoder
。
Caret
Rectangle2D.Double, Rectangle2D.Float
Modifier and Type | Field and Description |
---|---|
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
Constructor and Description |
---|
DefaultCaret()
构造默认插入符号。
|
Modifier and Type | Method and Description |
---|---|
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(类<T> listenerType)
返回当前注册为
FooListener 的所有对象的数组。
|
Point |
getMagicCaretPosition()
获取保留的插入符位置。
|
int |
getMark()
获取标记的当前位置。
|
Position.Bias |
getMarkBias()
返回标记的偏差。
|
protected Highlighter.HighlightPainter |
getSelectionPainter()
获得荧光笔的画家。
|
int |
getUpdatePolicy()
获取有关文档更新的插入符号移动策略。
|
void |
install(JTextComponent c)
当UI被安装到JTextComponent的接口时调用。
|
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()
返回一个
String 代表这个
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, 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
finalize, getClass, notify, notifyAll, wait, wait, wait
contains, contains, contains, contains, getPathIterator, getPathIterator, intersects, intersects
public static final int UPDATE_WHEN_ON_EDT
setUpdatePolicy(int)
,
getUpdatePolicy()
,
Constant Field Values
public static final int NEVER_UPDATE
setUpdatePolicy(int)
,
getUpdatePolicy()
,
Constant Field Values
public static final int ALWAYS_UPDATE
setUpdatePolicy(int)
,
getUpdatePolicy()
,
Constant Field Values
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()
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级别(即,文本具有与其相关联的多个方向)时才会发生这种情况。
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(类<T> listenerType)
FooListener
的所有对象的数组。
FooListener
使用addFooListener
。
您可以使用类文字指定listenerType
参数,例如FooListener.class
。 例如,您可以使用以下代码查询DefaultCaret
c
其变更侦听器:
ChangeListener[] cls = (ChangeListener[])(c.getListeners(ChangeListener.class));
如果没有这样的侦听器存在,这个方法返回一个空数组。
listenerType
- 所请求的听众的类型;
此参数应指定从java.util.EventListener
下降的java.util.EventListener
FooListener
的所有对象的数组,如果未添加此类侦听器,则为空数组
ClassCastException
- 如果
listenerType
没有指定实现java.util.EventListener的类或
java.util.EventListener
getChangeListeners()
public void setSelectionVisible(boolean vis)
setSelectionVisible
在界面
Caret
vis
- 新的知名度
public boolean isSelectionVisible()
isSelectionVisible
在界面
Caret
public boolean isActive()
此方法返回是否Caret
当前处于闪烁状态。 它不提供有关当前是否闪烁的信息。 要确定插入符号当前是否使用isVisible
方法。
true
如果活动其他
false
isVisible()
public boolean isVisible()
isActive
指示插入符号是否处于闪烁状态,使得它可以是可见的,并且isVisible
指示插入符是否实际可见。
希望呈现不同闪烁插入符的子类应该覆盖绘画,并且只有在此方法返回true时才绘制插入符。
isVisible
在界面
Caret
Caret.isVisible()
,
isActive()
public void setVisible(boolean e)
isVisible
和isActive
之间的关系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
- 以
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
- 位置> = 0
setDot(int, Position.Bias)
,
Caret.setDot(int)
public void moveDot(int dot)
moveDot
在接口
Caret
dot
- 位置> = 0
moveDot(int, javax.swing.text.Position.Bias)
,
Caret.moveDot(int)
public void moveDot(int dot, Position.Bias dotBias)
dot
- 位置> = 0
dotBias
- 这个职位的偏见,不是
null
IllegalArgumentException
- 如果偏见是
null
Caret.moveDot(int)
public void setDot(int dot, Position.Bias dotBias)
dot
- 位置> = 0
dotBias
- 这个职位的偏见,不是
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