|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.awt.geom.RectangularShape java.awt.geom.Rectangle2D java.awt.Rectangle javax.swing.text.DefaultCaret
public class DefaultCaret
插入符的默认实现。插入符以垂直线形式呈现,颜色由相关的 JTextComponent 的 CaretColor 属性指定。它可以按 BlinkRate 属性中指定的速率闪烁。
此实现需要两个异步通知源。计时器线程为异步触发,这使得插入符只需重绘最新的边界框。当修改文档时,插入符还跟踪更改。通常这发生在某些鼠标或键盘事件引起的事件调度线程中。同步和异步文档更新中的插入符的行为是由 UpdatePolicy
属性控制的。重绘新插入符位置在任何情况下都发生在事件线程上,因为只有在事件线程上对 modelToView
的调用才是安全的。
插入符充当它所安装到的文本组件上的鼠标和焦点侦听器,并根据这些事件定义插入符的语义。侦听器方法可重新实现以更改其语义。默认情况下,第一个鼠标按钮将用于设置焦点和插入符位置。用第一个鼠标按钮拖动鼠标指针将在模型中划出一个连续选定。如果关联的文本组件为可编辑的,此插入符在获得焦点时将为可见,在失去焦点时为不可见。
关联的文本组件的 Highlighter 边界默认用于呈现选定。通过提供高亮显示所用的 painter,可定制选定的外观。默认情况下,painter 用于需要用关联文本组件的 SelectionColor
属性中指定的纯色呈现的情况。通过重新实现 getSelectionHighlighter 方法,可以很容易地更改此方法。
通过重新实现该 paint 方法,可获得定制的插入符外观。如果 paint 方法已更改,damage 方法也应重新实现,这样可重新绘制需要的区域以便呈现插入符。插入符扩展了 Rectangle 类,它用于保持记录上次呈现插入符的位置的边界框。这有助于插入符以线程安全的方式重绘,因为在模型更新和视图修复期间移动插入符而不调用 modelToView 是不稳定的(即无法保证传递到 DocumentListeners 的顺序)。
当插入符位置改变时,此变幻的插入符位置将设置为 null。使用计时器确定新的位置(在插入符改变后)。计时器触发后,如果变幻的插入符位置仍为 null,它将重置为当前的插入符位置。任何更改插入符位置和希望变幻的插入符位置保持不变的操作都必须记住变幻的插入符位置和更改光标,然后将变幻的插入符位置设置为原始值。这样做的好处是,只有希望变幻的插入符位置保持不变的操作(例如打开/向下)需要知道它的值。
警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans
包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder
。
Caret
嵌套类摘要 |
---|
从类 java.awt.geom.Rectangle2D 继承的嵌套类/接口 |
---|
Rectangle2D.Double, Rectangle2D.Float |
字段摘要 | |
---|---|
static int |
ALWAYS_UPDATE
指示无论文档更新是否是在事件调度线程中执行,始终根据文档更改更新插入符位置。 |
protected ChangeEvent |
changeEvent
此模型的更改事件。 |
protected EventListenerList |
listenerList
事件侦听器列表。 |
static int |
NEVER_UPDATE
指示无论文档有任何更新,插入符都应在文档中保持同一绝对位置,由于删除使文档长度小于当前插入符位置除外。 |
static int |
UPDATE_WHEN_ON_EDT
指示只有在事件调度线程中执行文档更改时,才更新插入符位置。 |
从类 java.awt.Rectangle 继承的字段 |
---|
height, width, x, y |
从类 java.awt.geom.Rectangle2D 继承的字段 |
---|
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()
返回插入符位置的偏差。 |
|
|
getListeners(Class<T> listenerType)
返回目前已在此插入符上注册为 FooListener 的所有对象组成的数组。 |
|
Point |
getMagicCaretPosition()
获取保存的插入符位置。 |
|
int |
getMark()
获取标记的当前位置。 |
|
Position.Bias |
getMarkBias()
返回标记的偏差。 |
|
protected Highlighter.HighlightPainter |
getSelectionPainter()
获取此 Highlighter 的 painter。 |
|
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)
如果按下 button 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 。 |
从类 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, 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.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
从接口 java.awt.Shape 继承的方法 |
---|
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 DefaultCaret()
方法详细信息 |
---|
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)
FocusListener
中的 focusGained
e
- 鼠标事件FocusListener.focusGained(java.awt.event.FocusEvent)
public void focusLost(FocusEvent e)
FocusListener
中的 focusLost
e
- 鼠标事件FocusListener.focusLost(java.awt.event.FocusEvent)
public void mouseClicked(MouseEvent e)
MouseListener
中的 mouseClicked
e
- 鼠标事件MouseListener.mouseClicked(java.awt.event.MouseEvent)
public void mousePressed(MouseEvent e)
MouseListener
中的 mousePressed
e
- 鼠标事件MouseListener.mousePressed(java.awt.event.MouseEvent)
public void mouseReleased(MouseEvent e)
MouseListener
中的 mouseReleased
e
- 鼠标事件MouseListener.mouseReleased(java.awt.event.MouseEvent)
public void mouseEntered(MouseEvent e)
MouseListener
中的 mouseEntered
e
- 鼠标事件MouseListener.mouseEntered(java.awt.event.MouseEvent)
public void mouseExited(MouseEvent e)
MouseListener
中的 mouseExited
e
- 鼠标事件MouseListener.mouseExited(java.awt.event.MouseEvent)
public void mouseDragged(MouseEvent e)
MouseMotionListener
中的 mouseDragged
e
- 鼠标事件MouseMotionListener.mouseDragged(java.awt.event.MouseEvent)
public void mouseMoved(MouseEvent e)
MouseMotionListener
中的 mouseMoved
e
- 鼠标事件MouseMotionListener.mouseMoved(java.awt.event.MouseEvent)
public void paint(Graphics g)
如果关联文档中有多个文本方向,将呈现一个指示插入符偏移的标志。只有当关联文档为 AbstractDocument 的子类并且在双向元素结构中有多个双向级别时(即文本关联了多个方向),才会发生这样的情况。
Caret
中的 paint
g
- 图形上下文damage(java.awt.Rectangle)
public void install(JTextComponent c)
Caret
中的 install
c
- 组件Caret.install(javax.swing.text.JTextComponent)
public void deinstall(JTextComponent c)
Caret
中的 deinstall
c
- 组件Caret.deinstall(javax.swing.text.JTextComponent)
public void addChangeListener(ChangeListener l)
Caret
中的 addChangeListener
l
- 侦听器Caret.addChangeListener(javax.swing.event.ChangeListener)
public void removeChangeListener(ChangeListener l)
Caret
中的 removeChangeListener
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
方法注册的。
可以使用 class 字面值来指定 listenerType
参数,如 FooListener.class
。例如,可以使用以下代码查询 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)
Caret
中的 setSelectionVisible
vis
- 新可见性public boolean isSelectionVisible()
Caret
中的 isSelectionVisible
public boolean isActive()
此方法返回 Caret
当前是否处于闪烁状态。它不提供有关当前闪烁为打开或关闭的信息。要确定插入符当前是否绘制,请使用 isVisible
方法。
true
;否则返回 false
isVisible()
public boolean isVisible()
isActive
指示插入符是否处于闪烁状态,它可能为可见,而 isVisible
指示插入符是否确实为可见。
希望呈现不同的闪烁插入符的子类应重写 paint,并只在此方法返回 true 时才绘制插入符。
Caret
中的 isVisible
Caret.isVisible()
,
isActive()
public void setVisible(boolean e)
isVisible
以及 isActive
三者之间的关系非常重要。使用 true
值调用此方法可激活插入符闪烁。将它设置为 false
可彻底关闭闪烁。要确定闪烁是否激活,应调用 isActive
。从实际效果来看,isActive
相当于它的 "getter" 方法,isVisible
可用于获取插入符的当前可见状态,即当前是否绘制的状态。此状态将随插入符的闪烁打开和关闭而更改。
下面的列表显示了调用此方法后 isActive
和 isVisible
可能的返回值:
setVisible(true)
:
setVisible(false)
:
Caret
中的 setVisible
e
- 可见性指示符isActive()
,
Caret.setVisible(boolean)
public void setBlinkRate(int rate)
Caret
中的 setBlinkRate
rate
- 闪烁率,以毫秒为单位,0 为停止闪烁Caret.setBlinkRate(int)
public int getBlinkRate()
Caret
中的 getBlinkRate
Caret.getBlinkRate()
public int getDot()
Caret
中的 getDot
Caret.getDot()
public int getMark()
Caret
中的 getMark
Caret.getMark()
public void setDot(int dot)
Caret
中的 setDot
dot
- 位置,该位置 >= 0setDot(int, Position.Bias)
,
Caret.setDot(int)
public void moveDot(int dot)
Caret
中的 moveDot
dot
- 位置,该位置 >= 0moveDot(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)
Caret
中的 setMagicCaretPosition
p
- 位置getMagicCaretPosition()
public Point getMagicCaretPosition()
Caret
中的 getMagicCaretPosition
Caret.setMagicCaretPosition(java.awt.Point)
public boolean equals(Object obj)
Rectangle
中的 equals
obj
- 要与此字体比较的对象
true
;否则,返回 false
Object.hashCode()
,
Hashtable
public String toString()
Rectangle
复制的描述Rectangle
及其值的 String
。
Rectangle
中的 toString
Rectangle
对象的坐标和大小值的 String
。
|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。