Module java.desktop
Package javax.swing.text

Class ComponentView

java.lang.Object
javax.swing.text.View
javax.swing.text.ComponentView
所有已实现的接口:
SwingConstants
直接已知的子类:
FormView, ObjectView

public class ComponentView extends View
实现视图接口的组件装饰器。整个元素用于表示组件。这充当了从仅显示的View实现到交互式轻量级组件的网关(即允许将组件嵌入到View层次结构中)。

根据Component.getAlignmentY返回的值,将组件相对于文本基线放置。对于Swing组件,可以方便地使用JComponent.setAlignmentY方法设置此值。例如,设置0.75的值将导致组件的75%位于基线上方,25%位于基线下方。

此类已实现额外的工作,以便在存在多个线程时正常工作(例如,通过确保所有组件访问都在事件线程上执行来实现对模型更改的异步通知)。

使用的组件由createComponent方法的返回值确定。此方法的默认实现是通过调用StyleConstants.getComponent获取元素属性中保存的组件来返回组件。此行为的一个限制是组件不能被多个文本组件使用(即具有共享模型)。子类可以通过实现createComponent来消除此约束,以实际基于属性中包含的某种规范创建组件。html包中的ObjectView类是支持共享模型的多个组件视图的ComponentView实现的示例。

  • Constructor Details

    • ComponentView

      public ComponentView(Element elem)
      创建一个新的ComponentView对象。
      参数:
      elem - 要装饰的元素
  • Method Details

    • createComponent

      protected Component createComponent()
      创建与此视图关联的组件。当确定需要新组件时将调用此方法。这可能是由于调用setParent或由于收到属性更改的通知而导致的。
      返回:
      与此视图关联的组件
    • getComponent

      public final Component getComponent()
      获取与视图关联的组件。
      返回:
      与视图关联的组件
    • paint

      public void paint(Graphics g, Shape a)
      真正的绘制行为自然地发生在组件与其父容器(托管此视图的相同容器)的关联中。这是为了不执行任何操作而实现的。
      指定者:
      paint 在类 View
      参数:
      g - 图形上下文
      a - 形状
      参见:
    • getPreferredSpan

      public float getPreferredSpan(int axis)
      确定此视图沿轴线的首选跨度。此方法实现为返回Component.getPreferredSize沿感兴趣的轴线返回的值。
      指定者:
      getPreferredSpan 在类 View
      参数:
      axis - 可以是View.X_AXIS或View.Y_AXIS
      返回:
      视图希望呈现的跨度>=0。通常会告诉视图呈现返回的跨度,尽管不能保证。父级可能选择调整或打破视图。
      抛出:
      IllegalArgumentException - 对于无效的轴线
    • getMinimumSpan

      public float getMinimumSpan(int axis)
      确定此视图沿轴线的最小跨度。此方法实现为返回Component.getMinimumSize沿感兴趣的轴线返回的值。
      覆盖:
      getMinimumSpan 在类 View
      参数:
      axis - 可以是View.X_AXIS或View.Y_AXIS
      返回:
      视图希望呈现的跨度>=0。通常会告诉视图呈现返回的跨度,尽管不能保证。父级可能选择调整或打破视图。
      抛出:
      IllegalArgumentException - 对于无效的轴线
      参见:
    • getMaximumSpan

      public float getMaximumSpan(int axis)
      确定此视图沿轴线的最大跨度。此方法实现为返回Component.getMaximumSize沿感兴趣的轴线返回的值。
      覆盖:
      getMaximumSpan 在类 View
      参数:
      axis - 可以是View.X_AXIS或View.Y_AXIS
      返回:
      视图希望呈现的跨度>=0。通常会告诉视图呈现返回的跨度,尽管不能保证。父级可能选择调整或打破视图。
      抛出:
      IllegalArgumentException - 对于无效的轴线
      参见:
    • getAlignment

      public float getAlignment(int axis)
      确定此视图沿轴线的期望对齐方式。此方法实现为给出嵌入组件的对齐方式。
      覆盖:
      getAlignment 在类 View
      参数:
      axis - 可以是View.X_AXIS或View.Y_AXIS
      返回:
      期望的对齐方式。这应该是一个介于0.0和1.0之间的值,其中0表示在原点对齐,1.0表示远离原点的完整跨度对齐。对齐方式为0.5将是视图的中心。
    • setParent

      public void setParent(View p)
      为子视图设置父级。父级在子视图上调用此方法,告诉子视图其父级是谁,使视图可以访问诸如托管容器之类的内容。首先执行超类行为,然后如果父视图参数非空且尚未创建组件,则调用createComponent。然后,嵌入组件的父级设置为getContainer返回的值。如果父视图参数为null,则正在清理此视图,因此将组件从其父级中移除。

      更改组件层次结构将触及组件锁,这是View层次结构中不安全的唯一事物。因此,如果在事件线程上调用,此功能将立即执行,或者如果从另一个线程调用(从异步更新的通知中通知更改),则将在事件队列中排队执行。

      覆盖:
      setParent 在类 View
      参数:
      p - 父级
    • modelToView

      public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException
      提供从模型的坐标空间到视图的逻辑坐标空间的映射。
      指定者:
      modelToView 在类 View
      参数:
      pos - 要转换的位置>=0
      a - 分配的区域以呈现
      b - 与偏移量表示的前一个字符或下一个字符的偏好相对应,如果位置是两个视图的边界,则b将具有以下值:
      • Position.Bias.Forward
      • Position.Bias.Backward
      返回:
      返回给定位置的边界框
      抛出:
      BadLocationException - 如果给定位置在关联文档中不表示有效位置
      参见:
    • viewToModel

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