java.lang.Object
javax.swing.text.View
javax.swing.text.AsyncBoxView
- 所有已实现的接口:
-
SwingConstants
一个异步执行布局的框。这对于通过不在GUI事件线程上执行任何布局来保持GUI事件线程运行非常有用。布局是在子视图的操作粒度上完成的。在访问每个子视图进行布局的某个部分后(一个可能耗时的操作),剩余的任务可以被放弃,或者可以采取一个新的更高优先级的任务(即为了服务同步请求或可见区域)。
在访问子视图时,会在相关文档上获取读取锁,以确保在访问时模型是稳定的。
- 自1.3版本起:
- 1.3
-
Nested Class Summary
Modifier and TypeClassDescriptionclass
一个类,用于在局部区域发生变化时管理子视图的有效位置。class
代表子视图的布局状态的记录。 -
Field Summary
Fields declared in class javax.swing.text.View
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXIS
Fields declared in interface javax.swing.SwingConstants
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected AsyncBoxView.ChildState
通过此方法创建新的ChildState记录,以允许子类扩展ChildState记录以执行/保存更多内容。protected void
将偏好更改向上发布到父视图。float
获取视图周围底部边距的部分。getChildAllocation
(int index, Shape a) 获取给定子视图的分配。protected AsyncBoxView.ChildState
getChildState
(int index) 获取表示给定索引处子视图的布局状态的对象。protected boolean
当前主要跨度是否已估计?protected float
getInsetSpan
(int axis) 获取沿着由插图占据的轴的跨度。protected LayoutQueue
获取用于布局的队列。float
获取视图周围左侧边距的部分。int
获取主轴(子视图沿其排列的轴)。float
getMaximumSpan
(int axis) 确定沿轴的此视图的最大跨度。float
getMinimumSpan
(int axis) 确定沿轴的此视图的最小跨度。int
获取次要轴(与平铺轴正交的轴)。int
getNextVisualPositionFrom
(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet) 提供一种确定下一个可能放置插入符号的视觉表示模型位置的方法。float
getPreferredSpan
(int axis) 确定沿轴的此视图的首选跨度。float
获取视图周围右侧边距的部分。float
获取视图周围顶部边距的部分。getView
(int n) 获取第n个子视图。int
返回此视图中的视图数量。int
getViewIndex
(int pos, Position.Bias b) 返回表示模型中给定位置的子视图索引。protected int
getViewIndexAtPosition
(int pos, Position.Bias b) 获取表示模型中给定位置的子视图索引。protected void
加载所有子视图以初始化视图。protected void
majorRequirementChange
(AsyncBoxView.ChildState cs, float delta) 沿主轴更改的要求。protected void
沿次要轴更改的要求。modelToView
(int pos, Shape a, Position.Bias b) 提供从文档模型坐标空间到其映射视图的坐标空间的映射。void
使用给定的分配和渲染表面渲染视图。void
preferenceChanged
(View child, boolean width, boolean height) 子视图可以调用此方法来指示偏好已更改,并且应重新考虑布局。void
调用超类来更新子视图,并更新子视图的状态记录。预期在持有模型的写锁时调用此方法,以便不会发生与布局线程的交互(即布局线程在执行任何操作之前会获取读取锁)。void
setBottomInset
(float i) Set the bottom part of the margin around the view.protected void
setEstimatedMajorSpan
(boolean isEstimated) Set the estimatedMajorSpan property that determines if the major span should be treated as being estimated.void
setLeftInset
(float i) Set the left part of the margin around the view.void
Sets the parent of the view.void
setRightInset
(float i) Set the right part of the margin around the view.void
setSize
(float width, float height) Sets the size of the view.void
setTopInset
(float i) Set the top part of the margin around the view.protected void
Update the layout in response to receiving notification of change from the model.int
viewToModel
(float x, float y, Shape a, Position.Bias[] biasReturn) Provides a mapping from the view coordinate space to the logical coordinate space of the model.Methods declared in class javax.swing.text.View
append, breakView, changedUpdate, createFragment, forwardUpdate, forwardUpdateToView, getAlignment, getAttributes, getBreakWeight, getContainer, getDocument, getElement, getEndOffset, getGraphics, getParent, getResizeWeight, getStartOffset, getToolTipText, getViewFactory, getViewIndex, insert, insertUpdate, isVisible, modelToView, modelToView, remove, removeAll, removeUpdate, updateChildren, viewToModel
-
Field Details
-
locator
Object that manages the offsets of the children. All locking for management of child locations is on this object.
-
-
Constructor Details
-
AsyncBoxView
Construct a box view that does asynchronous layout.- 参数:
-
elem
- 要表示的模型元素 -
axis
- 沿其排列的轴。可以是X_AXIS或Y_AXIS。
-
-
Method Details
-
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) 获取沿着由插图占据的轴的跨度。- 参数:
-
axis
- 要沿其确定总插图的轴,可以是X_AXIS或Y_AXIS。 - 返回:
- 由插图占据的轴上的跨度
- 自1.4版本起:
- 1.4
-
setEstimatedMajorSpan
protected void setEstimatedMajorSpan(boolean isEstimated) 设置estimatedMajorSpan属性,确定是否应将主要跨度视为已估计。如果此属性为true,则主轴上的setSize的值将更改主轴上的要求,并且增量更改将被忽略,直到所有子视图都已更新(这将导致属性自动设置为false)。如果属性为false,则将认为majorSpan的值是准确的,并且增量更改将随着计算而被添加到总数中。- 参数:
-
isEstimated
- estimatedMajorSpan属性的新值 - 自1.4版本起:
- 1.4
-
getEstimatedMajorSpan
protected boolean getEstimatedMajorSpan()当前主要跨度是否已估计?- 返回:
- 当前主要跨度是否已估计
- 自1.4版本起:
- 1.4
-
getChildState
获取表示给定索引处子视图的布局状态的对象。- 参数:
-
index
- 子索引。应为大于等于0且小于getViewCount()的值。 - 返回:
- 表示给定索引处子视图的布局状态的对象
-
getLayoutQueue
获取用于布局的队列。- 返回:
- 用于布局的队列
-
createChildState
通过此方法创建新的ChildState记录,以允许子类扩展ChildState记录以执行/保存更多内容。- 参数:
-
v
- 视图 - 返回:
- 新的子状态
-
majorRequirementChange
沿主轴更改的要求。当为给定ChildState对象执行布局的线程完成获取子视图新偏好时,将调用此方法。通常这将是布局线程,但如果尝试立即更新某些内容(例如执行模型/视图转换),则可能是事件线程。此方法被实现为标记主轴已更改,以便将来检查是否需要将要求发布到父视图时将考虑主轴。如果主轴上的跨度未估计,则通过给定的增量更新主轴上的跨度以反映增量更改。如果主跨度被估计,则增量将被忽略。
- 参数:
-
cs
- 子状态 -
delta
- 增量
-
minorRequirementChange
沿次要轴更改的要求。当为给定ChildState对象执行布局的线程完成获取子视图新偏好时,将调用此方法。通常这将是布局线程,但如果尝试立即更新某些内容(例如执行模型/视图转换),则可能是GUI线程。- 参数:
-
cs
- 子状态
-
flushRequirementChanges
protected void flushRequirementChanges()将偏好更改向上发布到父视图。通常由布局线程调用。 -
replace
调用超类来更新子视图,并更新子视图的状态记录。预期在持有模型的写锁时调用此方法,以便不会发生与布局线程的交互(即布局线程在执行任何操作之前会获取读取锁)。 -
loadChildren
加载所有子元素以初始化视图。这是由setParent
方法调用的。子类可以重新实现此方法以不同的方式初始化其子视图。默认实现为每个子元素创建一个子视图。通常在更改子元素时会在文档上持有写锁,这可以确保渲染和布局线程的安全。唯一的例外是当初始化视图以表示现有元素(通过此方法)时,因此在初始化时会同步排除preferenceChanged。
- 参数:
-
f
- 视图工厂 - 参见:
-
getViewIndexAtPosition
获取表示模型中给定位置的子视图索引。在每个子元素都有一个子视图的情况下,会实现此方法以获取视图。- 参数:
-
pos
- 位置 >= 0 -
b
- 位置偏好 - 返回:
- 表示给定位置的视图的索引,如果没有视图表示该位置则返回-1
-
updateLayout
响应来自模型的更改通知更新布局。实现此方法以在ChildLocator上记录更改,以便正确计算子元素的偏移量。- 覆盖:
-
updateLayout
在类View
- 参数:
-
ec
- 负责此视图的元素的更改(如果没有更改则可能为null)。 -
e
- 关联文档的更改信息 -
a
- 视图的当前分配 - 参见:
-
setParent
设置视图的父级。重新实现此方法以提供超类行为,并在此视图尚未具有子视图时调用loadChildren
方法。不应在构造函数中加载子视图,因为设置父级的操作可能导致它们尝试搜索层次结构(例如获取托管容器)。如果此视图具有子视图(将视图从视图层次结构中的一个位置移动到另一个位置),则不会调用loadChildren
方法。 -
preferenceChanged
子视图可以调用此方法通知父级偏好已更改,并应重新考虑布局。重新实现此方法以在布局线程上排队新的工作。此方法通过子线程多次发送消息。- 覆盖:
-
preferenceChanged
在类View
- 参数:
-
child
- 子视图 -
width
- 如果宽度偏好已更改则为true -
height
- 如果高度偏好已更改则为true - 参见:
-
setSize
public void setSize(float width, float height) 设置视图的大小。如果视图缓存任何布局信息,则应导致视图的布局。由于主轴是异步更新的,并且应为平铺子元素的总和,因此对于主轴,此调用将被忽略。由于次轴是灵活的,如果次跨度发生变化,则会排队工作以调整子元素的大小。
-
paint
使用给定的分配和渲染表面渲染视图。此方法实现为确定要渲染的期望区域(即未裁剪区域)是否是最新的。如果是最新的,则渲染子元素。如果不是最新的,则将构建所需区域的任务放置在布局队列中作为高优先级任务。这样可以通过在准备好时进行渲染来保持事件线程移动,并在准备好时推迟到以后的时间(因为绘制请求可以重新安排)。
-
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
获取第n个子视图。由于默认情况下没有子视图,因此返回null。 -
getChildAllocation
获取给定子视图的分配。这使得可以找出各种视图的位置,而不假定视图存储其位置。由于默认情况下没有任何子视图,因此返回null。- 覆盖:
-
getChildAllocation
在类View
- 参数:
-
index
- 子视图的索引,>= 0 && < getViewCount() -
a
- 分配给此视图的分配。 - 返回:
- 子视图的分配
-
getViewIndex
返回表示模型中给定位置的子视图索引。默认情况下,视图没有子视图,因此实现为返回-1,表示任何位置都没有有效的子视图索引。- 覆盖:
-
getViewIndex
在类View
中 - 参数:
-
pos
- 位置 >= 0 -
b
- 偏好 - 返回:
- 表示给定位置的视图的索引,如果没有视图表示该位置,则返回-1
- 自:
- 1.3
-
modelToView
提供了从文档模型坐标空间到其映射的视图的坐标空间的映射。- 指定者:
-
modelToView
在类View
中 - 参数:
-
pos
- 要转换的位置 >= 0 -
a
- 分配的区域以渲染 -
b
- 朝向前一个字符或下一个字符的偏好,如果位置是两个视图的边界之一的情况下 - 返回:
- 返回给定位置的边界框
- 抛出:
-
BadLocationException
- 如果给定位置在关联文档中不表示有效位置 -
IllegalArgumentException
- 对于无效的偏好参数 - 参见:
-
viewToModel
提供了从视图坐标空间到模型的逻辑坐标空间的映射。 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
无效
-