Module java.desktop
Package javax.swing.text

Class CompositeView

java.lang.Object
javax.swing.text.View
javax.swing.text.CompositeView
所有已实现的接口:
SwingConstants
直接已知的子类:
BoxView

public abstract class CompositeView extends View
CompositeView是一个抽象的View实现,用于管理一个或多个子视图。(请注意,CompositeView旨在管理相对较少数量的子视图。)CompositeView旨在用作View实现的起点,例如BoxView,它将包含子View。希望管理子View集合的子类应该使用replace(int, int, javax.swing.text.View[])方法。由于ViewDocumentListener通知期间调用replace,通常不需要直接调用replace

虽然CompositeView不对其子View施加布局策略,但它允许插入将包含的子View。可以通过setInsets(short, short, short, short)setParagraphInsets(javax.swing.text.AttributeSet)来设置插入。

除了View的抽象方法外,CompositeView的子类还需要重写:

  • Constructor Details

    • CompositeView

      public CompositeView(Element elem)
      为给定元素构造一个CompositeView
      参数:
      elem - 负责此视图的元素
  • Method Details

    • loadChildren

      protected void loadChildren(ViewFactory f)
      加载所有子项以初始化视图。这由setParent(javax.swing.text.View)方法调用。子类可以重新实现此方法以不同的方式初始化其子视图。默认实现为每个子元素创建一个子视图。
      参数:
      f - 视图工厂
      参见:
    • setParent

      public void setParent(View parent)
      设置视图的父级。这被重新实现以提供超类行为,并在此视图尚未具有子项时调用loadChildren方法。不应在构造函数中加载子项,因为设置父级可能导致它们尝试搜索层次结构(例如,获取托管Container)。如果此视图具有子项(将视图从视图层次结构中的一个位置移动到另一个位置),则不会调用loadChildren方法。
      覆盖:
      setParent 在类 View
      参数:
      parent - 视图的父级,如果没有则为null
    • getViewCount

      public int getViewCount()
      返回此视图的子视图数量。
      覆盖:
      getViewCount 在类 View
      返回:
      视图数量 >= 0
      参见:
    • getView

      public View getView(int n)
      返回此容器中的第n个视图。
      覆盖:
      getView 在类 View
      参数:
      n - 所需视图的编号,>= 0 && < getViewCount()
      返回:
      索引为n的视图
    • replace

      public void replace(int offset, int length, View[] views)
      替换子视图。如果没有要移除的视图,则此操作将充当插入操作。如果没有要添加的视图,则此操作将充当移除操作。将要移除的视图的父级设置为null,并删除对它们的内部引用,以便它们可以被垃圾回收。
      覆盖:
      replace 在类 View
      参数:
      offset - 插入新视图的子视图的起始索引;>= 0且<= getViewCount
      length - 要移除的现有子视图数量;这应该是一个值>= 0且<=(getViewCount() - offset)
      views - 要添加的子视图;此值可以为null以指示不添加任何子项(有助于移除)
    • getChildAllocation

      public Shape getChildAllocation(int index, Shape a)
      获取给定子视图的分配以进行渲染。这使得可以找出各种视图的位置。
      覆盖:
      getChildAllocation 在类 View
      参数:
      index - 子视图的索引,>= 0 && < getViewCount()
      a - 分配给此视图的分配
      返回:
      子视图的分配
    • modelToView

      public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException
      提供从文档模型坐标空间到其映射视图的坐标空间的映射。
      指定者:
      modelToView 在类 View
      参数:
      pos - 要转换的位置 >= 0
      a - 要渲染到的分配区域
      b - Position.Bias.ForwardPosition.Bias.Backward的偏移值
      返回:
      给定位置的边界框
      抛出:
      BadLocationException - 如果给定位置在关联文档中不表示有效位置
      参见:
    • modelToView

      public Shape modelToView(int p0, Position.Bias b0, int p1, Position.Bias b1, Shape a) throws BadLocationException
      提供从文档模型坐标空间到其映射视图的坐标空间的映射。
      覆盖:
      modelToView 在类 View
      参数:
      p0 - 要转换的位置 >= 0
      b0 - 与由p0表示的前一个字符或下一个字符的偏好,如果位置是两个视图的边界,则为Position.Bias.ForwardPosition.Bias.Backward
      p1 - 要转换的位置 >= 0
      b1 - 与由p1表示的前一个字符或下一个字符的偏好,如果位置是两个视图的边界
      a - 要渲染的分配区域
      返回:
      返回给定位置的边界框
      抛出:
      BadLocationException - 如果给定位置不表示关联文档中的有效位置
      IllegalArgumentException - 对于无效的偏好参数
      参见:
    • viewToModel

      public int viewToModel(float x, float y, Shape a, Position.Bias[] bias)
      提供了从视图坐标空间到模型的逻辑坐标空间的映射。
      指定者:
      viewToModel 在类 View
      参数:
      x - 要转换的视图位置的x坐标 >= 0
      y - 要转换的视图位置的y坐标 >= 0
      a - 要渲染的分配区域
      bias - 要么是Position.Bias.Forward,要么是Position.Bias.Backward
      返回:
      最好表示视图中给定点的模型位置 >= 0
      参见:
    • getNextVisualPositionFrom

      public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet) throws BadLocationException
      提供了一种确定下一个可能放置插入符号的视觉上表示的模型位置的方法。一些视图可能不可见,它们可能不按照模型中找到的顺序排列,或者它们可能根本不允许访问模型中的某些位置。这是getNextNorthSouthVisualPositionFrom(int, javax.swing.text.Position.Bias, java.awt.Shape, int, javax.swing.text.Position.Bias[])getNextEastWestVisualPositionFrom(int, javax.swing.text.Position.Bias, java.awt.Shape, int, javax.swing.text.Position.Bias[])的便利方法。此方法使得可以在范围内指定要转换的位置。如果值为-1,则将自动计算位置。如果值< -1,则将抛出BadLocationException
      覆盖:
      getNextVisualPositionFrom 在类 View
      参数:
      pos - 要转换的位置
      b - 一个偏好值,要么是Position.Bias.Forward,要么是Position.Bias.Backward
      a - 要渲染的分配区域
      direction - 从当前位置开始的方向,可以认为是键盘上通常找到的箭头键; 这可能是以下之一:
      • SwingConstants.WEST
      • SwingConstants.EAST
      • SwingConstants.NORTH
      • SwingConstants.SOUTH
      biasRet - 包含已检查的偏好的数组
      返回:
      最好表示下一个位置视觉位置的模型位置
      抛出:
      BadLocationException - 给定位置不是文档中的有效位置
      IllegalArgumentException - 如果direction无效
    • getViewIndex

      public int getViewIndex(int pos, Position.Bias b)
      返回表示模型中给定位置的子视图索引。这是为了向后兼容而实现的,调用getViewIndexByPosition方法。
      覆盖:
      getViewIndex 在类 View
      参数:
      pos - 位置 >= 0
      b - 偏好
      返回:
      表示给定位置的视图的索引,如果没有视图表示该位置,则返回-1
      自:
      1.3
    • isBefore

      protected abstract boolean isBefore(int x, int y, Rectangle alloc)
      测试一个点是否位于矩形范围之前。
      参数:
      x - X坐标 >= 0
      y - Y坐标 >= 0
      alloc - 矩形
      返回:
      如果点在指定范围之前,则为true
    • isAfter

      protected abstract boolean isAfter(int x, int y, Rectangle alloc)
      测试一个点是否位于矩形范围之后。
      参数:
      x - X坐标 >= 0
      y - Y坐标 >= 0
      alloc - 矩形
      返回:
      如果点在指定范围之后,则为true
    • getViewAtPoint

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

      protected abstract void childAllocation(int index, Rectangle a)
      返回给定子视图的分配。
      参数:
      index - 子视图的索引,>= 0 && < getViewCount()
      a - 进入时盒子内部的分配,退出时为索引处的子视图的分配。
    • getViewAtPosition

      protected View getViewAtPosition(int pos, Rectangle a)
      获取表示模型中给定位置的子视图。这是为了在每个子元素都有一个子视图的情况下获取视图而实现的。
      参数:
      pos - 位置 >= 0
      a - 进入时盒子内部的分配,退出时包含位置的视图的分配
      返回:
      表示给定位置的视图,如果没有则为null
    • getViewIndexAtPosition

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

      protected Rectangle getInsideAllocation(Shape a)
      将给定视图的不可变分配转换为表示内部分配的可变分配(即给定分配的边界,去除顶部、左侧、底部和右侧的插图)。预期返回的值将进一步变异以表示对子视图的分配。这是为了重用一个实例变量,因此避免创建过多的矩形。通常调用此方法的结果将被传递给childAllocation方法。
      参数:
      a - 给定给视图的分配
      返回:
      表示去除所有边距后视图内部的分配; 如果给定的分配为null,则返回值为null
    • setParagraphInsets

      protected void setParagraphInsets(AttributeSet attr)
      根据给定属性中指定的段落属性设置插图。
      参数:
      attr - 属性
    • setInsets

      protected void setInsets(short top, short left, short bottom, short right)
      为视图设置插图。
      参数:
      top - 顶部插图 >= 0
      left - 左侧插图 >= 0
      bottom - 底部插图 >= 0
      right - 右侧插图 >= 0
    • getLeftInset

      protected short getLeftInset()
      获取左侧插图。
      返回:
      插图 >= 0
    • getRightInset

      protected short getRightInset()
      获取右侧插图。
      返回:
      插图 >= 0
    • getTopInset

      protected short getTopInset()
      获取顶部插图。
      返回:
      插图 >= 0
    • getBottomInset

      protected short getBottomInset()
      获取底部插图。
      返回:
      插图 >= 0
    • getNextNorthSouthVisualPositionFrom

      protected int getNextNorthSouthVisualPositionFrom(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet) throws BadLocationException
      返回光标的下一个视觉位置,可以是向北或向南的方向。
      参数:
      pos - 要转换的位置 >= 0
      b - 一个偏置值,可以是Position.Bias.ForwardPosition.Bias.Backward
      a - 要渲染的分配区域
      direction - 从当前位置开始的方向,可以理解为键盘上通常找到的箭头键;可能是以下之一:
      • SwingConstants.NORTH
      • SwingConstants.SOUTH
      biasRet - 包含被检查的偏置的数组
      返回:
      在模型中最能代表下一个北方或南方位置的位置
      抛出:
      BadLocationException - 对于文档模型中的错误位置
      IllegalArgumentException - 如果direction无效
      参见:
    • getNextEastWestVisualPositionFrom

      protected int getNextEastWestVisualPositionFrom(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet) throws BadLocationException
      返回光标的下一个视觉位置,可以是东方或西方。
      参数:
      pos - 要转换的位置 >= 0
      b - 一个偏置值,可以是Position.Bias.ForwardPosition.Bias.Backward
      a - 要渲染的分配区域
      direction - 从当前位置开始的方向,可以理解为键盘上通常找到的箭头键;可能是以下之一:
      • SwingConstants.WEST
      • SwingConstants.EAST
      biasRet - 包含被检查的偏置的数组
      返回:
      在模型中最能代表下一个西方或东方位置的位置
      抛出:
      BadLocationException - 对于文档模型中的错误位置
      IllegalArgumentException - 如果direction无效
      参见:
    • flipEastAndWestAtEnds

      protected boolean flipEastAndWestAtEnds(int position, Position.Bias bias)
      确定下一个视图所在的方向。考虑索引为n的View。通常,View是从左到右布局的,因此东方的View将在索引n + 1处,西方的View将在索引n - 1处。在某些情况下,例如双向文本,可能东方的View不在索引n + 1处,而在索引n - 1处,或者西方的View不在索引n - 1处,而在索引n + 1处。在这种情况下,此方法将返回true,表示View是按降序布局的。

      这个方法无条件返回false,子类应该重写此方法,如果有可能按降序布局View

      参数:
      position - 模型中的位置
      bias - 可以是Position.Bias.ForwardPosition.Bias.Backward
      返回:
      false