|
JavaTM 2 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 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。