public abstract class View extends Object implements SwingConstants
文本包中非常重要的一部分是View
类。 顾名思义,它代表文本模型的视图,或文本模型的一部分。 正是这个类负责文本组件的外观。 这个观点并不是一个必须学习的全新的东西,而是像一个轻量级的组件。
默认情况下,视图很轻。 它包含对父视图的引用,它可以从中获取许多东西而不保持状态,并且它包含对模型部分的Element
( Element
)。 视图不必完全代表模型中的元素,这只是一个典型的,因此方便的映射。 视图可以替代地保持几个Position对象以保持其在模型中的位置(即,表示元素的片段)。 这通常是格式化视图被分解成碎片的结果。 与元素的实质关系的便利性使得更容易构建工厂来生成视图,并且随着模型被更改而使视图的跟踪变得更容易,并且必须改变视图以反映模型。 因此,简单的视图代表一个元素直接而复杂的视图。
观点有以下职责:
该视图有setSize
方法,如doLayout
和setSize
在Component
组合。 该视图具有preferenceChanged
方法,如invalidate
中的Component
除了可以使一个轴无效,并且识别出请求更改的子节点。
视图表示要根据三个值,最小值,首选值和最大跨度计算的大小。 视图中的布局可以在每个轴上独立完成。 对于正常运行的View实现,最小跨度将是<=优选跨度,反过来将是<=最大跨度。
最小的布局方法是:
setSize
方法应准备好多次调用(即使大小没有变化也可以调用)。 通常调用setSize
方法以确保View布局完成,然后再尝试执行需要最新布局的操作。 视图的大小应始终设置为该视图指定的最小和最大跨度内的值。 另外,视图必须总是调用父对象的preferenceChanged
方法,如果它已经更改了它想要的布局的值,并且期望父级符合。 父视图不需要直到认识的变化preferenceChanged
已发送。 这允许父视图实现缓存子需求(如果需要)。 调用顺序如下所示:
精确的调用顺序取决于父视图的布局功能(如果视图有任何子节点)。 该视图可以在确定给予每个孩子的情况之前收集孩子的偏好,或者可以一次迭代地更新孩子。
这是在paint方法中完成的,这很像一个组件绘制方法。 预计意图可能会填补相当大的树。 A View
具有以下用于呈现的语义:
Component
(即Component
由返回getContainer
方法)。 这意味着一个子视图与父视图生活在同一个坐标系中,除非父对象明确地改变了坐标系。 要安排自己重绘,视图可以在主持Component
上调用重绘。 Graphics
对象没有以任何方式初始化。 视图应设置所需的任何设置。 View
是透明的。 虽然视图可能会导致其整个分配,通常视图不会。 通过遍历View实现的树View
渲染。 每个View
负责呈现其孩子。 这种行为取决于线程安全性。 虽然视图实现不一定必须用线程安全性来实现,但是使用并发性的其他视图实现可以取决于树遍历以保证线程安全性。 渲染的方法是:
因为视图对象是从工厂生成的,因此不一定被计入特定模式,必须能够执行转换以正确定位模型的空间表示。 这样做的方法是:
在进行翻译之前,布局必须是有效的。 翻译无效,在通过DocumentEvent从模型播放更改时,不得DocumentEvent
。
如果整体视图由许多部分表示(如果希望能够更改视图并写入最少的新代码,则是最佳情况),拥有大量DocumentListener
s将是DocumentListener
的。 如果每个视图都听取了模型,只有少数人实际上对任何给定时间广播的变化感兴趣。 由于该模型不具有意见知识,因此无法过滤广播变更信息。 视图层次本身负责传播变更信息。 在视图层次结构中的任何级别,该视图足够了解其子进程最好分发更改信息。 因此,从视图层次结构的根开始广播更改。 这样做的方法是:
Modifier and Type | Field and Description |
---|---|
static int |
BadBreakWeight
表示视图的重量是格式化的一个坏的机会。
|
static int |
ExcellentBreakWeight
指示视图的重量支持打破,这代表了一个非常有吸引力的地方打破。
|
static int |
ForcedBreakWeight
指示视图的重量支持断开,并且必须打破,以便在放置在通过破坏它们来格式化其子项的视图中时正确表示。
|
static int |
GoodBreakWeight
指示视图的重量支持突破,但可能存在更好的机会。
|
static int |
X_AXIS
轴用于格式/中断操作。
|
static int |
Y_AXIS
轴用于格式/中断操作。
|
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST
Modifier and Type | Method and Description |
---|---|
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()
返回一个布尔值,指示视图是否可见。
|
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)
提供从视图坐标空间到模型的逻辑坐标空间的映射。
|
public static final int BadBreakWeight
public static final int GoodBreakWeight
public static final int ExcellentBreakWeight
public static final int ForcedBreakWeight
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
- 如果宽度首选项已更改,则为true
height
- 如果高度偏好已更改,则为true
JComponent.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
- 视图在> = 0之前插入的偏移量
v
- 视图
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
- 将子视图的起始索引插入新视图。
这应该是一个值> = 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
BadLocationException
。
pos
- 转换的位置
a
- 要呈现的分配区域
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
-
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坐标> = 0
y
- Y坐标> = 0
a
- 要呈现的分配区域
biasReturn
参数,以指示给定的点更接近模型中的下一个字符或模型中的上一个字符。
public void insertUpdate(DocumentEvent e, Shape a, ViewFactory f)
updateChildren
被调用,如果该视图负责的元素有任何更改。 如果此视图具有表示子元素的子视图,则此方法应执行必要的任何操作,以确保子视图正确表示模型。 forwardUpdate
叫到的DocumentEvent转发给相应的子视图。 updateLayout
被称为给视图一个机会来修复它的布局,重新安排布局,或什么都不做。 e
- 相关文件的变更信息
a
- 视图的当前分配
f
- 工厂用来重建如果视图有孩子
insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
public void removeUpdate(DocumentEvent e, Shape a, ViewFactory f)
updateChildren
被调用,如果该视图负责的元素有任何更改。 如果此视图具有表示子元素的子视图,则此方法应执行必要的任何操作,以确保子视图正确表示模型。 forwardUpdate
叫到的DocumentEvent转发给相应的子视图。 updateLayout
被称为给视图一个机会修复它的布局,重新安排布局,或什么都不做。 e
- 相关文件的变更信息
a
- 视图的当前分配
f
- 工厂使用重建如果视图有孩子
removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
public void changedUpdate(DocumentEvent e, Shape a, ViewFactory f)
updateChildren
被调用,如果该视图负责的元素有任何更改。 如果此视图具有表示子元素的子视图,则此方法应执行必要的任何操作,以确保子视图正确表示模型。 forwardUpdate
叫到的DocumentEvent转发给相应的子视图。 updateLayout
被称为给视图一个机会修复它的布局,重新安排布局,或什么都不做。 e
- 相关文件的更改信息
a
- 当前分配的视图
f
- 工厂使用重建如果视图有孩子
changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
public 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
- 指定需要潜在中断的
位置的距离> = 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
- width> = 0
height
- height> = 0
public 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
- 当前分配的视图。
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
- 转换> = 0的位置
a
- 要呈现的分配区域
BadLocationException
- 如果给定的位置不表示相关文档中的有效位置
modelToView(int, java.awt.Shape, javax.swing.text.Position.Bias)
@Deprecated public int viewToModel(float x, float y, Shape a)
x
- X坐标> = 0
y
- Y坐标> = 0
a
- 要呈现的分配区域
viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])