java.lang.Object
javax.swing.text.View
javax.swing.text.CompositeView
javax.swing.text.BoxView
javax.swing.text.ZoneView
- 所有已实现的接口:
-
SwingConstants
ZoneView是一个View实现,它创建区域,其中子视图直到需要显示或进行模型/视图转换时才会被创建或存储。这使得在表示的模型非常庞大的情况下,通过仅为实际查看/编辑的区域构建视图对象,可以大幅减少内存消耗。子视图的大小可以以某种方式估计,或者异步计算,仅保存结果。
ZoneView扩展了BoxView,提供了一个实现其子视图区域的框。这些区域是特殊的View实现(此类的子级),表示ZoneView实例负责的模型的仅部分。这些区域直到尝试显示它们时才创建子视图。框形视图非常适合这种情况,因为:
- 框视图是一个被广泛使用的视图,提供此行为的框视图为从视图工厂插入行为提供了重大机会。
- 框视图在一个方向上平铺,因此很容易可靠地将它们分成区域。
- 框视图通常与模型有简单的关系(即它们创建直接表示子元素的子视图)。
- 与其他形状相比,框视图更容易估计大小。
默认行为由两个属性maxZoneSize和maxZonesLoaded控制。将maxZoneSize设置为Integer.MAX_VALUE将导致仅创建一个区域。这实际上将视图转换为装饰器模式的实现。将maxZonesLoaded设置为Integer.MAX_VALUE将导致区域永远不会被卸载。为简单起见,区域是在由视图负责的元素的子元素表示的边界上创建的。这些区域可以是任何View实现,但默认实现基于支持高效大区域的AsyncBoxView。
- 自从:
- 1.3
- 参见:
-
Field Summary
Fields declared in class javax.swing.text.View
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXIS
Fields declared in 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
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected View
createZone
(int p0, int p1) 创建一个视图来表示模型中给定范围内的区域(应该在此对象责任范围内的范围内)。int
获取当前最大区域大小。int
获取同时允许加载的区域数量的当前设置。protected int
getViewIndexAtPosition
(int pos) 返回表示模型中给定位置的子视图索引。void
insertUpdate
(DocumentEvent changes, Shape a, ViewFactory f) 通知在文档中的一个此视图负责的位置插入了某些内容。protected boolean
isZoneLoaded
(View zone) 确定区域是否处于加载状态。protected void
加载所有子视图以初始化视图。void
removeUpdate
(DocumentEvent changes, Shape a, ViewFactory f) 通知在文档中的一个此视图负责的位置删除了某些内容。void
setMaximumZoneSize
(int size) 设置所需的最大区域大小。void
setMaxZonesLoaded
(int mzl) 设置同时允许加载的区域数量的当前设置。protected void
unloadZone
(View zone) 卸载一个区域(将区域转换为其节省内存的状态)。protected boolean
超类行为将尝试更新子视图,但在这种情况下不希望这样,因为子视图是区域,不会直接受到与关联元素的更改的影响。因此,重新实现为不执行任何操作并返回false。protected void
zoneWasLoaded
(View zone) 当区域加载时,由区域调用。Methods declared in 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 declared in class javax.swing.text.CompositeView
getBottomInset, getInsideAllocation, getLeftInset, getNextEastWestVisualPositionFrom, getNextNorthSouthVisualPositionFrom, getNextVisualPositionFrom, getRightInset, getTopInset, getView, getViewAtPosition, getViewCount, getViewIndex, modelToView, setInsets, setParagraphInsets, setParent
Methods declared in 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
-
Constructor Details
-
ZoneView
构造一个ZoneView。- 参数:
-
elem
- 此视图负责的元素 -
axis
- View.X_AXIS或View.Y_AXIS
-
-
Method Details
-
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
当区域加载时,由区域调用。当尝试显示或执行模型/视图转换时,区域处于未加载状态时会发生这种情况。此方法实现为检查是否达到最大区域数,并在达到时卸载最旧的区域。- 参数:
-
zone
- 刚加载的子视图。
-
unloadZone
卸载一个区域(将区域转换为其节省内存的状态)。预期区域代表此视图负责的元素的子元素的子集。因此,默认实现是简单地删除所有子视图。- 参数:
-
zone
- 欲设置为未加载状态的子视图。
-
isZoneLoaded
确定区域是否处于加载状态。预期区域代表此视图负责的元素的子元素的子集。因此,默认实现是如果视图有子视图则返回true。参数zone为子视图。- 参数:
-
zone
- 区域 - 返回:
- 区域是否处于加载状态。
-
createZone
创建一个视图来表示模型中给定范围内的区域(应该在此对象责任范围内的范围内)。这是由区域管理逻辑调用以创建新区域。子类可以通过更改此方法来提供不同的区域实现。- 参数:
-
p0
- 所需区域的起始位置。这应该>= getStartOffset()且< getEndOffset()。此值还应< p1。 -
p1
- 所需区域的结束位置。这应该> getStartOffset()且<= getEndOffset()。此值还应> p0。 - 返回:
- 用于表示模型中给定范围内的区域的视图
-
loadChildren
加载所有子视图以初始化视图。这由setParent方法调用。重新实现为不直接加载任何子视图(因为它们由区域创建)。此方法创建初始区域集。但是,直到尝试显示它们或执行模型/视图坐标转换时,区域实际上并不会被填充。- 覆盖:
-
loadChildren
在类CompositeView
- 参数:
-
f
- 视图工厂 - 参见:
-
getViewIndexAtPosition
protected int getViewIndexAtPosition(int pos) 返回表示模型中给定位置的子视图索引。- 覆盖:
-
getViewIndexAtPosition
在类CompositeView
- 参数:
-
pos
- 位置>= 0 - 返回:
- 表示给定位置的视图的索引,如果没有视图表示该位置则返回-1
-
updateChildren
超类行为将尝试更新子视图,但在这种情况下不希望这样,因为子视图是区域,不会直接受到与关联元素的更改的影响。重新实现为不执行任何操作并返回false。- 覆盖:
-
updateChildren
在类View
- 参数:
-
ec
- 此视图负责的元素的更改信息。如果调用此方法,则此值不应为null
-
e
- 关联文档的更改信息 -
f
- 用于构建子视图的工厂 - 返回:
- 子视图是否表示此视图负责的元素的子元素。某些视图创建代表其负责的元素部分的子视图,应返回false。此信息用于确定是否应将添加元素范围内的视图转发到或不转发到
- 参见:
-
insertUpdate
通知在文档中的一个此视图负责的位置插入了某些内容。这在很大程度上委托给超类,但重新实现为更新相关区域(即确定是否需要将区域分割为2个或更多个区域)。- 覆盖:
-
insertUpdate
在类中的覆盖View
- 参数:
-
changes
- 关联文档中的更改信息 -
a
- 视图的当前分配 -
f
- 如果视图有子项,则用于重建的工厂 - 参见:
-
removeUpdate
给出通知,指出文档中的某些内容已从此视图负责的位置中删除。这在很大程度上委托给超类,但被重新实现以更新相关区域(即确定是否需要删除区域或与另一个区域合并)。- 覆盖:
-
removeUpdate
在类中的覆盖View
- 参数:
-
changes
- 关联文档中的更改信息 -
a
- 视图的当前分配 -
f
- 如果视图有子项,则用于重建的工厂 - 参见:
-