Module java.desktop
Package 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
参见:
  • Constructor Details

    • ZoneView

      public ZoneView(Element elem, int axis)
      构造一个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

      protected void zoneWasLoaded(View zone)
      当区域加载时,由区域调用。当尝试显示或执行模型/视图转换时,区域处于未加载状态时会发生这种情况。此方法实现为检查是否达到最大区域数,并在达到时卸载最旧的区域。
      参数:
      zone - 刚加载的子视图。
    • unloadZone

      protected void unloadZone(View zone)
      卸载一个区域(将区域转换为其节省内存的状态)。预期区域代表此视图负责的元素的子元素的子集。因此,默认实现是简单地删除所有子视图。
      参数:
      zone - 欲设置为未加载状态的子视图。
    • isZoneLoaded

      protected boolean isZoneLoaded(View zone)
      确定区域是否处于加载状态。预期区域代表此视图负责的元素的子元素的子集。因此,默认实现是如果视图有子视图则返回true。参数zone为子视图。
      参数:
      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 - 视图工厂
      参见:
    • 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。此信息用于确定是否应将添加元素范围内的视图转发到或不转发到
      参见:
    • insertUpdate

      public void insertUpdate(DocumentEvent changes, Shape a, ViewFactory f)
      通知在文档中的一个此视图负责的位置插入了某些内容。这在很大程度上委托给超类,但重新实现为更新相关区域(即确定是否需要将区域分割为2个或更多个区域)。
      覆盖:
      insertUpdate 在类中的覆盖 View
      参数:
      changes - 关联文档中的更改信息
      a - 视图的当前分配
      f - 如果视图有子项,则用于重建的工厂
      参见:
    • removeUpdate

      public void removeUpdate(DocumentEvent changes, Shape a, ViewFactory f)
      给出通知,指出文档中的某些内容已从此视图负责的位置中删除。这在很大程度上委托给超类,但被重新实现以更新相关区域(即确定是否需要删除区域或与另一个区域合并)。
      覆盖:
      removeUpdate 在类中的覆盖 View
      参数:
      changes - 关联文档中的更改信息
      a - 视图的当前分配
      f - 如果视图有子项,则用于重建的工厂
      参见: