- java.lang.Object
-
- javax.swing.text.View
-
- javax.swing.text.CompositeView
-
- javax.swing.text.BoxView
-
- javax.swing.text.ZoneView
-
- 实现的所有接口
-
SwingConstants
public class ZoneView extends BoxView
ZoneView是一种View实现,它创建的区域在显示或模型/视图转换需要之前不会创建或存储子视图。 通过仅针对被主动查看/编辑的区域构建视图对象,这使得对于所表示的模型非常大的情况,能够显着减少存储器消耗。 可以以某种方式估计子项的大小,或者仅与保存的结果异步计算。ZoneView扩展BoxView以提供一个为其子项实现区域的框。 这些区域是特殊的View实现(此类实例的子代),它们仅代表ZoneView实例负责的模型的一部分。 在尝试显示子视图之前,这些区域不会创建子视图。 盒形视图非常适合这种情况,因为:
- 框是一个使用频繁的视图,并且具有提供此行为的框提供了将行为从视图工厂插入视图层次结构的大量机会。
- 盒子在一个方向上平铺,因此很容易以可靠的方式将它们分成区域。
- 框通常与模型有简单的关系(即它们创建直接表示子元素的子视图)。
- 盒子比其他一些形状更容易估计大小。
默认行为由两个属性maxZoneSize和maxZonesLoaded控制。 将maxZoneSize设置为Integer.MAX_VALUE会导致仅创建一个区域。 这将有效地将视图转换为装饰器模式的实现。 将maxZonesLoaded设置为Integer.MAX_VALUE值将导致区域永远不会被卸载。 为简单起见,区域是在由视图负责的元素的子元素表示的边界上创建的。 区域可以是任何View实现,但默认实现基于AsyncBoxView,它有效地支持相当大的区域。
- 从以下版本开始:
- 1.3
- 另请参见:
-
View
-
-
字段汇总
-
声明的属性在类 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
-
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 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.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
-
声明方法的类 javax.swing.text.CompositeView
getBottomInset, getInsideAllocation, getLeftInset, getNextEastWestVisualPositionFrom, getNextNorthSouthVisualPositionFrom, getNextVisualPositionFrom, getRightInset, getTopInset, getView, getViewAtPosition, getViewCount, getViewIndex, modelToView, setInsets, setParagraphInsets, setParent
-
声明方法的类 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
- 要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
应该是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)
-
-