JavaTM Platform
Standard Ed. 6

javax.swing.text
类 AsyncBoxView

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
 
从接口 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)
          提供从视图坐标空间到模型逻辑坐标空间的映射。
 
从类 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
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

locator

protected AsyncBoxView.ChildLocator locator
这是管理子视图偏移量的对象。用于管理子视图位置的所有锁定都位于此对象上。

构造方法详细信息

AsyncBoxView

public AsyncBoxView(Element elem,
                    int axis)
构造执行异步布局处理的 BoxView。

参数:
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 - inset 值

getBottomInset

public float getBottomInset()
获得视图四周底部的空白部分。


setBottomInset

public void setBottomInset(float i)
设置视图四周底部的空白部分。

参数:
i - inset 值

getLeftInset

public float getLeftInset()
获得视图四周左侧的空白部分。


setLeftInset

public void setLeftInset(float i)
设置视图四周左侧的空白部分。

参数:
i - inset 值

getRightInset

public float getRightInset()
获得视图四周右侧的空白部分。


setRightInset

public void setRightInset(float i)
设置视图四周右侧的空白部分。

参数:
i - inset 值

getInsetSpan

protected float getInsetSpan(int axis)
获取 insets 所占据的沿某个轴的跨距。

参数:
axis - 确定总的 insets 所沿用的轴,为 X_AXIS 或 Y_AXIS 之一。
从以下版本开始:
1.4

setEstimatedMajorSpan

protected void setEstimatedMajorSpan(boolean isEstimated)
设置 estimatedMajorSpan 属性,它确定是否应该将主跨距视为估计值。如果此属性为 true,则沿主轴方向的 setSize 值将更改沿主轴方向的要求,并且在更新所有子级之前(更新子级会导致自动将该属性设置为 false)忽略递增量。如果该属性为 false,则认为 majorSpan 的值是准确的,并且在计算时将递增量添加到总值中。

从以下版本开始:
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 记录的子类执行/保存更多状态。


majorRequirementChange

protected void majorRequirementChange(AsyncBoxView.ChildState cs,
                                      float delta)
沿主轴上的要求更改。当执行布局处理的线程完成获取子视图新首选项的任务后,由该线程为给定的 ChildState 对象调用此方法。通常这是布局线程,但是如果要尝试立即更新某些内容(例如执行模型/视图转换),则它也可能是事件线程。

实现此方法以便将主轴标记为已更改,所以如果需要将要求发布到父视图,后续的检查可查看是否将主轴考虑在内。如果沿主轴的跨距不是估计值,则通过给定的 delta 更新它,以反映递增量。如果主跨距是估计值,则忽略 delta。


minorRequirementChange

protected void minorRequirementChange(AsyncBoxView.ChildState cs)
沿辅轴上的要求更改。当执行布局处理的线程完成获取子视图新首选项的任务后,由该线程为给定的 ChildState 对象调用此方法。通常这是布局线程,但是如果要尝试立即更新某些内容(例如执行模型/视图转换),则它也可能是 GUI 线程。


flushRequirementChanges

protected void flushRequirementChanges()
将首选项中的更改向上发布到父视图。它通常由布局线程调用。


replace

public void replace(int offset,
                    int length,
                    View[] views)
调用超类以更新子视图,并且更新子视图的状态记录。应该在模型持有写入锁定的同时调用此方法,这样将不会发生与布局线程的交互(例如,布局线程获得读取锁定后才能执行任何操作)。

覆盖:
View 中的 replace
参数:
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
返回:
表示给定位置的视图的索引,如果没有视图表示该位置,则返回 -1

updateLayout

protected void updateLayout(DocumentEvent.ElementChange ec,
                            DocumentEvent e,
                            Shape a)
更新布局,以响应从模型接收的更改通知。实现此方法可记录 ChildLocator 上的更改,这样可正确地计算子级的偏移量。

覆盖:
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)

setParent

public void setParent(View parent)
设置视图的父级。如果此视图没有子级,则可重新实现此方法以提供超类行为并调用 loadChildren 方法。子级不应在构造方法中加载,因为设置父级的操作可能会导致其尝试向上搜索层次结构(例如获得宿主 Container)。如果此视图具有子视图(将该视图从视图层次结构中的一个位置移到另一个位置),则不调用 loadChildren 方法。

覆盖:
View 中的 setParent
参数:
parent - 视图的父级,如果没有,则为 null

preferenceChanged

public void preferenceChanged(View child,
                              boolean width,
                              boolean height)
子视图可以在父级上调用此方法,以指示首选项已更改并且应该重新考虑布局。重新实现此方法可在布局线程上对新工作进行排队。此方法通过子视图获得来自多个线程的消息。

覆盖:
View 中的 preferenceChanged
参数:
child - 子视图
width - 如果已更改宽度首选项,则为 true
height - 如果已更改高度首选项,则为 true
另请参见:
JComponent.revalidate()

setSize

public void setSize(float width,
                    float height)
设置视图的大小。如果该视图缓存了任何布局信息,则此操作会导致视图进行布局处理。

由于主轴是异步更新的,并且应该是已平铺子级的和,所以对于主轴应忽略该调用。由于辅轴是很灵活的,所以如果辅跨距更改了,则将工作放入队列以调整子视图的大小。

覆盖:
View 中的 setSize
参数:
width - 宽度,该值 >= 0
height - 高度,该值 >= 0

paint

public void paint(Graphics g,
                  Shape alloc)
使用给定的分配和呈现表面呈现该视图。

