模块 java.desktop

类 BoxView

所有已实现的接口:
SwingConstants
已知子类:
BlockView , FlowView , TableView , TableView.TableCell , TableView.TableRow , WrappedPlainView , ZoneView

public class BoxView extends CompositeView
通过沿轴平铺其子项,将其子项排列成盒子形状的视图。该框有点像在 TeX 中找到的框,其中子项对齐,考虑了子项的灵活性等。这是一个构建块,可能有助于表示诸如行、段落、列表、列的集合之类的东西,页面等。子级平铺的轴被认为是主轴。正交轴是短轴。

每个轴的布局由方法 layoutMajorAxislayoutMinorAxis 分别处理。子类可以通过重新实现这些方法来改变布局算法。这些方法将在必要时根据是否存在缓存的布局信息以及缓存是否有效来调用。如果沿轴的给定大小发生变化,或者如果调用 layoutChanged 以强制更新布局,通常会调用这些方法。 layoutChanged 方法使缓存的布局信息无效(如果有的话)。发布到父视图的需求是通过方法 calculateMajorAxisRequirementscalculateMinorAxisRequirements 计算的。如果更改布局算法,则可能需要重新实现这些方法。

  • 构造方法详细信息

    • BoxView

      public BoxView(Element  elem, int axis)
      构造一个 BoxView
      参数:
      elem - 此视图负责的元素
      axis - View.X_AXISView.Y_AXIS
  • 方法详情

    • getAxis

      public int getAxis()
      获取瓦片轴属性。这是子视图平铺所沿的轴。
      返回:
      盒子的主轴,View.X_AXISView.Y_AXIS
      自从:
      1.3
    • setAxis

      public void setAxis(int axis)
      设置平铺轴属性。这是子视图平铺所沿的轴。
      参数:
      axis - View.X_AXISView.Y_AXIS
      自从:
      1.3
    • layoutChanged

      public void layoutChanged(int axis)
      使沿轴的布局无效。如果任何子视图的首选项已更改,则会自动发生这种情况。在某些情况下,当首选项未更改时可能需要重新计算布局。可以通过调用此方法将布局标记为无效。下次在此视图上调用 setSize 方法时(通常是在绘画中),布局将更新。
      参数:
      axis - View.X_AXISView.Y_AXIS
      自从:
      1.3
    • isLayoutValid

      protected boolean isLayoutValid(int axis)
      确定布局是否沿给定轴有效。
      参数:
      axis - View.X_AXISView.Y_AXIS
      返回:
      如果布局沿给定轴有效
      自从:
      1.4
    • paintChild

      protected void paintChild(Graphics  g, Rectangle  alloc, int index)
      画一个子级。默认情况下它就是这样做的,但是子类可以使用它来绘制与子类相关的东西。
      参数:
      g - 图形上下文
      alloc - 要绘制的分配区域
      index - 子索引,>= 0 && < getViewCount()
    • replace

      public void replace(int index, int length, View [] elems)
      使布局无效并调整请求/分配缓存的大小。旧布局仍可访问子分配,但新子分配的偏移量和跨度将为 0。
      重写:
      replace 在类 CompositeView
      参数:
      index - 插入新视图的子视图的起始索引;这应该是一个值 >= 0 且 <= getViewCount
      length - 要删除的现有子视图的数量;这应该是一个值 >= 0 且 <= (getViewCount() - offset)
      elems - 要添加的子视图;此值可以是 null 以指示未添加任何子项(对于删除很有用)
    • forwardUpdate

      protected void forwardUpdate(DocumentEvent.ElementChange  ec, DocumentEvent  e, Shape  a, ViewFactory  f)
      将给定的 DocumentEvent 转发给需要通知模型更改的子视图。如果一个孩子改变了它的要求,并且在转发之前分配是有效的,那么盒子从起始孩子到盒子末端的部分将被重新绘制。
      重写:
      forwardUpdate 在类 View
      参数:
      ec - 对此视图负责的元素的更改(如果没有更改,则可能是 null
      e - 来自关联文档的更改信息
      a - 视图的当前分配
      f - 如果视图有子视图,用于重建的工厂
      自从:
      1.3
      参见:
    • preferenceChanged

      public void preferenceChanged(View  child, boolean width, boolean height)
      这是由子级调用以指示其首选跨度已更改。这是为了丢弃缓存的布局信息,以便在下一次子项需要分配时进行新的计算。
      重写:
      preferenceChanged 在类 View
      参数:
      child - 子视图
      width - 如果宽度首选项应该改变则为真
      height - 如果高度偏好应该改变则为真
      参见:
    • getResizeWeight

      public int getResizeWeight(int axis)
      获取调整大小权重。 0 或更小的值不可调整大小。
      重写:
      getResizeWeight 在类 View
      参数:
      axis - 可能是 View.X_AXISView.Y_AXIS
      返回:
      重量
      抛出:
      IllegalArgumentException - 对于无效轴
    • setSize

      public void setSize(float width, float height)
      设置视图的大小。如果视图缓存任何布局信息,这应该会导致视图布局。这是为了调用带有 insets 内尺寸的布局方法。
      重写:
      setSize 在类 View
      参数:
      width - 宽度 >= 0
      height - 高度 >= 0
    • paint

      public void paint(Graphics  g, Shape  allocation)
      使用给定的渲染表面和该表面上的区域渲染 BoxView。只有与给定 Graphics 的剪辑边界相交的孩子才会被渲染。
      指定者:
      paint 在类 View
      参数:
      g - 要使用的渲染表面
      allocation - 要渲染到的分配区域
      参见:
    • getChildAllocation

      public Shape  getChildAllocation(int index, Shape  a)
      获取给定子视图的分配。这使得能够找出各种视图所在的位置。如果布局无效,则实现返回 null,否则执行超类行为。
      重写:
      getChildAllocation 在类 CompositeView
      参数:
      index - 孩子的索引,>= 0 && > getViewCount()
      a - 分配给这个视图
      返回:
      分配给孩子;或者 null 如果 anull ;或者 null 如果布局无效
    • modelToView

      public Shape  modelToView(int pos, Shape  a, Position.Bias  b) throws BadLocationException
      提供从文档模型坐标空间到映射到它的视图的坐标空间的映射。这确保在调用超类之前分配是有效的。
      重写:
      modelToView 在类 CompositeView
      参数:
      pos - 要转换的位置 >= 0
      a - 要渲染到的分配区域
      b - Position.Bias.ForwardPosition.Bias.Backward 的偏置值
      返回:
      给定位置的边界框
      抛出:
      BadLocationException - 如果给定位置不代表相关文档中的有效位置
      参见:
    • viewToModel

      public int viewToModel(float x, float y, Shape  a, Position.Bias [] bias)
      提供从视图坐标空间到模型的逻辑坐标空间的映射。
      重写:
      viewToModel 在类 CompositeView
      参数:
      x - 要转换的视图位置的 x 坐标 >= 0
      y - 要转换的视图位置的 y 坐标 >= 0
      a - 要渲染到的分配区域
      bias - Position.Bias.ForwardPosition.Bias.Backward
      返回:
      模型中最能代表视图中给定点的位置 >= 0
      参见:
    • getAlignment

      public float getAlignment(int axis)
      确定此视图沿轴的所需对齐方式。这是为了给出定位子级所需的总对齐方式,对齐点沿着与正在平铺的轴正交的轴排列。平铺的轴将要求居中(即 0.5f)。
      重写:
      getAlignment 在类 View
      参数:
      axis - 可能是 View.X_AXISView.Y_AXIS
      返回:
      所需的对齐 >= 0.0f && <= 1.0f;这应该是一个介于 0.0 和 1.0 之间的值,其中 0 表示对齐原点,1.0 表示对齐远离原点的整个跨度; 0.5 的对齐将是视图的中心
      抛出:
      IllegalArgumentException - 对于无效轴
    • getPreferredSpan

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

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

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

      protected boolean isAllocationValid()
      子级的拨款还有效吗?
      返回:
      如果分配仍然有效则为真
    • isBefore

      protected boolean isBefore(int x, int y, Rectangle  innerAlloc)
      确定点是否落在分配的区域之前。
      指定者:
      isBefore 在类 CompositeView
      参数:
      x - X 坐标 >= 0
      y - Y 坐标 >= 0
      innerAlloc - 分配的区域;这是insets内部的区域
      返回:
      如果该点位于该区域之前,则为 true 否则为 false
    • isAfter

      protected boolean isAfter(int x, int y, Rectangle  innerAlloc)
      确定点是否落在分配的区域之后。
      指定者:
      isAfter 在类 CompositeView
      参数:
      x - X 坐标 >= 0
      y - Y 坐标 >= 0
      innerAlloc - 分配的区域;这是insets内部的区域
      返回:
      如果该点位于该区域之后,则为 true 否则为 false
    • getViewAtPoint

      protected View  getViewAtPoint(int x, int y, Rectangle  alloc)
      获取给定坐标处的子视图。
      指定者:
      getViewAtPoint 在类 CompositeView
      参数:
      x - X 坐标 >= 0
      y - Y 坐标 >= 0
      alloc - 父母在进入时的内部分配,应该在退出时更改为孩子的分配
      返回:
      风景
    • childAllocation

      protected void childAllocation(int index, Rectangle  alloc)
      为子视图分配区域。
      指定者:
      childAllocation 在类 CompositeView
      参数:
      index - 要分配的子视图的索引,>= 0 && < getViewCount()
      alloc - 分配的区域
    • layout

      protected void layout(int width, int height)
      在盒子上进行布局
      参数:
      width - 宽度(insets内部)>= 0
      height - 高度(insets内部)>= 0
    • getWidth

      public int getWidth()
      返回框的当前宽度。这是上次分配的宽度。
      返回:
      框的当前宽度
    • getHeight

      public int getHeight()
      返回框的当前高度。这是上次分配的高度。
      返回:
      盒子的当前高度
    • layoutMajorAxis

      protected void layoutMajorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
      对框的主轴(即它代表的轴)执行布局。布局的结果(每个子项的偏移量和跨度)被放置在给定的数组中,这些数组表示沿主轴分配给子项。
      参数:
      targetSpan - 给视图的总跨度,将用于布局子视图
      axis - 正在布置的轴
      offsets - 每个子视图距视图原点的偏移量;这是一个返回值,由这个方法的实现填充
      spans - 每个子视图的跨度;这是一个返回值,由这个方法的实现填充
    • layoutMinorAxis

      protected void layoutMinorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
      对盒子的短轴进行布局(即垂直于它所代表的轴的轴)。布局的结果(每个子级的偏移量和跨度)被放置在给定的数组中,这些数组表示沿短轴分配给子级的数组。
      参数:
      targetSpan - 给视图的总跨度,将用于布局子视图
      axis - 正在布置的轴
      offsets - 每个子视图距视图原点的偏移量;这是一个返回值,由这个方法的实现填充
      spans - 每个子视图的跨度;这是一个返回值,由这个方法的实现填充
    • calculateMajorAxisRequirements

      protected SizeRequirements  calculateMajorAxisRequirements(int axis, SizeRequirements  r)
      计算长轴 axis 的尺寸要求。
      参数:
      axis - 正在研究的轴
      r - SizeRequirements 对象;如果 null 将被创建
      返回:
      新初始化的 SizeRequirements 对象
      参见:
    • calculateMinorAxisRequirements

      protected SizeRequirements  calculateMinorAxisRequirements(int axis, SizeRequirements  r)
      计算短轴 axis 的尺寸要求。
      参数:
      axis - 正在研究的轴
      r - SizeRequirements 对象;如果 null 将被创建
      返回:
      新初始化的 SizeRequirements 对象
      参见:
    • baselineLayout

      protected void baselineLayout(int targetSpan, int axis, int[] offsets, int[] spans)
      在给定 targetSpan 的情况下计算此 BoxView 中每个子视图的位置和范围,这是我们必须使用的区域的宽度(或高度)。
      参数:
      targetSpan - 给视图的总跨度,将用于布局子视图
      axis - 正在研究的轴,View.X_AXISView.Y_AXIS
      offsets - 由此方法填充的空数组,其值指定每个子视图的位置
      spans - 由此方法填充的空数组,其值指定每个子视图的范围
    • baselineRequirements

      protected SizeRequirements  baselineRequirements(int axis, SizeRequirements  r)
      通过检查每个子视图的大小来计算此 BoxView 的大小要求。
      参数:
      axis - 正在研究的轴
      r - SizeRequirements 对象;如果 null 将被创建
      返回:
      新初始化的 SizeRequirements 对象
    • getOffset

      protected int getOffset(int axis, int childIndex)
      获取特定子项当前布局的偏移量。
      参数:
      axis - 正在研究的轴
      childIndex - 请求的孩子的索引
      返回:
      指定子级的偏移量(位置)
    • getSpan

      protected int getSpan(int axis, int childIndex)
      获取特定子项当前布局的跨度。
      参数:
      axis - 正在研究的轴
      childIndex - 请求的孩子的索引
      返回:
      指定子级的跨度(宽度或高度)
    • flipEastAndWestAtEnds

      protected boolean flipEastAndWestAtEnds(int position, Position.Bias  bias)
      确定下一个视图的放置方向。考虑索引 n 处的视图。通常 View 是从左到右排列的,因此到 EAST 的 View 将位于索引 n + 1,而到 WEST 的 View 将位于索引 n - 1。在某些情况下,例如双向文本, 到 EAST 的 View 可能不在索引 n + 1 处,而是在索引 n - 1 处,或者到 WEST 的 View 不在索引 n - 1 处,而是在索引 n + 1 处。在这种情况下,方法将返回 true,表示 View 是按降序排列的。否则该方法将返回 false,表示 View 是按升序排列的。

      如果接收器将其 View 沿着 Y_AXIS 放置,这将返回在负责渲染 positionbiasView 上调用相同方法的值。否则这将返回 false。

      重写:
      flipEastAndWestAtEnds 在类 CompositeView
      参数:
      position - 在模型中的位置
      bias - Position.Bias.ForwardPosition.Bias.Backward
      返回:
      如果 View 周围的 View 响应渲染 positionbias 是按降序排列的,则为真;否则为假