java.lang.Object javax.swing.text.View javax.swing.text.CompositeView javax.swing.text.BoxView javax.swing.text.ZoneView
public class ZoneView
ZoneView 是一个创建分区的 View 实现,该分区中在需要子视图来显示或进行模型/视图转换之前不会创建或存储子视图。在将要表示的模型很大的情况下,此类仅为将要主动地查看/编辑的区域构建视图对象,从而使其在内容消耗上有一个实质性的减少。可以通过某种途径估计子级的大小,或者仅利用保存的结果来异步计算。
ZoneView 扩展 BoxView 来为其子级提供一个实现分区的框。分区是特殊的 View 实现(此类的一个实例的子级),其仅表示一个 ZoneView 实例所负责的一部分模型。在尝试显示子视图之前,分区不创建子视图。一个框形的视图很合适,这是因为:
默认的行为由 maxZoneSize 和 maxZonesLoaded 两个属性来控制。将 maxZoneSize 设置为整数 Integer.MAX_VALUE 会导致仅创建一个分区。这将有效地将视图转换为装饰模式的一个实现。将 maxZonesLoaded 设置为 Integer.MAX_VALUE 整数值将导致分区永远不会被卸载。为简单起见,在由视图负责的元素的子元素所表示的边界上创建分区。分区可以是任何 View 实现,但是默认的实现以高效地支持极大分区的 AsyncBoxView 为基础。
View
字段摘要 |
---|
从类 javax.swing.text.View 继承的字段 |
---|
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, 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 |
构造方法摘要 | |
---|---|
ZoneView(Element elem, int axis) 构造一个 ZoneView。 |
方法摘要 | |
---|---|
protected View |
createZone(int p0, int p1) 针对模型中的给定范围(应该在此对象的职责范围内),创建一个视图来表示分区。 |
int |
getMaximumZoneSize() 获取当前最大的分区大小。 |
int |
getMaxZonesLoaded() 获取当前设置的允许同时加载的分区数。 |
protected int |
getViewIndexAtPosition(int pos) 返回表示模型中给定位置的子视图索引。 |
void |
insertUpdate(DocumentEvent changes, Shape a, ViewFactory f) 给出在文档中此视图负责的位置插入了某些内容的通知。 |
protected boolean |
isZoneLoaded(View zone) 确定某个分区是否处于加载状态。 |
protected void |
loadChildren(ViewFactory f) 加载所有子级来初始化视图。 |
void |
removeUpdate(DocumentEvent changes, Shape a, ViewFactory f) 给出从文档中此视图负责的位置移除了某些内容的通知。 |
void |
setMaximumZoneSize(int size) 设置所需的最大分区大小。 |
void |
setMaxZonesLoaded(int mzl) 设置当前设置的允许同时加载的分区数。 |
protected void |
unloadZone(View zone) 卸载一个分区(将分区转换到其内存节省状态)。 |
protected boolean |
updateChildren(DocumentEvent.ElementChange ec, DocumentEvent e, ViewFactory f) 超类行为将试图更新子视图,而在这种情况下并不需要这样做,因为子级是分区并且不受关联元素变化的直接影响。 |
protected void |
zoneWasLoaded(View zone) 当加载某个分区后由该分区调用。 |
从类 javax.swing.text.View 继承的方法 |
---|
append, breakView, changedUpdate, createFragment, forwardUpdateToView, getAttributes, getBreakWeight, getContainer, getDocument, getElement, getEndOffset, getGraphics, getParent, getStartOffset, getToolTipText, getViewFactory, getViewIndex, insert, isVisible, modelToView, remove, removeAll, updateLayout, viewToModel |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public ZoneView(Element elem, int axis)
elem
- 此视图负责的元素
axis
- View.X_AXIS 或者 View.Y_AXIS
方法详细信息 |
---|
public int getMaximumZoneSize()
public void setMaximumZoneSize(int size)
size
- 在试图将分区拆分成更小的分区前,此分区能显示的字符数。
public int getMaxZonesLoaded()
public void setMaxZonesLoaded(int mzl)
mzl
小于 1,此方法将抛出
IllegalArgumentException
。
mzl
- 能主动加载的所需最大分区数,必须大于 0
IllegalArgumentException
- 如果
mzl
< 1
protected void zoneWasLoaded(View zone)
zone
- 刚刚加载的子视图
protected void unloadZone(View zone)
zone
- 需要设置成卸载状态的子视图。
protected boolean isZoneLoaded(View zone)
protected View createZone(int p0, int p1)
p0
- 所需分区的开始处。此参数应 >= getStartOffset() 且 < getEndOffset()。此值也应 < p1。
p1
- 所需分区的结尾。此参数应 > getStartOffset() 且 <= getEndOffset()。此值也应 > p0。
protected void loadChildren(ViewFactory f)
setParent
方法调用。实现此方法以不直接加载任何子级(因为它们由分区创建)。此方法创建了初始的分区集。但是在试图显示分区或执行模型/视图坐标转换之前,并不实际组装这些分区。
CompositeView
中的
loadChildren
f
- 视图工厂
CompositeView.setParent(javax.swing.text.View)
protected int getViewIndexAtPosition(int pos)
CompositeView
中的
getViewIndexAtPosition
pos
- 位置,该值 >= 0
protected boolean updateChildren(DocumentEvent.ElementChange ec, DocumentEvent e, ViewFactory f)
View
中的
updateChildren
ec
- 此视图所负责的元素的更改信息。如果调用此方法,该参赛不应当为
null
e
- 来自关联文档的变化信息
f
- 用于构建子视图的工厂
View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
,
View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
,
View.changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
public void insertUpdate(DocumentEvent changes, Shape a, ViewFactory f)
View
中的
insertUpdate
changes
- 来自关联文档的更改信息
a
- 视图的当前分配
f
- 视图有子级时用于重建的工厂
View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
public void removeUpdate(DocumentEvent changes, Shape a, ViewFactory f)
View
中的
removeUpdate
changes
- 来自相关文档的更改信息
a
- 视图的当前分配区域
f
- 用于重建的工厂(如果该视图有子级)
View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)