模块  java.desktop
软件包  javax.swing.text

Class 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
    • 构造方法详细信息

      • 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)
        返回表示模型中给定位置的子视图索引。
        重写:
        getViewIndexAtPositionCompositeView
        参数
        pos - 位置> = 0
        结果
        表示给定位置的视图的索引,如果没有视图表示该位置,则返回-1