|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object javax.swing.text.View
public abstract class View
View
類別是 text 套件極為重要的一部分。顧名思義,其表示文本模型的一個視圖或者文本模型的一部分。負責文本元件外觀的正是此類別。View 無意成為使用者必須學習的全新內容,相反其更像是一個輕量級元件。
在預設情況下,視圖是很輕量的。它包含一個對父視圖的參考,由此能獲取許多內容而無需保持狀態,它還包含一個對模型 (Element
) 某部分的參考。視圖無需精確地表示模型中的元素,而只是使用一個典型而便利的映射。視圖可以選擇性地維護一對 Position 物件,從而維護其在模型中的位置(即表示一個元素段)。這通常是將視圖拆分為片的格式化的結果。與元素堅固聯繫的便利之處在於使其更容易地建構處理器來產生視圖,還能使其在模型更改時更容易地追蹤視圖片,並且視圖一定會更改視圖來反映該模型。因此,簡單的視圖直接表示一個 Element,而複雜的視圖並不如此。
視圖具有以下責任:
視圖有一個 setSize
方法,該方法如同 Component
中的 doLayout
和 setSize
組合而成。視圖有一個 preferenceChanged
方法,該方法與 Component
中的 invalidate
類似,但該方法可以僅使一個軸無效並標識請求更改的子級。
View 根據三個值(即最小跨距、首選跨距、最大跨距)來表示其所需的大小。視圖中的佈局可以在獨立於每一個軸來完成。對於一個運行正常的 View 實作,將滿足:最小跨距 <= 首選跨距 <= 最大跨距。
佈局最小值的設置方法有:
方法 setSize
應當準備好被多次調用(即使在大小沒有更改時也可能調用此方法)。通常調用 setSize
方法來確保試圖在視圖上執行需要更新佈局的操作之前,已經完成了 View 佈局。應該始終 將視圖的大小設置為該視圖所指定的最小跨距和最大跨距之間的某個值。此外,如果視圖已經更改了其需要的佈局值,並且希望其父級遵守該值,則必須一直在其父級上調用 preferenceChanged
方法。在發送了 preferenceChanged
之前,父 View 無需識別更改。如果需要的話,此類別允許父 View 實作快取記憶體子級的需求。調用序列如下所示:
確切的調用序列取決於父視圖的佈局功能(如果該視圖具有任何子級)。在決定提供給每個子級的內容之前,視圖可能收集子級的優先權,或者其可能一次一個地迭代更新子級。
這在 paint 方法中完成,該方法與元件的 paint 方法非常類似。期望 View 潛在地組裝一個相當大的階層樹。對於呈現,View
具有如下語義:
Component
(即由 getContainer 方法返回的 Component
)相同。這意味著子視圖與父級處於同一個坐標系統中,除非父級顯式地改變了坐標系統。要安排重繪本身,視圖可以在承載 Component
上調用 repaint。
Graphics
物件沒有以任何方式初始化。視圖應該設置任何所需的設置。
View
本身是透明的。雖然視圖可以呈現在其整個分派中,但通常視圖不這麼做。通過向下遍歷 View
實作階層樹來執行呈現。每個 View
負責呈現其子級。執行緒安全取決於此行為。雖然視圖實作不必要在實作時考慮執行緒安全,但是其他確實利用了共時的視圖實作可以依賴階層樹遍歷來保證執行緒安全。
用於呈現的方法有:
因為視圖物件產生自一個處理器,因而不能指望其必然處於某個特定模型,所以使用者必須要能夠執行轉換以恰當地定位模型的空間表示形式。執行此操作的方法有:
在嘗試進行轉換之前佈局必須有效。當通過 DocumentEvent
從模型廣播更改時,轉換無效並且禁止嘗試。
如果總體視圖由多片(如果希望更改視圖並寫入最小數量的新程式碼,這是最佳的情形)表示,而具有大量的 DocumentListener
是不現實的。如果每個視圖都偵聽模型,在任意給定的時間上,僅有少數視圖可能對所廣播的更改實際感興趣。因為模型不瞭解視圖,所以沒有方法來過濾更改資訊的廣播。視圖層次結構本身就代為負責傳播更改資訊。在視圖層次結構的任何一層上,視圖都足夠瞭解其子級,從而能最佳地進一步分發更改資訊。因此,更改從視圖層次結構的根開始廣播。執行此操作的方法有:
欄位摘要 | |
---|---|
static int |
BadBreakWeight
該權重指示對於格式化來說視圖未處於拆分的好時機。 |
static int |
ExcellentBreakWeight
該權重指示視圖支持拆分,並且表示拆分的極好時機。 |
static int |
ForcedBreakWeight
該權重指示視圖支持拆分,並且在被置入一個通過拆分其子級來格式化子級的視圖時,必須拆分該視圖以恰當的表示它。 |
static int |
GoodBreakWeight
該權重指示視圖支持拆分,但是可能存在更好時機。 |
static int |
X_AXIS
用於格式化/拆分操作的軸。 |
static int |
Y_AXIS
用於格式化/拆分操作的軸。 |
從介面 javax.swing.SwingConstants 繼承的欄位 |
---|
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST |
建構子摘要 | |
---|---|
View(Element elem)
創建一個新的 View 物件。 |
方法摘要 | |
---|---|
void |
append(View v)
追加單個子視圖。 |
View |
breakView(int axis,
int offset,
float pos,
float len)
試圖在給定的軸上拆分視圖。 |
void |
changedUpdate(DocumentEvent e,
Shape a,
ViewFactory f)
發出通知,通知文檔此視圖負責的位置處的屬性已更改。 |
View |
createFragment(int p0,
int p1)
創建一個表示元素某部分的視圖。 |
protected void |
forwardUpdate(DocumentEvent.ElementChange ec,
DocumentEvent e,
Shape a,
ViewFactory f)
將給定的 DocumentEvent 轉發給需要被通知模型更改的子視圖。 |
protected void |
forwardUpdateToView(View v,
DocumentEvent e,
Shape a,
ViewFactory f)
將 DocumentEvent 轉發到給定的子視圖。 |
float |
getAlignment(int axis)
確定此視圖沿某個軸所需的對齊方式。 |
AttributeSet |
getAttributes()
獲取呈現時要使用的屬性。 |
int |
getBreakWeight(int axis,
float pos,
float len)
確定此視圖中拆分時機的權重大小。 |
Shape |
getChildAllocation(int index,
Shape a)
獲取給定子視圖的分派。 |
Container |
getContainer()
獲取承載視圖的容器。 |
Document |
getDocument()
獲取與視圖關聯的模型。 |
Element |
getElement()
獲取此視圖所映射的主題的結構化部分。 |
int |
getEndOffset()
獲取此視圖負責的模型的一部分。 |
Graphics |
getGraphics()
獲取用於呈現的 Graphics 。 |
float |
getMaximumSpan(int axis)
確定此視圖沿某個軸的最大跨距。 |
float |
getMinimumSpan(int axis)
確定此視圖沿某個軸的最小跨距。 |
int |
getNextVisualPositionFrom(int pos,
Position.Bias b,
Shape a,
int direction,
Position.Bias[] biasRet)
提供某種途徑來確定可以放置一個插入符的下一個可視表示模型位置。 |
View |
getParent()
返回視圖的父級。 |
abstract float |
getPreferredSpan(int axis)
確定此視圖沿某個軸的首選跨距。 |
int |
getResizeWeight(int axis)
確定視圖沿給定軸的大小可調整性。 |
int |
getStartOffset()
獲取此視圖負責的模型的一部分。 |
String |
getToolTipText(float x,
float y,
Shape allocation)
返回提定位置的工具提示文本。 |
View |
getView(int n)
獲取第 n 個子視圖。 |
int |
getViewCount()
返回此視圖中的視圖數。 |
ViewFactory |
getViewFactory()
獲取將提供給視圖層次結構的 ViewFactory 實作。 |
int |
getViewIndex(float x,
float y,
Shape allocation)
返回表示視圖中給定位置的子視圖索引。 |
int |
getViewIndex(int pos,
Position.Bias b)
返回表示模型中給定位置的子視圖索引。 |
void |
insert(int offs,
View v)
插入單個子視圖。 |
void |
insertUpdate(DocumentEvent e,
Shape a,
ViewFactory f)
發出通知,通知在文檔中此視圖負責的某個位置已插入內容。 |
boolean |
isVisible()
返回一個指示視圖是否可視的 boolean 值。 |
Shape |
modelToView(int p0,
Position.Bias b0,
int p1,
Position.Bias b1,
Shape a)
為給定區域提供從文檔模型坐標空間到視圖坐標空間的映射。 |
Shape |
modelToView(int pos,
Shape a)
已過時。 |
abstract Shape |
modelToView(int pos,
Shape a,
Position.Bias b)
為給定字元提供從文檔模型坐標空間到視圖坐標空間的映射。 |
abstract void |
paint(Graphics g,
Shape allocation)
使用給定的呈現表面和該表面上的區域來呈現。 |
void |
preferenceChanged(View child,
boolean width,
boolean height)
子視圖能在父級上調用此方法來指示首選項已經更改,並且應該重新考慮佈局。 |
void |
remove(int i)
移除給定位置處的一個子級。 |
void |
removeAll()
移除所有子級。 |
void |
removeUpdate(DocumentEvent e,
Shape a,
ViewFactory f)
給出從文檔中此視圖負責的位置移除了某些內容的通知。 |
void |
replace(int offset,
int length,
View[] views)
替代子視圖。 |
void |
setParent(View parent)
為此視圖建立父視圖。 |
void |
setSize(float width,
float height)
設置視圖的大小。 |
protected boolean |
updateChildren(DocumentEvent.ElementChange ec,
DocumentEvent e,
ViewFactory f)
更新子視圖以回應接收模型變化的通知,並且有一條此視圖負責的元素的變化記錄。 |
protected void |
updateLayout(DocumentEvent.ElementChange ec,
DocumentEvent e,
Shape a)
更新佈局,以回應從模型接受的更改通知。 |
int |
viewToModel(float x,
float y,
Shape a)
已過時。 |
abstract int |
viewToModel(float x,
float y,
Shape a,
Position.Bias[] biasReturn)
提供從視圖坐標空間到模型的邏輯坐標空間的映射。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
欄位詳細資訊 |
---|
public static final int BadBreakWeight
getBreakWeight(int, float, float)
,
GoodBreakWeight
,
ExcellentBreakWeight
,
ForcedBreakWeight
,
常數欄位值public static final int GoodBreakWeight
getBreakWeight(int, float, float)
,
BadBreakWeight
,
ExcellentBreakWeight
,
ForcedBreakWeight
,
常數欄位值public static final int ExcellentBreakWeight
getBreakWeight(int, float, float)
,
BadBreakWeight
,
GoodBreakWeight
,
ForcedBreakWeight
,
常數欄位值public static final int ForcedBreakWeight
getBreakWeight(int, float, float)
,
BadBreakWeight
,
GoodBreakWeight
,
ExcellentBreakWeight
,
常數欄位值public static final int X_AXIS
public static final int Y_AXIS
建構子詳細資訊 |
---|
public View(Element elem)
View
物件。
elem
- 要表示的 Element
方法詳細資訊 |
---|
public View getParent()
null
public boolean isVisible()
public abstract float getPreferredSpan(int axis)
axis
- 可能是 View.X_AXIS
或者 View.Y_AXIS
getPreferredSpan(int)
public float getMinimumSpan(int axis)
axis
- 可能是 View.X_AXIS
或者 View.Y_AXIS
getPreferredSpan(int)
public float getMaximumSpan(int axis)
axis
- 可能是 View.X_AXIS
或者 View.Y_AXIS
getPreferredSpan(int)
public void preferenceChanged(View child, boolean width, boolean height)
revalidate
。
child
- 子視圖width
- 如果寬度首選項更改,則該參數為 trueheight
- 如果高度首選項更改,則該參數為 trueJComponent.revalidate()
public float getAlignment(int axis)
axis
- 可能是 View.X_AXIS
或者 View.Y_AXIS
public abstract void paint(Graphics g, Shape allocation)
g
- 要使用的呈現表面allocation
- 分派的要在其中呈現的區域public void setParent(View parent)
super.setParent()
。
parent
- 新的父級,如果要從父級中移除視圖,則為 null
public int getViewCount()
getViewCount()
public View getView(int n)
null
。
n
- 要獲取的視圖的編號,該值 >= 0 && < getViewCount()
public void removeAll()
replace
的便捷調用。
public void remove(int i)
replace
的便捷調用。
public void insert(int offs, View v)
replace
的便捷調用。
offs
- 要其前插入視圖的偏移量,該值 >= 0v
- 視圖replace(int, int, javax.swing.text.View[])
public void append(View v)
replace
的便捷調用。
v
- 視圖replace(int, int, javax.swing.text.View[])
public void replace(int offset, int length, View[] views)
null
,並且移除對它們的內部參考以便能被垃圾回收。實作此方法以不執行任何操作,因為預設情況下視圖沒有任何子級。
offset
- 子視圖中插入新 views 的起始索引。這應當是一個 >= 0 並且 <= getViewCount 的值length
- 要移除的已存在的子視圖數 這應當是一個 >= 0 並且 <= (getViewCount() - offset) 的值。views
- 要添加的子視圖。此值可以為 null
,指示當前不添加任何子級(移除時很有用)public int getViewIndex(int pos, Position.Bias b)
pos
- 位置,該值 >= 0
public Shape getChildAllocation(int index, Shape a)
null
。
index
- 子級的索引,該值 >= 0 && < getViewCount()
a
- 此視圖的分派
public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet) throws BadLocationException
pos
- 要轉換的位置,該值 >= 0a
- 為呈現分派的區域direction
- 以當前位置開始的方向,可以將它們設想為通常出現在鍵盤上的箭頭鍵。它將是以下值之一:
BadLocationException
IllegalArgumentException
- 如果 direction
不具有上述合法值之一public abstract Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException
pos
- 所需字元的位置 (>=0)a
- 套件圍了請求字元的視圖區域b
- 當位置是兩個視圖的邊界時,該參數是離由偏移量表示的前一個字元或者下一個字元的偏差;b
將是這些值之一:
Position.Bias.Forward
Position.Bias.Backward
BadLocationException
- 如果給定的位置不表示關聯文檔中的一個有效位置
IllegalArgumentException
- 如果 b
上文列出的 Position.Bias
的合法值之一viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])
public Shape modelToView(int p0, Position.Bias b0, int p1, Position.Bias b1, Shape a) throws BadLocationException
p0
- 第一個字元的位置 (>=0)b0
- 當位置是兩個視圖的一個邊界時,第一個字元位置離由偏移量表示的前一個字元或下一個字元的偏差;b0
將是這些值之一:
Position.Bias.Forward
Position.Bias.Backward
p1
- 最後一個字元的位置 (>=0)b1
- 第二個字元位置的偏差,由上文所示的合法值之一來定義a
- 套件圍了請求區域的視圖區域
BadLocationException
- 如果給定的位置不表示關聯文檔中的一個有效位置
IllegalArgumentException
- 如果 b0
或者 b1
不是上文列出的 Position.Bias
的合法值之一viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])
public abstract int viewToModel(float x, float y, Shape a, Position.Bias[] biasReturn)
biasReturn
參數來指示給定的點更接近於模型中的下一個字元還是前一個字元。
x
- X 坐標,該值 >= 0y
- Y 坐標,該值 >= 0a
- 要在其中呈現的分派區域
biasReturn
參數來指示給定的點更接近於模型中的下一個字元還是前一個字元。public void insertUpdate(DocumentEvent e, Shape a, ViewFactory f)
e
- 來自關聯文檔的更改資訊a
- 視圖的當前分派區域f
- 用於重建的處理器(如果該視圖有子級)insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
public void removeUpdate(DocumentEvent e, Shape a, ViewFactory f)
e
- 來自關聯文檔的更改資訊a
- 視圖的當前分派區域f
- 用於重建的處理器(如果該視圖有子級)removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
public void changedUpdate(DocumentEvent e, Shape a, ViewFactory f)
e
- 發自關聯文檔的更改資訊a
- 視圖的當前分派f
- 視圖有子級時用於重建的處理器 View#changedUpdatepublic Document getDocument()
null
getDocument()
public int getStartOffset()
getStartOffset()
public int getEndOffset()
getEndOffset()
public Element getElement()
getElement()
public Graphics getGraphics()
Graphics
。此方法可以用來確定字元特徵,並且它對於列印視圖和元件視圖是不同的。
Graphics
物件public AttributeSet getAttributes()
AttributeSet
來存取它們。
public View breakView(int axis, int offset, float pos, float len)
實作此方法以返回視圖本身,這表示在不可拆分時的預設行為。如果視圖確實支持拆分,返回的視圖的起始偏移量應當是給定的偏移量,並且結尾偏移量應當小於或者等於要被拆分的視圖的結尾偏移量。
axis
- 可能是 View.X_AXIS
或者 View.Y_AXIS
offset
- 文檔模型中拆分段將佔用的位置,該值 >= 0。這可能是該段返回的起始偏移量pos
- 拆分視圖將沿軸佔用的位置,該值 >= 0。這對製表符計算之類別的操作很有用。len
- 指定所需的可能的拆分沿軸的距離,該值 >= 0
ParagraphView
public View createFragment(int p0, int p1)
p0
- 起始偏移量,該值 >= 0。此值應當是一個大於等於元素起始偏移量且小於元素結尾偏移量的值。p1
- 結尾偏移量,該值 > p0。此值應當是一個小於等於元素結尾偏移量且大於元素起始偏移量的值。
LabelView
public int getBreakWeight(int axis, float pos, float len)
breakView
的視圖。例如,表示其中具有空格的文本的視圖可能比沒有空格的視圖更傾向拆分。權值越高,拆分的傾向性更大。等於或者小於 BadBreakWeight
的值不應被考慮進行拆分。大於或者等於 ForcedBreakWeight
值應該被拆分。
實作此方法以提供返回 BadBreakWeight
的預設行為,除非長度大於視圖長度,在這種情況下整個視圖表示一個段。除非一個視圖被寫入支持拆分行為,否則不傾向於試圖並拆分視圖。一定支持拆分的視圖例子是 LabelView
。使用拆分權值的視圖範例是 ParagraphView
。
axis
- 可能是 View.X_AXIS
或者 View.Y_AXIS
pos
- 拆分視圖開始的可能的位置,該值 >= 0。這可能對於計算製表符位置很有用。len
- 指定自 pos(可能需要拆分的位置)的相對長度,該值 >= 0
LabelView
,
ParagraphView
,
BadBreakWeight
,
GoodBreakWeight
,
ExcellentBreakWeight
,
ForcedBreakWeight
public int getResizeWeight(int axis)
axis
- 可能是 View.X_AXIS
或 View.Y_AXIS
public void setSize(float width, float height)
width
- 寬度,該值 >= 0height
- 高度,該值 >= 0public Container getContainer()
null
public ViewFactory getViewFactory()
ViewFactory
實作。通常將視圖提供給此方法作為參數,以便在它們最可能需要該處理器的時候根據模型更新,但是在其他時候,此方法便以足夠。
null
public String getToolTipText(float x, float y, Shape allocation)
JTextComponent.getToolTipText(java.awt.event.MouseEvent)
public int getViewIndex(float x, float y, Shape allocation)
x
、y
的邊界的子級。
x
- x 坐標y
- y 坐標allocation
- View 中的當前分派。
protected boolean updateChildren(DocumentEvent.ElementChange ec, DocumentEvent e, ViewFactory f)
ViewFactory
用來為每個元素創建子視圖,這些子視圖將從給定的 ElementChange
中指定的索引開始被添加到 ElementChange
中。移除表示已移除指定元素的子視圖數目。
ec
- 此視圖所負責的元素的更改資訊。如果調用此方法,該參賽不應當為 null
e
- 來自關聯文檔的變化資訊f
- 用於建構子視圖的處理器
insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
,
removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
,
changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
protected void forwardUpdate(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a, ViewFactory f)
DocumentEvent
轉發給需要被通知模型更改的子視圖。如果此視圖負責的元素發生了更改,則在轉發時應當考慮該更改(即新子視圖不應該獲得通知)。
ec
- 此視圖所負責的元素的更改(如果沒有任何更改,則為 null
)。e
- 來自關聯文檔的更改資訊a
- 視圖的當前分派區域f
- 用於重建的處理器(如果該視圖有子級)insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
,
removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
,
changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
protected void forwardUpdateToView(View v, DocumentEvent e, Shape a, ViewFactory f)
DocumentEvent
轉發到給定的子視圖。此方法只是根據實際型別,通過對 insertUpdate
、removeUpdate
或者 changedUpdate
的調用來將訊息傳遞給視圖。此方法由 forwardUpdate 調用來將事件轉發給需要它的子級。
v
- 作為事件轉發目標的子視圖e
- 來自關聯文檔的更改資訊a
- 視圖的當前分派f
- 用於重建的處理器(如果視圖有子級)forwardUpdate(javax.swing.event.DocumentEvent.ElementChange, javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
protected void updateLayout(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a)
ElementChange
記錄不為 null
,則實作此方法來調用 preferenceChanged
以重新計劃一個新的佈局。
ec
- 此視圖所負責的元素的更改(如果沒有任何更改則為 null
)e
- 來自關聯文檔的更改資訊a
- 視圖的當前分派insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
,
removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
,
changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
@Deprecated public Shape modelToView(int pos, Shape a) throws BadLocationException
Position.Bias.Forward
。
pos
- 要轉換的位置,該值 >= 0a
- 分派的要在其中呈現的區域
BadLocationException
- 如果給定位置在所關聯的文檔中不是一個有效位置modelToView(int, java.awt.Shape, javax.swing.text.Position.Bias)
@Deprecated public int viewToModel(float x, float y, Shape a)
x
- X 坐標,該值 >= 0y
- Y 坐標,該值 >= 0a
- 分派的要在其中呈現的區域
viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。