- java.lang.Object
-
- javax.swing.text.View
-
- javax.swing.text.AsyncBoxView
-
- All Implemented Interfaces:
-
SwingConstants
public class AsyncBoxView extends View
一个异步执行布局的框。 这对于通过不对其进行任何布局来保持GUI事件线程移动是有用的。 布局是针对子视图的细粒度操作完成的。 在每个子视图访问部分布局之后(可能耗时的操作),剩余的任务可以被放弃,或者可以采用新的更高优先级的任务(即服务于同步请求或可见区域)。当访问子视图时,在相关联的文档上获取读取锁定,以便模型在被访问时是稳定的。
- 从以下版本开始:
- 1.3
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 class
AsyncBoxView.ChildLocator
在本地化区域内进行变更时,可以管理子视图在局部区域中的有效位置。class
AsyncBoxView.ChildState
表示子视图的布局状态的记录。
-
Field Summary
Fields Modifier and Type Field 描述 protected AsyncBoxView.ChildLocator
locator
管理孩子偏移的对象。-
Fields inherited from 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
-
Fields inherited from class javax.swing.text.View
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXIS
-
-
构造方法摘要
构造方法 Constructor 描述 AsyncBoxView(Element elem, int axis)
构造一个执行异步布局的框视图。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 protected AsyncBoxView.ChildState
createChildState(View v)
通过此方法创建新的ChildState记录,以允许子类将ChildState记录扩展为更多。protected void
flushRequirementChanges()
将首选项向上发布到父视图。float
getBottomInset()
获取视图边缘的底部。Shape
getChildAllocation(int index, Shape a)
获取给定子视图的分配。protected AsyncBoxView.ChildState
getChildState(int index)
在给定索引处获取表示子节点布局状态的对象。protected boolean
getEstimatedMajorSpan()
目前估计是主要跨度吗?protected float
getInsetSpan(int axis)
沿着由插图占据的轴获取跨度。protected LayoutQueue
getLayoutQueue()
获取队列以用于布局。float
getLeftInset()
在视图中获取边缘的左边部分。int
getMajorAxis()
取长轴(孩子们平行的轴)。float
getMaximumSpan(int axis)
确定沿着轴的该视图的最大跨度。float
getMinimumSpan(int axis)
确定此视图沿轴的最小跨度。int
getMinorAxis()
获取短轴(垂直于平铺轴的轴)。int
getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet)
提供一种方法来确定可能放置插入符号的下一个视觉表示的模型位置。float
getPreferredSpan(int axis)
确定沿着轴的此视图的首选跨度。float
getRightInset()
在视图中获取边缘的正确部分。float
getTopInset()
获取视图边缘的顶部。View
getView(int n)
获取第n个子视图。int
getViewCount()
返回此视图中的视图数。int
getViewIndex(int pos, Position.Bias b)
返回表示模型中给定位置的子视图索引。protected int
getViewIndexAtPosition(int pos, Position.Bias b)
获取代表模型中给定位置的子视图索引。protected void
loadChildren(ViewFactory f)
加载所有的孩子以初始化视图。protected void
majorRequirementChange(AsyncBoxView.ChildState cs, float delta)
要求沿主轴变化。protected void
minorRequirementChange(AsyncBoxView.ChildState cs)
要求沿着短轴改变。Shape
modelToView(int pos, Shape a, Position.Bias b)
提供从文档模型坐标空间映射到映射到它的视图的坐标空间的映射。void
paint(Graphics g, Shape alloc)
使用给定的分配和渲染表面渲染视图。void
preferenceChanged(View child, boolean width, boolean height)
子视图可以在父项上调用,以表明偏好已更改,应重新考虑布局。void
replace(int offset, int length, View[] views)
调用超类更新子视图,并更新子节点的状态记录。void
setBottomInset(float i)
将边缘的底部部分设置在视图周围。protected void
setEstimatedMajorSpan(boolean isEstimated)
设置估计的主要属性,以确定主要跨度是否应被视为估计。void
setLeftInset(float i)
设置边缘左边的视图。void
setParent(View parent)
设置视图的父级。void
setRightInset(float i)
在视图周围设置边框的正确部分。void
setSize(float width, float height)
设置视图的大小。void
setTopInset(float i)
围绕视图设置边距的顶部。protected void
updateLayout(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a)
响应于从模型接收到更改的通知更新布局。int
viewToModel(float x, float y, Shape a, Position.Bias[] biasReturn)
提供从视图坐标空间到模型的逻辑坐标空间的映射。-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from 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
-
-
-
-
字段详细信息
-
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)
沿着由插图占据的轴获取跨度。- 参数
-
axis
- 用于确定X_AXIS或Y_AXIS的总插入点的轴。 - 结果
- 沿着由插入物占据的轴的跨度
- 从以下版本开始:
- 1.4
-
setEstimatedMajorSpan
protected void setEstimatedMajorSpan(boolean isEstimated)
设置估计的主要属性,以确定主要跨度是否应被视为估计。 如果此属性为true,则长轴上的setSize值将更改沿主轴的要求,并且将忽略增量更改,直到所有子项都被更新(这将导致属性自动设置为false)。 如果属性为false,则主要Span的值将被视为准确的,并且增量更改将被添加到总计中。- 参数
-
isEstimated
- 估计的主要属性的新值 - 从以下版本开始:
- 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对象在完成提取子视图新首选项时执行布局时调用此方法。 通常这将是布局线程,但是如果它试图立即更新某些东西(例如执行模型/视图转换),则可能是事件线程。这是为了将主轴标记为已更改,以便将来检查以查看要求是否需要发布到父视图将会考虑主轴。 如果长轴上的跨度未被估计,则会通过给定的增量更新以反映增量变化。 如果估计大跨度,则忽略增量。
- 参数
-
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)
调用超类更新子视图,并更新子节点的状态记录。 预期在模型上保留写入锁定,以便不会发生与布局线程的交互(即布局线程在执行任何操作之前获取读锁定)。
-
loadChildren
protected void loadChildren(ViewFactory f)
加载所有的孩子以初始化视图。 这是由setParent
方法调用的。 子类可以重新实现,以不同的方式初始化其子视图。 默认实现为每个子元素创建一个子视图。通常,当孩子被更改时,文档上保留一个写锁定,这保持了渲染和布局线程的安全。 例外情况是当视图被初始化以表示现有元素(通过此方法)时,因此在初始化时将同步以排除preferenceChanged。
- 参数
-
f
- 视图工厂 - 另请参见:
-
setParent(javax.swing.text.View)
-
getViewIndexAtPosition
protected int getViewIndexAtPosition(int pos, Position.Bias b)
获取代表模型中给定位置的子视图索引。 这是为了在每个子元素有子视图的情况下获取视图。- 参数
-
pos
- 位置> = 0 -
b
- 位置偏差 - 结果
- 表示给定位置的视图的索引,如果没有视图表示该位置,则为-1
-
updateLayout
protected void updateLayout(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a)
响应于从模型接收到更改的通知更新布局。 这被实现以注意到ChildLocator上的更改,以便正确计算孩子的偏移量。- 重写:
-
updateLayout
类View
- 参数
-
ec
- 对此视图负责的元素的更改(如果没有更改则可以为null)。 -
e
- 相关文件的更改信息 -
a
- 视图的当前分配 - 另请参见:
-
View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
,View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
,View.changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
-
setParent
public void setParent(View parent)
设置视图的父级。 如果此视图还没有子loadChildren
则会重新实现此功能以提供超类行为以及调用loadChildren
方法。 孩子不应该加载在构造函数中,因为设置父进程的行为可能会导致他们尝试搜索层次结构(例如获取主机容器)。 如果此视图具有子视图(视图正从视图层次结构中的一个位置移动到另一个视图),则不会调用loadChildren
方法。
-
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)
设置视图的大小。 如果视图缓存任何布局信息,这将导致视图的布局。由于主轴是异步更新,应该是平铺的小孩的总和,所以长轴将忽略调用。 由于短轴是灵活的,所以如果小跨度发生变化,则排队等待孩子调整大小。
-
paint
public void paint(Graphics g, Shape alloc)
使用给定的分配和渲染表面渲染视图。这被实现以确定要渲染的期望区域(即,未剪切区域)是否是最新的。 如果最新的孩子被渲染。 如果不是最新的,则将构建所需区域的任务作为高优先级任务放置在布局队列中。 这通过事件线程通过呈现准备就可以移动,并且如果没有准备就推迟到更晚的时间(因为绘制请求可以重新安排)。
- Specified by:
-
paint
在View
- 参数
-
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)
确定此视图沿轴的最小跨度。- 重写:
-
getMinimumSpan
在View
- 参数
-
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。
-
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
-
modelToView
public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException
提供从文档模型坐标空间映射到映射到它的视图的坐标空间的映射。- Specified by:
-
modelToView
在View
- 参数
-
pos
- 转换> = 0的位置 -
a
- 要分配的区域 -
b
- 在位置是两个视图的边界的情况下偏向前一个字符或由偏移表示的下一个字符。 - 结果
- 返回给定位置的边界框
- 异常
-
BadLocationException
- 如果给定的位置不表示相关文档中的有效位置 -
IllegalArgumentException
- 用于无效的偏差参数 - 另请参见:
-
View.viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])
-
viewToModel
public int viewToModel(float x, float y, Shape a, Position.Bias[] biasReturn)
提供从视图坐标空间到模型的逻辑坐标空间的映射。 将填写biasReturn参数,以指示给定的点更接近模型中的下一个字符或模型中的上一个字符。这被GUI线程预期调用,在关联的模型上保持一个读锁定。 它被实现以定位子视图并使用ChildLocator对象上的锁来确定它的分配,并且在子视图上调用ViewToModel,使用ChildState对象上的锁来避免与布局线程的交互。
- 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
无效
-
-