java.lang.Object javax.swing.text.View javax.swing.text.AsyncBoxView
public class AsyncBoxView
异步执行布局处理的框。此类很有用,因为它可通过不在 GUI 事件线程中执行任何布局处理来保持该线程的持续活动。布局是在子视图的操作粒度上完成的。访问某部分布局的每个子视图后(可能是耗时的操作),可放弃剩余的任务,或者可执行新的、具有更高优先级的任务(如响应一个同步请求或对一个可见区域进行操作)。
访问子视图的同时,要获得关联文档上的读取锁定,这样该模型在被访问时是稳定的。
嵌套类摘要 | |
---|---|
class |
AsyncBoxView.ChildLocator 该类在本地化区域发生更改时,管理该本地化区域中子视图的有效位置。 |
class |
AsyncBoxView.ChildState 表示子视图布局状态的记录。 |
字段摘要 | |
---|---|
protected AsyncBoxView.ChildLocator |
locator 这是管理子视图偏移量的对象。 |
从类 javax.swing.text.View 继承的字段 |
---|
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXIS |
从接口 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) 构造执行异步布局处理的 BoxView。 |
方法摘要 | |
---|---|
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) 提供从视图坐标空间到模型逻辑坐标空间的映射。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
protected AsyncBoxView.ChildLocator locator
构造方法详细信息 |
---|
public AsyncBoxView(Element elem, int axis)
elem
- 要表示的模型元素
axis
- 平铺时沿用的轴。这可以是 X_AXIS 或 Y_AXIS 之一。
方法详细信息 |
---|
public int getMajorAxis()
public int getMinorAxis()
public float getTopInset()
public void setTopInset(float i)
i
- inset 值
public float getBottomInset()
public void setBottomInset(float i)
i
- inset 值
public float getLeftInset()
public void setLeftInset(float i)
i
- inset 值
public float getRightInset()
public void setRightInset(float i)
i
- inset 值
protected float getInsetSpan(int axis)
axis
- 确定总的 insets 所沿用的轴,为 X_AXIS 或 Y_AXIS 之一。
protected void setEstimatedMajorSpan(boolean isEstimated)
protected boolean getEstimatedMajorSpan()
protected AsyncBoxView.ChildState getChildState(int index)
index
- 子视图索引。这应该是一个 >= 0 且 < getViewCount() 的值。
protected LayoutQueue getLayoutQueue()
protected AsyncBoxView.ChildState createChildState(View v)
protected void majorRequirementChange(AsyncBoxView.ChildState cs, float delta)
实现此方法以便将主轴标记为已更改,所以如果需要将要求发布到父视图,后续的检查可查看是否将主轴考虑在内。如果沿主轴的跨距不是估计值,则通过给定的 delta 更新它,以反映递增量。如果主跨距是估计值,则忽略 delta。
protected void minorRequirementChange(AsyncBoxView.ChildState cs)
protected void flushRequirementChanges()
public void replace(int offset, int length, View[] views)
offset
- 子视图中的起始偏移量,该值 >= 0
length
- 要替换的现有视图数,该值 >= 0
views
- 要插入的子视图
protected void loadChildren(ViewFactory f)
通常在更改子元素时 Document 上会持有写入锁定,这可保持呈现和布局线程的安全。例外情况是初始化视图以表示现有的元素时(通过此方法),所以在进行初始化的时候它是同步的,以将 preferenceChanged 排除在外。
f
- 视图工厂
setParent(javax.swing.text.View)
protected int getViewIndexAtPosition(int pos, Position.Bias b)
pos
- 位置,该值 >= 0
protected void updateLayout(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a)
View
中的
updateLayout
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)
public void setParent(View parent)
loadChildren
方法。子级不应在构造方法中加载,因为设置父级的操作可能会导致其尝试向上搜索层次结构(例如获得宿主 Container)。如果此视图具有子视图(将该视图从视图层次结构中的一个位置移到另一个位置),则不调用
loadChildren
方法。
parent
- 视图的父级,如果没有,则为 null
public void preferenceChanged(View child, boolean width, boolean height)
View
中的
preferenceChanged
child
- 子视图
width
- 如果已更改宽度首选项,则为 true
height
- 如果已更改高度首选项,则为 true
JComponent.revalidate()
public void setSize(float width, float height)
由于主轴是异步更新的,并且应该是已平铺子级的和,所以对于主轴应忽略该调用。由于辅轴是很灵活的,所以如果辅跨距更改了,则将工作放入队列以调整子视图的大小。
width
- 宽度,该值 >= 0
height
- 高度,该值 >= 0
public void paint(Graphics g, Shape alloc)
实现此方法可确定要呈现的所需区域(如非剪贴区域)是否为最新的。如果是最新的,则呈现子视图。如果不是最新的,则将构建所需区域的任务作为最高优先级的任务放入布局队列中。在准备就绪时,此方法通过事件线程和渲染来持续运行,在尚未准备就绪时推迟一段时间(因为可以重新安排绘制请求)。
g
- 要使用的呈现表面
alloc
- 要在其中进行呈现的已分配区域
View.paint(java.awt.Graphics, java.awt.Shape)
public float getPreferredSpan(int axis)
View
中的
getPreferredSpan
axis
- 可以为 View.X_AXIS 或 View.Y_AXIS
IllegalArgumentException
- 如果轴类型无效
View.getPreferredSpan(int)
public float getMinimumSpan(int axis)
View
中的
getMinimumSpan
axis
- 可以为 View.X_AXIS 或 View.Y_AXIS
IllegalArgumentException
- 如果轴类型无效
View.getPreferredSpan(int)
public float getMaximumSpan(int axis)
View
中的
getMaximumSpan
axis
- 可以为 View.X_AXIS 或 View.Y_AXIS
IllegalArgumentException
- 如果轴类型无效
View.getPreferredSpan(int)
public int getViewCount()
View
中的
getViewCount
View.getViewCount()
public View getView(int n)
n
- 要获得的视图编号,该值 >= 0 && < getViewCount()
public Shape getChildAllocation(int index, Shape a)
View
中的
getChildAllocation
index
- 子视图的索引,该值 >= 0 && < getViewCount()
a
- 此视图的分配区域。
public int getViewIndex(int pos, Position.Bias b)
View
中的
getViewIndex
pos
- 位置,该值 >= 0
public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException
View
中的
modelToView
pos
- 要转换的位置,该值 >= 0
a
- 要呈现于其中的已分配区域
b
- 在该位置是两个视图的边界时,为偏向前一个字符或下一个字符的偏差,由偏移量表示。
BadLocationException
- 如果给定的位置不表示关联文档内的有效位置
IllegalArgumentException
- 如果 bias 参数无效