- java.lang.Object
-
- javax.swing.text.View
-
- javax.swing.text.AsyncBoxView
-
- 实现的所有接口
-
SwingConstants
public class AsyncBoxView extends View
一个异步布局的框。 这对于通过不对其进行任何布局来保持GUI事件线程移动非常有用。 布局是在子视图的操作粒度上完成的。 在针对布局的某些部分(可能耗时的操作)访问每个子视图之后,可以放弃剩余的任务或者可以采用新的更高优先级的任务(即,服务同步请求或可见区域)。在访问子视图时,在相关文档上获取读锁定,以便模型在被访问时是稳定的。
- 从以下版本开始:
- 1.3
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 class
AsyncBoxView.ChildLocator
在本地化区域周围进行更改时,用于管理局部区域中子视图的有效位置的类。class
AsyncBoxView.ChildState
表示子视图的布局状态的记录。
-
字段汇总
字段 变量和类型 字段 描述 protected AsyncBoxView.ChildLocator
locator
管理孩子偏移的对象。-
声明的属性在类 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
-
-
构造方法摘要
构造方法 构造器 描述 AsyncBoxView(Element elem, int axis)
构造一个执行异步布局的框视图。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 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)
沿着由insets占用的轴获取跨度。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)
设置estimatedMajorSpan属性,该属性确定是否应将主要跨度视为已估计。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)
提供从视图坐标空间到模型的逻辑坐标空间的映射。-
声明方法的类 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)
沿着由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)
调用超类更新子视图,并更新子项的状态记录。 在模型上保持写锁定时,可以调用此方法,以便不会发生与布局线程的交互(即布局线程在执行任何操作之前获取读锁定)。
-
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
-
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对象来确定它的分配,并通过锁定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
无效
-
-