模块 java.desktop

类 AsyncBoxView

java.lang.Object
javax.swing.text.View
javax.swing.text.AsyncBoxView
所有已实现的接口:
SwingConstants

public class AsyncBoxView extends View
一个异步布局的盒子。这有助于通过不对其进行任何布局来保持 GUI 事件线程的移动。布局是在子视图上的操作粒度上完成的。在为布局的某个部分(可能耗时的操作)访问每个子视图后,可以放弃剩余的任务,或者可以接手新的更高优先级的任务(即为同步请求或可见区域提供服务)。

在访问子视图时,会在关联文档上获取读锁,以便模型在访问时保持稳定。

自从:
1.3
  • 字段详细信息

    • locator

      protected AsyncBoxView.ChildLocator  locator
      管理子项偏移量的对象。管理子位置的所有锁定都在此对象上。
  • 构造方法详细信息

    • AsyncBoxView

      public AsyncBoxView(Element  elem, int axis)
      构造一个进行异步布局的框视图。
      参数:
      elem - 要表示的模型元素
      axis - 平铺的轴。这可以是 X_AXIS 或 Y_AXIS。
  • 方法详情

    • getMajorAxis

      public int getMajorAxis()
      获取主轴(子级平铺的轴)。这将具有 X_AXIS 或 Y_AXIS 的值。
      返回:
      长轴
    • getMinorAxis

      public int getMinorAxis()
      获取短轴(与平铺轴正交的轴)。这将具有 X_AXIS 或 Y_AXIS 的值。
      返回:
      短轴
    • getTopInset

      public float getTopInset()
      获取视图周围边距的顶部。
      返回:
      视图周围边距的顶部
    • setTopInset

      public void setTopInset(float i)
      设置视图周围边距的顶部。
      参数:
      i - insets的值
    • getBottomInset

      public float getBottomInset()
      获取视图周围边距的底部。
      返回:
      视图周围边距的底部
    • setBottomInset

      public void setBottomInset(float i)
      设置视图周围边距的底部。
      参数:
      i - insets的值
    • getLeftInset

      public float getLeftInset()
      获取视图周围边距的左侧部分。
      返回:
      视图周围边距的左侧部分
    • setLeftInset

      public void setLeftInset(float i)
      设置视图周围边距的左侧部分。
      参数:
      i - insets的值
    • getRightInset

      public float getRightInset()
      获取视图周围边距的正确部分。
      返回:
      视图周围边距的右侧部分
    • setRightInset

      public void setRightInset(float i)
      设置视图周围边距的右侧部分。
      参数:
      i - insets的值
    • getInsetSpan

      protected float getInsetSpan(int axis)
      沿insets占据的轴获取跨度。
      参数:
      axis - 确定总内插的轴,X_AXIS 或 Y_AXIS。
      返回:
      insets占据的沿轴的跨度
      自从:
      1.4
    • setEstimatedMajorSpan

      protected void setEstimatedMajorSpan(boolean isEstimated)
      设置 estimatedMajorSpan 属性以确定是否应将主要跨度视为正在估计。如果此属性为真,则沿长轴的 setSize 值将更改沿长轴的要求,增量更改将被忽略,直到所有子项都已更新(这将导致该属性自动设置为假)。如果该属性为假,则 majorSpan 的值将被认为是准确的,并且增量更改将在计算时添加到总数中。
      参数:
      isEstimated - estimatedMajorSpan 属性的新值
      自从:
      1.4
    • getEstimatedMajorSpan

      protected boolean getEstimatedMajorSpan()
      目前估计的主要跨度是多少?
      返回:
      当前估计的主要跨度是否
      自从:
      1.4
    • getChildState

      protected AsyncBoxView.ChildState  getChildState(int index)
      获取表示给定索引处子项的布局状态的对象。
      参数:
      index - 子索引。这应该是一个 >= 0 且 < getViewCount() 的值。
      返回:
      表示给定索引处子级的布局状态的对象
    • getLayoutQueue

      protected LayoutQueue  getLayoutQueue()
      获取队列以用于布局。
      返回:
      用于布局的队列
    • createChildState

      protected AsyncBoxView.ChildState  createChildState(View  v)
      通过此方法创建新的 ChildState 记录,以允许子类扩展 ChildState 记录以执行/保存更多操作。
      参数:
      v - 视图
      返回:
      新的子状态
    • majorRequirementChange

      protected void majorRequirementChange(AsyncBoxView.ChildState  cs, float delta)
      要求沿长轴发生了变化。当线程完成获取子视图新首选项时,它由为给定 ChildState 对象进行布局的线程调用。通常这将是布局线程,但如果它试图立即更新某些内容(例如执行模型/视图转换),则可能是事件线程。

      这是为了将主轴标记为已更改,以便将来检查是否需要将需求发布到父视图时将考虑主轴。如果未估计沿主轴的跨度,则由给定的增量更新以反映增量变化。如果估计主要跨度,则忽略增量。

      参数:
      cs - 子状态
      delta - 三角洲
    • minorRequirementChange

      protected void minorRequirementChange(AsyncBoxView.ChildState  cs)
      要求沿短轴发生变化。当线程完成获取子视图新首选项时,它由为给定 ChildState 对象进行布局的线程调用。通常这将是布局线程,但如果它试图立即更新某些内容(例如执行模型/视图转换),则可能是 GUI 线程。
      参数:
      cs - 子状态
    • flushRequirementChanges

      protected void flushRequirementChanges()
      将首选项中的更改向上发布到父视图。这通常由布局线程调用。
    • replace

      public void replace(int offset, int length, View [] views)
      调用超类更新子视图,并更新子视图的状态记录。预期在模型上持有写锁时调用此函数,以便不会发生与布局线程的交互(即布局线程在执行任何操作之前获取读锁)。
      重写:
      replace 在类 View
      参数:
      offset - 子视图的起始偏移 >= 0
      length - 要替换的现有视图数 >= 0
      views - 要插入的子视图
    • loadChildren

      protected void loadChildren(ViewFactory  f)
      加载所有子项以初始化视图。这是由 setParent 方法调用的。子类可以重新实现它以不同的方式初始化它们的子视图。默认实现为每个子元素创建一个子视图。

      通常,在更改子项时,会在 Document 上持有写锁,以确保渲染和布局线程的安全。异常是当视图被初始化为表示现有元素时(通过此方法),因此在我们初始化时它会同步以排除 preferenceChanged。

      参数:
      f - 视图工厂
      参见:
    • getViewIndexAtPosition

      protected int getViewIndexAtPosition(int pos, Position.Bias  b)
      获取表示模型中给定位置的子视图索引。这是为了在每个子元素都有一个子视图的情况下获取视图。
      参数:
      pos - 位置 >= 0
      b - 位置偏差
      返回:
      表示给定位置的视图的索引,如果没有视图表示该位置,则为 -1
    • updateLayout

      protected void updateLayout(DocumentEvent.ElementChange  ec, DocumentEvent  e, Shape  a)
      更新布局以响应从模型接收到的更改通知。这是为了记录 ChildLocator 上的更改,以便正确计算子项的偏移量。
      重写:
      updateLayout 在类 View
      参数:
      ec - 对此视图负责的元素的更改(如果没有更改,则可能为 null)。
      e - 来自关联文档的更改信息
      a - 视图的当前分配
      参见:
    • setParent

      public void setParent(View  parent)
      设置视图的父级。如果此视图还没有子项,则重新实现它以提供超类行为以及调用 loadChildren 方法。不应在构造函数中加载子项,因为设置父项的行为可能会导致他们尝试向上搜索层次结构(例如获取托管容器)。如果此视图有子视图(视图正在从视图层次结构中的一个位置移动到另一个位置),则不会调用 loadChildren 方法。
      重写:
      setParent 在类 View
      参数:
      parent - 视图的父视图,如果没有则为 null
    • preferenceChanged

      public void preferenceChanged(View  child, boolean width, boolean height)
      子视图可以在父视图上调用它以指示首选项已更改并且应该重新考虑布局。这被重新实现以在布局线程上排队新工作。此方法通过子线程从多个线程获取消息。
      重写:
      preferenceChanged 在类 View
      参数:
      child - 子视图
      width - 如果宽度首选项已更改,则为真
      height - 如果高度偏好已更改,则为真
      参见:
    • setSize

      public void setSize(float width, float height)
      设置视图的大小。如果视图缓存任何布局信息,这应该会导致视图布局。

      由于主轴是异步更新的,并且应该是平铺子项的总和,因此忽略主轴的调用。由于短轴是灵活的,如果次跨度发生变化,工作会排队调整子项的大小。

      重写:
      setSize 在类 View
      参数:
      width - 宽度 >= 0
      height - 高度 >= 0
    • paint

      public void paint(Graphics  g, Shape  alloc)
      使用给定的分配和渲染表面渲染视图。

      这是为了确定要渲染的所需区域(即未剪切区域)是否是最新的。如果是最新的,则呈现子项。如果不是最新的,构建所需区域的任务将作为高优先级任务放置在布局队列中。如果准备好,这会通过渲染来保持事件线程移动,如果没有准备好则推迟到稍后的时间(因为可以重新安排绘制请求)。

      指定者:
      paint 在类 View
      参数:
      g - 要使用的渲染表面
      alloc - 要渲染到的分配区域
      参见:
    • getPreferredSpan

      public float getPreferredSpan(int axis)
      确定此视图沿轴的首选跨度。
      指定者:
      getPreferredSpan 在类 View
      参数:
      axis - 可以是 View.X_AXIS 或 View.Y_AXIS
      返回:
      视图要渲染到 >= 0 的跨度。通常,视图被告知要渲染到返回的跨度中,尽管不能保证。父级可以选择调整大小或打破视图。
      抛出:
      IllegalArgumentException - 对于无效的轴类型
    • getMinimumSpan

      public float getMinimumSpan(int axis)
      确定此视图沿轴的最小跨度。
      重写:
      getMinimumSpan 在类 View
      参数:
      axis - 可以是 View.X_AXIS 或 View.Y_AXIS
      返回:
      视图要渲染到 >= 0 的跨度。通常,视图被告知要渲染到返回的跨度中,尽管不能保证。父级可以选择调整大小或打破视图。
      抛出:
      IllegalArgumentException - 对于无效的轴类型
      参见:
    • getMaximumSpan

      public float getMaximumSpan(int axis)
      确定此视图沿轴的最大跨度。
      重写:
      getMaximumSpan 在类 View
      参数:
      axis - 可以是 View.X_AXIS 或 View.Y_AXIS
      返回:
      视图要渲染到 >= 0 的跨度。通常,视图被告知要渲染到返回的跨度中,尽管不能保证。父级可以选择调整大小或打破视图。
      抛出:
      IllegalArgumentException - 对于无效的轴类型
      参见:
    • getViewCount

      public int getViewCount()
      返回此视图中的视图数。由于默认不是复合视图,因此返回 0。
      重写:
      getViewCount 在类 View
      返回:
      观看次数 >= 0
      参见:
    • getView

      public View  getView(int n)
      获取第 n 个子视图。由于默认情况下没有子级,因此返回 null。
      重写:
      getView 在类 View
      参数:
      n - 要获取的视图数,>= 0 && < getViewCount()
      返回:
      风景
    • getChildAllocation

      public Shape  getChildAllocation(int index, Shape  a)
      获取给定子视图的分配。这使得能够找出各种视图所在的位置,而无需假设视图存储它们的位置。这将返回 null,因为默认情况下没有任何子视图。
      重写:
      getChildAllocation 在类 View
      参数:
      index - 孩子的索引,>= 0 && < getViewCount()
      a - 分配给这个视图。
      返回:
      分配给子级
    • getViewIndex

      public int getViewIndex(int pos, Position.Bias  b)
      返回表示模型中给定位置的子视图索引。默认情况下,视图没有子项,因此实现返回 -1 以指示任何位置都没有有效的子索引。
      重写:
      getViewIndex 在类 View
      参数:
      pos - 位置 >= 0
      b - 偏差
      返回:
      表示给定位置的视图的索引,如果没有视图表示该位置,则为 -1
      自从:
      1.3
    • modelToView

      public Shape  modelToView(int pos, Shape  a, Position.Bias  b) throws BadLocationException
      提供从文档模型坐标空间到映射到它的视图的坐标空间的映射。
      指定者:
      modelToView 在类 View
      参数:
      pos - 要转换的位置 >= 0
      a - 要渲染到的分配区域
      b - 偏移表示的前一个字符或下一个字符的偏差,以防该位置是两个视图的边界。
      返回:
      返回给定位置的边界框
      抛出:
      BadLocationException - 如果给定位置不代表相关文档中的有效位置
      IllegalArgumentException - 对于无效的偏置参数
      参见:
    • viewToModel

      public int viewToModel(float x, float y, Shape  a, Position.Bias [] biasReturn)
      提供从视图坐标空间到模型的逻辑坐标空间的映射。将填充 biasReturn 参数以指示给定的点更接近模型中的下一个字符或模型中的前一个字符。

      这预计将由 GUI 线程调用,在关联模型上持有读锁。它的实现是为了定位子视图并通过锁定 ChildLocator 对象确定其分配,并通过锁定 ChildState 对象在子视图上调用 viewToModel 以避免与布局线程交互。

      指定者:
      viewToModel 在类 View
      参数:
      x - X 坐标 >= 0
      y - Y 坐标 >= 0
      a - 要渲染到的分配区域
      biasReturn - 返回的偏差
      返回:
      模型中最能代表视图中给定点的位置 >= 0。将填充 biasReturn 参数以指示给定点更接近模型中的下一个字符或模型中的前一个字符。
    • getNextVisualPositionFrom

      public int getNextVisualPositionFrom(int pos, Position.Bias  b, Shape  a, int direction, Position.Bias [] biasRet) throws BadLocationException
      提供一种方法来确定下一个可能放置插入符号的可视化模型位置。某些视图可能不可见,它们可能与模型中的顺序不同,或者它们可能不允许访问模型中的某些位置。该方法可以指定一个位置在 >=0 的范围内进行转换。如果值为-1,将自动计算位置。如果值 < -1,将抛出 BadLocationException
      重写:
      getNextVisualPositionFrom 在类 View
      参数:
      pos - 要转换的位置
      b - 偏差
      a - 要渲染到的分配区域
      direction - 从当前位置开始的方向,可以被认为是通常在键盘上找到的箭头键;这可能是以下之一:
      • SwingConstants.WEST
      • SwingConstants.EAST
      • SwingConstants.NORTH
      • SwingConstants.SOUTH
      biasRet - 包含已检查偏差的数组
      返回:
      模型中最能代表下一个位置视觉位置的位置
      抛出:
      BadLocationException - 给定位置不是文档中的有效位置
      IllegalArgumentException - 如果 direction 无效