- java.lang.Object
-
- javax.swing.text.View
-
- javax.swing.text.CompositeView
-
- javax.swing.text.BoxView
-
- javax.swing.text.ZoneView
-
- All Implemented Interfaces:
-
SwingConstants
public class ZoneView extends BoxView
ZoneView是一个View实现,它创建区域,为了显示或模型/视图转换,子视图未被创建或存储,直到它们被需要为止。 这样,通过仅为正在被主动查看/编辑的区域构建视图对象,可以显着减少正在表示模型的情况下的内存消耗。 孩子的大小可以以某种方式估计,或者异步计算,只保存结果。ZoneView扩展BoxView以提供一个框架,为其子代码实现区域。 这些区域是仅代表ZoneView实例负责的模型的一部分的特殊View实现(此类的实例的子项)。 在尝试显示它们之前,区域不会创建子视图。 盒子形状的视图非常适合这一点,因为:
- 盒子是一个大量使用的视图,并且有一个提供此行为的框提供了巨大的机会将视图从视图工厂插入到视图层次结构中。
- 箱子沿一个方向平铺,因此很容易以可靠的方式将它们分成区域。
- 框通常与模型有一个简单的关系(即它们创建直接表示子元素的子视图)。
- 盒子比一些其他形状更容易估计尺寸。
默认行为由两个属性maxZoneSize和maxZonesLoaded控制。 将maxZoneSize设置为Integer.MAX_VALUE将产生仅导致一个区域的创建。 这将有效地将视图转变为装饰器图案的实现。 将maxZonesLaaded设置为Integer.MAX_VALUE的值将导致区域永远不会被卸载。 为了简单起见,在视图负责的元素的子元素表示的边界上创建区域。 区域可以是任何View实现,但默认实现基于AsyncBoxView,它有效地支持相当大的区域。
- 从以下版本开始:
- 1.3
- 另请参见:
-
View
-
-
Field Summary
-
Fields inherited from interface 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
-
Fields inherited from class javax.swing.text.View
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXIS
-
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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)
在加载时由区域调用。-
Methods inherited from class javax.swing.text.BoxView
baselineLayout, baselineRequirements, calculateMajorAxisRequirements, calculateMinorAxisRequirements, childAllocation, flipEastAndWestAtEnds, forwardUpdate, getAlignment, getAxis, getChildAllocation, getHeight, getMaximumSpan, getMinimumSpan, getOffset, getPreferredSpan, getResizeWeight, getSpan, getViewAtPoint, getWidth, isAfter, isAllocationValid, isBefore, isLayoutValid, layout, layoutChanged, layoutMajorAxis, layoutMinorAxis, modelToView, paint, paintChild, preferenceChanged, replace, setAxis, setSize, viewToModel
-
Methods inherited from class javax.swing.text.CompositeView
getBottomInset, getInsideAllocation, getLeftInset, getNextEastWestVisualPositionFrom, getNextNorthSouthVisualPositionFrom, getNextVisualPositionFrom, getRightInset, getTopInset, getView, getViewAtPosition, getViewCount, getViewIndex, modelToView, setInsets, setParagraphInsets, setParent
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class 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
-
-
-
-
构造方法详细信息
-
ZoneView
public ZoneView(Element elem, int axis)
构造一个ZoneView。- 参数
-
elem
- 这个视图负责的元素 -
axis
- View.X_AXIS或View.Y_AXIS
-
-
方法详细信息
-
getMaximumZoneSize
public int getMaximumZoneSize()
获取当前的最大区域大小。- 结果
- 当前最大区域大小
-
setMaximumZoneSize
public void setMaximumZoneSize(int size)
设置所需的最大区域大小。 如果单个子视图大于此大小,则区域可能会大于此大小,因为区域是在子视图边界上形成的。- 参数
-
size
- 区域在尝试将区域分割成较小的大小之前可能表示的字符数。
-
getMaxZonesLoaded
public int getMaxZonesLoaded()
获取允许同时加载的区域数的当前设置。- 结果
- 当前允许同时加载的区域数量的设置
-
setMaxZonesLoaded
public void setMaxZonesLoaded(int mzl)
设置允许同时加载的区域数量的当前设置。 如果mzl
小于1,这将抛出IllegalArgumentException
。- 参数
-
mzl
- 要主动加载的所需最大区域数必须大于0 - 异常
-
IllegalArgumentException
- 如果mzl
<1
-
zoneWasLoaded
protected void zoneWasLoaded(View zone)
在加载时由区域调用。 当尝试在处于卸载状态的区域上显示或执行模型/视图转换时,会发生这种情况。 这是为了检查是否达到最大数量的区域,并且如果是,卸载最旧的区域。- 参数
-
zone
- 刚加载的子视图。
-
unloadZone
protected void unloadZone(View zone)
卸载区域(将区域转换为其内存保存状态)。 这些区域预计将代表该视图负责的元素的子元素的子集。 因此,默认的实现是简单地删除所有的孩子。- 参数
-
zone
- 希望将子视图设置为卸载状态。
-
isZoneLoaded
protected boolean isZoneLoaded(View zone)
确定区域是否处于加载状态。 这些区域预计将代表该视图负责的元素的子元素的子集。 因此,如果视图具有子项,则默认实现为true。 param区域的子视图- 参数
-
zone
- 区域 - 结果
- 区域是否处于装载状态。
-
createZone
protected View createZone(int p0, int p1)
创建一个视图来表示模型中给定范围的区域(应该在该对象的责任范围内)。 这被区域管理逻辑调用来创建新的区域。 子类可以通过更改此方法为区域提供不同的实现。- 参数
-
p0
- 所需区域的开始。 这应该是> = getStartOffset()和<getEndOffset()。 此值也应为<p1。 -
p1
- 所需区域的结尾。 这应该是> getStartOffset()和<= getEndOffset()。 此值也应为> p0。 - 结果
- 在模型中表示给定范围的区域的视图
-
loadChildren
protected void loadChildren(ViewFactory f)
加载所有的孩子以初始化视图。 这是由setParent
方法调用的。 这被重新实现为不直接加载任何孩子(因为它们是由区域创建的)。 此方法创建初始区域集。 然而,区域实际上并没有被填充,直到尝试显示它们或进行模型/视图坐标转换。- 重写:
-
loadChildren
在CompositeView
- 参数
-
f
- 视图工厂 - 另请参见:
-
CompositeView.setParent(javax.swing.text.View)
-
getViewIndexAtPosition
protected int getViewIndexAtPosition(int pos)
返回表示模型中给定位置的子视图索引。- 重写:
-
getViewIndexAtPosition
在CompositeView
- 参数
-
pos
- 位置> = 0 - 结果
- 表示给定位置的视图的索引,如果没有视图表示该位置,则为-1
-
updateChildren
protected boolean updateChildren(DocumentEvent.ElementChange ec, DocumentEvent e, ViewFactory f)
超类行为将尝试更新在这种情况下不希望的子视图,因为这些子节点是区域,而不是直接受关联元素的更改影响。 这被重新实现,不做任何事情并返回false。- 重写:
-
updateChildren
在View
- 参数
-
ec
- 该视图负责的元素的更改信息。 如果这个方法被调用,这不应该是null
-
e
- 相关文件的更改信息 -
f
- 工厂用来构建子视图 - 结果
- 子视图是否代表该视图负责的元素的子元素。 一些视图创建代表他们负责的元素的一部分的子代,并且应该返回false。 此信息用于确定添加元素范围内的视图是否应转发到
- 另请参见:
-
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)
-
insertUpdate
public void insertUpdate(DocumentEvent changes, Shape a, ViewFactory f)
在该视图负责的位置发出通知。 这主要被委托给超类,但是被重新实现以更新相关区域(即确定区域是否需要被拆分为一组2个或更多的区域)。- 重写:
-
insertUpdate
在View
- 参数
-
changes
- 相关文件的更改信息 -
a
- 视图的当前分配 -
f
- 工厂用来重建如果视图有孩子 - 另请参见:
-
View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
-
removeUpdate
public void removeUpdate(DocumentEvent changes, Shape a, ViewFactory f)
在该视图负责的位置发出文档中已删除某些内容的通知。 这主要被委托给超类,但是被重新实现以更新相关区域(即确定区域是否需要被移除或与其他区域连接)。- 重写:
-
removeUpdate
在View
- 参数
-
changes
- 相关文件中的更改信息 -
a
- 视图的当前分配 -
f
- 工厂用来重建如果视图有孩子 - 另请参见:
-
View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
-
-