实现此方法可确定要呈现的所需区域(如非剪贴区域)是否为最新的。如果是最新的,则呈现子视图。如果不是最新的,则将构建所需区域的任务作为最高优先级的任务放入布局队列中。在准备就绪时,此方法通过事件线程和渲染来持续运行,在尚未准备就绪时推迟一段时间(因为可以重新安排绘制请求)。

指定者:
View 中的 paint
参数:
g - 要使用的呈现表面
alloc - 要在其中进行呈现的已分配区域
另请参见:
View.paint(java.awt.Graphics, java.awt.Shape)

getPreferredSpan

public float getPreferredSpan(int axis)
确定此视图沿某轴的首选跨距。

指定者:
View 中的 getPreferredSpan
参数:
axis - 可以为 View.X_AXIS 或 View.Y_AXIS
返回:
视图可能要在其中呈现的跨距,该值 >= 0。通常会通知该视图呈现到返回的跨距中,但并不能保证。父级可选择重新调整视图大小或分解视图。
抛出:
IllegalArgumentException - 如果轴类型无效
另请参见:
View.getPreferredSpan(int)

getMinimumSpan

public float getMinimumSpan(int axis)
确定此视图沿某轴的最小跨距。

覆盖:
View 中的 getMinimumSpan
参数:
axis - 可以为 View.X_AXIS 或 View.Y_AXIS
返回:
视图可能要在其中呈现的跨距,该值 >= 0。通常会通知该视图呈现到返回的跨距中,但并不能保证。父级可选择重新调整视图大小或拆分视图。
抛出:
IllegalArgumentException - 如果轴类型无效
另请参见:
View.getPreferredSpan(int)

getMaximumSpan

public float getMaximumSpan(int axis)
确定此视图沿某轴的最大跨距。

覆盖:
View 中的 getMaximumSpan
参数:
axis - 可以为 View.X_AXIS 或 View.Y_AXIS
返回:
视图可能要在其中呈现的跨距,该值 >= 0。通常会通知该视图呈现到返回的跨距中,但并不能保证。父级可选择重新调整视图大小或拆分视图。
抛出:
IllegalArgumentException - 如果轴类型无效
另请参见:
View.getPreferredSpan(int)

getViewCount

public int getViewCount()
返回此视图中的视图数。由于默认不应是复合视图,因此此方法返回 0。

覆盖:
View 中的 getViewCount
返回:
视图数,该值 >= 0
另请参见:
View.getViewCount()

getView

public View getView(int n)
获得第 n 个子视图。由于默认没有子视图,所以此方法返回 null。

覆盖:
View 中的 getView
参数:
n - 要获得的视图编号,该值 >= 0 && < getViewCount()
返回:
视图

getChildAllocation

public Shape getChildAllocation(int index,
                                Shape a)
获取给定子视图的分配区域。这就允许找出各种视图的位置,而无需假定视图存储其位置。由于默认没有任何子视图,所以此方法返回 null。

覆盖:
View 中的 getChildAllocation
参数:
index - 子视图的索引,该值 >= 0 && < getViewCount()
a - 此视图的分配区域。
返回:
子视图的分配区域

getViewIndex

public int getViewIndex(int pos,
                        Position.Bias b)
返回该模型中表示给定位置的子视图索引。默认情况下视图没有子视图,所以此方法的实现返回 -1,以指示任何位置都没有有效的子视图索引。

覆盖:
View 中的 getViewIndex
参数:
pos - 位置,该值 >= 0
返回:
表示给定位置的视图的索引,如果没有视图表示该位置,则返回 -1
从以下版本开始:
1.3

modelToView

public Shape modelToView(int pos,
                         Shape a,
                         Position.Bias b)
                  throws BadLocationException
提供从文档模型坐标空间到所映射的视图坐标空间的映射。

指定者:
View 中的 modelToView
参数:
pos - 要转换的位置,该值 >= 0
a - 要呈现于其中的已分配区域
b - 在该位置是两个视图的边界时,为偏向前一个字符或下一个字符的偏差,由偏移量表示。
返回:
返回给定位置的边界框
抛出:
BadLocationException - 如果给定的位置不表示关联文档内的有效位置
IllegalArgumentException - 如果 bias 参数无效
另请参见:
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 对象执行锁定来确定其分配,以及通过对 ChildLocator 对象执行锁定对子视图调用 viewToModel,以避免与布局线程相互干扰。

指定者:
View 中的 viewToModel
参数:
x - X 坐标,该值 >= 0
y - Y 坐标,该值 >= 0
a - 要在其中进行呈现的已分配区域
返回:
模型中的位置,它可最佳地表示视图中的给定点,该值 >= 0。填入 biasReturn 参数可指示给定的点是靠近模型中的下一个字符还是模型中的前一个字符。

getNextVisualPositionFrom

public int getNextVisualPositionFrom(int pos,
                                     Position.Bias b,
                                     Shape a,
                                     int direction,
                                     Position.Bias[] biasRet)
                              throws BadLocationException
提供确定下一个以可视化形式表示的模型位置的方法,用户可以在此位置放置一个插入符。有些视图可能是不可见的,它们的顺序可能与模型中的顺序不同,或者它们可能不允许访问模型中的某些位置。

覆盖:
View 中的 getNextVisualPositionFrom
参数:
pos - 要转换的位置,该值 >= 0
a - 要在其中进行呈现的已分配区域
direction - 从当前位置开始的方向,可以将它们设想为通常可在键盘上找到的箭头键;可为下列值:
    SwingConstants.WEST SwingConstants.EAST SwingConstants.NORTH SwingConstants.SOUTH
biasRet - 包含要检查的偏差的数组
返回:
模型中的位置,它可最佳地以可视化定位方式表示视图中的下一个位置
抛出:
BadLocationException
IllegalArgumentException - 如果 direction 无效

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策