Module  java.desktop
软件包  javax.swing.text

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

      • 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方法调用的。 这被重新实现为不直接加载任何孩子(因为它们是由区域创建的)。 此方法创建初始区域集。 然而,区域实际上并没有被填充,直到尝试显示它们或进行模型/视图坐标转换。
        重写:
        loadChildrenCompositeView
        参数
        f - 视图工厂
        另请参见:
        CompositeView.setParent(javax.swing.text.View)
      • getViewIndexAtPosition

        protected int getViewIndexAtPosition​(int pos)
        返回表示模型中给定位置的子视图索引。
        重写:
        getViewIndexAtPositionCompositeView
        参数
        pos - 位置> = 0
        结果
        表示给定位置的视图的索引,如果没有视图表示该位置,则为-1