模块  java.desktop
软件包  javax.swing.text

Class 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 - 插入的值
      • getBottomInset

        public float getBottomInset()
        获取视图周围边缘的底部。
        结果
        视图周围边缘的底部
      • setBottomInset

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

        public float getLeftInset()
        获取视图周围边缘的左侧部分。
        结果
        视图周围边缘的左侧部分
      • setLeftInset

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

        public float getRightInset()
        在视图周围获取正确的边距部分。
        结果
        视图周围边缘的右侧部分
      • setRightInset

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

        protected float getInsetSpan​(int axis)
        沿着由insets占用的轴获取跨度。
        参数
        axis - 用于确定X_AXIS或Y_AXIS的总插入的轴。
        结果
        沿着由插图占据的轴的跨度
        从以下版本开始:
        1.4
      • setEstimatedMajorSpan

        protected void setEstimatedMajorSpan​(boolean isEstimated)
        设置estimatedMajorSpan属性,该属性确定是否应将主要跨度视为已估计。 如果此属性为true,则沿主轴的setSize值将更改沿主轴的要求,并且将忽略增量更改,直到所有子项都已更新(这将导致该属性自动设置为false)。 如果属性为false,则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对象执行布局调用。 通常,这将是布局线程,但如果它尝试立即更新某些内容(例如执行模型/视图转换),则可能是事件线程。

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

        参数
        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 - 查看工厂
        另请参见:
        setParent(javax.swing.text.View)
      • getViewIndexAtPosition

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

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

        public void preferenceChanged​(View child,
                                      boolean width,
                                      boolean height)
        子视图可以在父视图上调用此视图以指示首选项已更改,应重新考虑布局。 这是重新实现的,以便在布局线程上排队新工作。 此方法通过子节点从多个线程发送消息。
        重写:
        preferenceChanged在类 View
        参数
        child - 子视图
        width - 如果宽度首选项已更改, width true
        height - 如果高度首选项已更改, height true
        另请参见:
        JComponent.revalidate()
      • setSize

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

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

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

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

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

        Specified by:
        paintView
        参数
        g - 要使用的渲染表面
        alloc - 要分配的已分配区域
        另请参见:
        View.paint(java.awt.Graphics, java.awt.Shape)
      • getPreferredSpan

        public float getPreferredSpan​(int axis)
        确定此视图沿轴的首选跨度。
        Specified by:
        getPreferredSpan在类 View
        参数
        axis - 可以是View.X_AXIS或View.Y_AXIS
        结果
        视图要渲染到的范围> = 0.通常,视图会被告知渲染到返回的范围内,但不能保证。 父母可以选择调整视图大小或打破视图。
        异常
        IllegalArgumentException - 表示无效的轴类型
        另请参见:
        View.getPreferredSpan(int)
      • getMinimumSpan

        public float getMinimumSpan​(int axis)
        确定此视图沿轴的最小跨度。
        重写:
        getMinimumSpanView
        参数
        axis - 可以是View.X_AXIS或View.Y_AXIS
        结果
        视图要渲染到的范围> = 0.通常,视图会被告知渲染到返回的范围内,但不能保证。 父母可以选择调整视图大小或打破视图。
        异常
        IllegalArgumentException - 对于无效的轴类型
        另请参见:
        View.getPreferredSpan(int)
      • getMaximumSpan

        public float getMaximumSpan​(int axis)
        确定此视图沿轴的最大跨度。
        重写:
        getMaximumSpan在类 View
        参数
        axis - 可以是View.X_AXIS或View.Y_AXIS
        结果
        视图要渲染到的范围> = 0.通常,视图会被告知渲染到返回的范围内,但不能保证。 父母可以选择调整视图大小或打破视图。
        异常
        IllegalArgumentException - 对于无效的轴类型
        另请参见:
        View.getPreferredSpan(int)
      • getViewCount

        public int getViewCount()
        返回此视图中的视图数。 由于默认值不是复合视图,因此返回0。
        重写:
        getViewCount在类 View
        结果
        视图数> = 0
        另请参见:
        View.getViewCount()
      • 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
      • viewToModel

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

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

        Specified by:
        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 - 要转换的位置
        a - 要分配的已分配区域
        direction - 当前位置的方向,可以被认为是键盘上常见的箭头键; 这可能是以下之一:
        • SwingConstants.WEST
        • SwingConstants.EAST
        • SwingConstants.NORTH
        • SwingConstants.SOUTH
        biasRet - 包含已检查的偏差的数组
        b - 偏见
        结果
        模型中最能代表下一个位置视觉位置的位置
        异常
        BadLocationException - 给定位置不是文档中的有效位置
        IllegalArgumentException - 如果 direction无效