- java.lang.Object
-
- javax.swing.text.View
-
- javax.swing.text.CompositeView
-
- javax.swing.text.BoxView
-
- All Implemented Interfaces:
-
SwingConstants
- 已知直接子类:
-
BlockView
,FlowView
,TableView
,TableView.TableCell
,TableView.TableRow
,WrappedPlainView
,ZoneView
public class BoxView extends CompositeView
通过沿着一条轴平铺儿童,将孩子们排列成盒子形状的观点。 盒子有点像TeX中发现的那样,孩子们有一致性,孩子们的灵活性被考虑在内。等等。这是一个构建块,可能有用的代表一些行,段落,列表,列,页面等。孩子们平铺的轴被认为是主轴。 正交轴是短轴。每个轴的布局由方法
layoutMajorAxis
和layoutMinorAxis
分开处理。 子类可以通过重新实现这些方法来改变布局算法。 这些方法将根据是否有高速缓存的布局信息和高速缓存被视为有效而被调用。 如果沿着轴的给定尺寸发生变化,或者如果调用了layoutChanged
来强制更新的布局,则通常会调用这些方法。layoutChanged
方法使缓存的布局信息无效,如果有的话。 发布到父视图的要求通过方法calculateMajorAxisRequirements
和calculateMinorAxisRequirements
计算。 如果布局算法改变了,这些方法可能需要重新实现。
-
-
Field Summary
-
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
-
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 protected void
baselineLayout(int targetSpan, int axis, int[] offsets, int[] spans)
计算BoxView
中每个子视图的位置和范围,这是targetSpan
,这是我们必须使用的区域的宽度(或高度)。protected SizeRequirements
baselineRequirements(int axis, SizeRequirements r)
通过检查每个子视图的大小来计算BoxView
的大小要求。protected SizeRequirements
calculateMajorAxisRequirements(int axis, SizeRequirements r)
计算长轴axis
的尺寸要求。protected SizeRequirements
calculateMinorAxisRequirements(int axis, SizeRequirements r)
计算短轴axis
的尺寸要求。protected void
childAllocation(int index, Rectangle alloc)
为子视图分配一个区域。protected boolean
flipEastAndWestAtEnds(int position, Position.Bias bias)
确定下一个视图放在哪个方向。protected void
forwardUpdate(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a, ViewFactory f)
将给定的DocumentEvent
转发给需要通知模型更改的子视图。float
getAlignment(int axis)
确定沿着轴的该视图的所需对准。int
getAxis()
获取瓦片轴属性。Shape
getChildAllocation(int index, Shape a)
获取给定子视图的分配。int
getHeight()
返回框的当前高度。float
getMaximumSpan(int axis)
确定沿着轴的该视图的最大跨度。float
getMinimumSpan(int axis)
确定此视图沿轴的最小跨度。protected int
getOffset(int axis, int childIndex)
获取特定小孩当前布局的偏移量。float
getPreferredSpan(int axis)
确定沿着轴的此视图的首选跨度。int
getResizeWeight(int axis)
获得调整重量。protected int
getSpan(int axis, int childIndex)
获取特定小孩当前布局的跨度。protected View
getViewAtPoint(int x, int y, Rectangle alloc)
在给定坐标处获取子视图。int
getWidth()
返回框的当前宽度。protected boolean
isAfter(int x, int y, Rectangle innerAlloc)
确定一个点是否落在分配的区域之后。protected boolean
isAllocationValid()
孩子的分配是否仍然有效?protected boolean
isBefore(int x, int y, Rectangle innerAlloc)
确定一个点是否落在分配的区域之前。protected boolean
isLayoutValid(int axis)
确定布局是否沿着给定的轴有效。protected void
layout(int width, int height)
在框上执行布局void
layoutChanged(int axis)
沿着轴使布局无效。protected void
layoutMajorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
执行框的主轴的布局(即它所表示的轴)。protected void
layoutMinorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
执行框的短轴的布局(即与其所表示的轴正交的轴)。Shape
modelToView(int pos, Shape a, Position.Bias b)
提供从文档模型坐标空间映射到映射到它的视图的坐标空间的映射。void
paint(Graphics g, Shape allocation)
使用给定的渲染表面和该表面上的区域渲染BoxView
。protected void
paintChild(Graphics g, Rectangle alloc, int index)
涂一个孩子void
preferenceChanged(View child, boolean width, boolean height)
这是由一个孩子调用来指示其首选跨度已更改。void
replace(int index, int length, View[] elems)
使布局无效,并调整请求/分配缓存的大小。void
setAxis(int axis)
设置瓦片轴属性。void
setSize(float width, float height)
设置视图的大小。int
viewToModel(float x, float y, Shape a, Position.Bias[] bias)
提供从视图坐标空间到模型的逻辑坐标空间的映射。-
Methods inherited from class javax.swing.text.CompositeView
getBottomInset, getInsideAllocation, getLeftInset, getNextEastWestVisualPositionFrom, getNextNorthSouthVisualPositionFrom, getNextVisualPositionFrom, getRightInset, getTopInset, getView, getViewAtPosition, getViewCount, getViewIndex, getViewIndexAtPosition, loadChildren, modelToView, setInsets, setParagraphInsets, setParent
-
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, forwardUpdateToView, getAttributes, getBreakWeight, getContainer, getDocument, getElement, getEndOffset, getGraphics, getParent, getStartOffset, getToolTipText, getViewFactory, getViewIndex, insert, insertUpdate, isVisible, modelToView, remove, removeAll, removeUpdate, updateChildren, updateLayout, viewToModel
-
-
-
-
构造方法详细信息
-
BoxView
public BoxView(Element elem, int axis)
构造一个BoxView
。- 参数
-
elem
- 该视图负责的元素 -
axis
-View.X_AXIS
或View.Y_AXIS
-
-
方法详细信息
-
getAxis
public int getAxis()
获取瓦片轴属性。 这是儿童视图平铺的轴。- 结果
-
盒子的主轴,
View.X_AXIS
或View.Y_AXIS
- 从以下版本开始:
- 1.3
-
setAxis
public void setAxis(int axis)
设置瓦片轴属性。 这是儿童视图平铺的轴。- 参数
-
axis
-View.X_AXIS
或View.Y_AXIS
- 从以下版本开始:
- 1.3
-
layoutChanged
public void layoutChanged(int axis)
沿着轴使布局无效。 如果任何子视图的首选项已更改,则会自动发生。 在某些情况下,当首选项没有改变时,布局可能需要重新计算。 调用此方法可以将布局标记为无效。 下一次在此视图上调用setSize
方法(通常在油漆中),布局将会更新。- 参数
-
axis
-View.X_AXIS
或View.Y_AXIS
- 从以下版本开始:
- 1.3
-
isLayoutValid
protected boolean isLayoutValid(int axis)
确定布局是否沿着给定的轴有效。- 参数
-
axis
-View.X_AXIS
或View.Y_AXIS
- 结果
- 如果布局沿给定轴有效
- 从以下版本开始:
- 1.4
-
paintChild
protected void paintChild(Graphics g, Rectangle alloc, int index)
涂一个孩子 默认情况下,这是所有它,但是一个子类可以使用它来绘制相对于孩子的东西。- 参数
-
g
- 图形上下文 -
alloc
- 要分配的区域 -
index
- 子索引> = 0 && <getViewCount()
-
replace
public void replace(int index, int length, View[] elems)
使布局无效,并调整请求/分配缓存的大小。 孩子的分配仍然可以被访问旧的布局,但新的孩子将有一个偏移和跨度为0。- 重写:
-
replace
在CompositeView
- 参数
-
index
- 将子视图的起始索引插入新视图; 这应该是一个值> = 0和<= getViewCount -
length
- 要删除的现有子视图数; 这应该是一个值> = 0和<=(getViewCount() - offset) -
elems
- 子视图添加; 此值可以是null
以表示没有添加子项(可用于删除)
-
forwardUpdate
protected void forwardUpdate(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a, ViewFactory f)
将给定的DocumentEvent
转发给需要通知模型更改的子视图。 如果孩子改变了要求,并且在转发盒子的一部分从开始的孩子到盒子的末尾之前分配是有效的将被重新绘制。- 重写:
-
forwardUpdate
在View
- 参数
-
ec
- 对此视图负责的元素的更改(如果没有更改,可能为null
) -
e
- 相关文件的变更信息 -
a
- 视图的当前分配 -
f
- 如果视图有孩子,工厂要重建 - 从以下版本开始:
- 1.3
- 另请参见:
-
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)
-
preferenceChanged
public void preferenceChanged(View child, boolean width, boolean height)
这是由一个孩子调用来指示其首选跨度已更改。 这是为了丢弃缓存的布局信息,以便在下次孩子需要分配时进行新的计算。- 重写:
-
preferenceChanged
在View
- 参数
-
child
- 子视图 -
width
- 如果宽度偏好应该更改,width
true -
height
- 如果高度偏好应该更改,height
true - 另请参见:
-
JComponent.revalidate()
-
getResizeWeight
public int getResizeWeight(int axis)
获得调整重量。 0或更小的值不能调整大小。- 重写:
-
getResizeWeight
在View
- 参数
-
axis
- 可以是View.X_AXIS
或View.Y_AXIS
- 结果
- 重量
- 异常
-
IllegalArgumentException
- 对于无效轴
-
setSize
public void setSize(float width, float height)
设置视图的大小。 如果视图缓存任何布局信息,这将导致视图的布局。 这被实现为调用布局方法与尺寸内插入。
-
paint
public void paint(Graphics g, Shape allocation)
使用给定的渲染表面和该表面上的区域渲染BoxView
。 只有与给定的Graphics
的剪辑边界相交的孩子才会呈现。- Specified by:
-
paint
在View
- 参数
-
g
- 要使用的渲染表面 -
allocation
- 要分配的区域 - 另请参见:
-
View.paint(java.awt.Graphics, java.awt.Shape)
-
getChildAllocation
public Shape getChildAllocation(int index, Shape a)
获取给定子视图的分配。 这可以找出各种视图所在的位置。 如果布局无效,则实现返回null
,否则执行超类行为。- 重写:
-
getChildAllocation
在CompositeView
- 参数
-
index
- 小孩的索引> = 0 &&> getViewCount() -
a
- 这个视图的分配 - 结果
-
分配给孩子;
或
null
如果a
是null
; 或者如果布局无效,null
-
modelToView
public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException
提供从文档模型坐标空间映射到映射到它的视图的坐标空间的映射。 这将确保在调用超类之前分配是有效的。- 重写:
-
modelToView
在CompositeView
- 参数
-
pos
- 转换> = 0的位置 -
a
- 要分配的区域 -
b
- 偏差值为Position.Bias.Forward
或Position.Bias.Backward
- 结果
- 给定位置的边界框
- 异常
-
BadLocationException
- 如果给定的位置不表示相关文档中的有效位置 - 另请参见:
-
View.modelToView(int, java.awt.Shape, javax.swing.text.Position.Bias)
-
viewToModel
public int viewToModel(float x, float y, Shape a, Position.Bias[] bias)
提供从视图坐标空间到模型的逻辑坐标空间的映射。- 重写:
-
viewToModel
在CompositeView
- 参数
-
x
- 要转换的视图位置的x坐标> = 0 -
y
- 要转换的视图位置的y坐标> = 0 -
a
- 要分配的区域 -
bias
-Position.Bias.Forward
或Position.Bias.Backward
- 结果
- 模型中的位置最好地表示视图> = 0中的给定点
- 另请参见:
-
View.viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])
-
getAlignment
public float getAlignment(int axis)
确定沿着轴的该视图的所需对准。 这是为了给出所需的总体对准,以使对准点沿着正在平铺的轴线的轴线排列。 平铺的轴将要求居中(即0.5f)。- 重写:
-
getAlignment
在View
- 参数
-
axis
- 可以是View.X_AXIS
或View.Y_AXIS
- 结果
- 所需的对齐方式> = 0.0f && <= 1.0f; 这应该是0.0和1.0之间的值,其中0表示原点对齐,1.0表示与原点的全跨距对齐; 0.5的对齐将是视野的中心
- 异常
-
IllegalArgumentException
- 对于无效轴
-
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)
-
isAllocationValid
protected boolean isAllocationValid()
孩子的分配是否仍然有效?- 结果
- 如果分配仍然有效,则为true
-
isBefore
protected boolean isBefore(int x, int y, Rectangle innerAlloc)
确定一个点是否落在分配的区域之前。- Specified by:
-
isBefore
在CompositeView
- 参数
-
x
- X坐标> = 0 -
y
- Y坐标> = 0 -
innerAlloc
- 分配区域; 这是插图内的区域 - 结果
- 如果点位于区域之前,则为真
-
isAfter
protected boolean isAfter(int x, int y, Rectangle innerAlloc)
确定一个点是否落在分配的区域之后。- Specified by:
-
isAfter
在CompositeView
- 参数
-
x
- X坐标> = 0 -
y
- Y坐标> = 0 -
innerAlloc
- 分配区域; 这是插图内的区域 - 结果
- 如果点位于区域之后,则为真
-
getViewAtPoint
protected View getViewAtPoint(int x, int y, Rectangle alloc)
在给定坐标处获取子视图。- Specified by:
-
getViewAtPoint
在CompositeView
- 参数
-
x
- X坐标> = 0 -
y
- Y坐标> = 0 -
alloc
- 父母在入境时的内部分配,应在退出时更改为小孩的分配 - 结果
- 风景
-
childAllocation
protected void childAllocation(int index, Rectangle alloc)
为子视图分配一个区域。- Specified by:
-
childAllocation
在CompositeView
- 参数
-
index
- 要分配的子视图的索引,> = 0 && <getViewCount() -
alloc
- 分配的区域
-
layout
protected void layout(int width, int height)
在框上执行布局- 参数
-
width
- 宽度(内width
)> = 0 -
height
- 高度(内height
)> = 0
-
getWidth
public int getWidth()
返回框的当前宽度。 这是最后一次分配的宽度。- 结果
- 当前宽度的框
-
getHeight
public int getHeight()
返回框的当前高度。 这是最后一次分配的高度。- 结果
- 当前的盒子高度
-
layoutMajorAxis
protected void layoutMajorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
执行框的主轴的布局(即它所表示的轴)。 布局的结果(每个孩子的偏移量和跨度)被放置在给定的数组中,这些数组表示沿着长轴的子项的分配。- 参数
-
targetSpan
- 给予视图的总跨度,这将用于布局孩子 -
axis
- 轴被axis
-
offsets
- 每个子视图的视图起点的偏移量; 这是一个返回值并通过执行此方法填写 -
spans
- 每个子视图的跨度; 这是一个返回值并通过执行此方法填写
-
layoutMinorAxis
protected void layoutMinorAxis(int targetSpan, int axis, int[] offsets, int[] spans)
执行框的短轴的布局(即与其所表示的轴正交的轴)。 布局的结果(每个孩子的偏移量和跨度)被放置在给定的数组中,这些数组表示沿着短轴的子项的分配。- 参数
-
targetSpan
- 给予视图的总跨度,用于布局孩子 -
axis
- 轴被axis
-
offsets
- 每个子视图的视图起点的偏移量; 这是一个返回值并通过执行此方法填写 -
spans
- 每个子视图的跨度; 这是一个返回值并通过执行此方法填写
-
calculateMajorAxisRequirements
protected SizeRequirements calculateMajorAxisRequirements(int axis, SizeRequirements r)
计算长轴axis
的尺寸要求。- 参数
-
axis
- 正在研究的轴 -
r
-SizeRequirements
对象; 如果null
将创建一个 - 结果
-
新初始化的
SizeRequirements
对象 - 另请参见:
-
SizeRequirements
-
calculateMinorAxisRequirements
protected SizeRequirements calculateMinorAxisRequirements(int axis, SizeRequirements r)
计算短轴axis
的尺寸要求。- 参数
-
axis
- 正在研究的轴 -
r
-SizeRequirements
对象; 如果null
将创建一个 - 结果
-
新初始化的
SizeRequirements
对象 - 另请参见:
-
SizeRequirements
-
baselineLayout
protected void baselineLayout(int targetSpan, int axis, int[] offsets, int[] spans)
计算BoxView
的每个子视图的位置和范围,给出targetSpan
,这是我们必须处理的区域的宽度(或高度)。- 参数
-
targetSpan
- 给予视图的总跨度,用于布局孩子 -
axis
- 正在研究的轴,View.X_AXIS
或View.Y_AXIS
-
offsets
- 由此方法填充的空数组,其值指定每个子视图的位置 -
spans
- 由此方法填充的空数组,其值指定每个子视图的范围
-
baselineRequirements
protected SizeRequirements baselineRequirements(int axis, SizeRequirements r)
通过检查每个子视图的大小来计算BoxView
的大小要求。- 参数
-
axis
- 正在研究的轴 -
r
-SizeRequirements
对象; 如果null
将创建一个 - 结果
-
新初始化的
SizeRequirements
对象
-
getOffset
protected int getOffset(int axis, int childIndex)
获取特定小孩当前布局的偏移量。- 参数
-
axis
- 正在研究的轴 -
childIndex
- 请求的孩子的索引 - 结果
- 指定孩子的偏移量(位置)
-
getSpan
protected int getSpan(int axis, int childIndex)
获取特定小孩当前布局的跨度。- 参数
-
axis
- 正在研究的轴 -
childIndex
- 所请求的孩子的索引 - 结果
- 指定子项的跨度(宽度或高度)
-
flipEastAndWestAtEnds
protected boolean flipEastAndWestAtEnds(int position, Position.Bias bias)
确定下一个视图放在哪个方向。 考虑索引n的视图。 通常,View
,以便EAST的View
将处于索引n + 1,而WEST的View
将处于索引n-1。在某些情况下,例如具有双向文本,EAST的View
可能不在索引n + 1,而是索引n-1,或者WEST的View
不在索引n-1,而是索引n + 1。在这种情况下,方法将返回true,表示View
以降序排列。 否则方法将返回false,表示View
是按升序排列的。如果接收
View
在沿着Y_AXIS
放置其View
,则将返回值为position
和bias
position
和bias
的View
调用相同的方法。 否则这将返回false。- 重写:
-
flipEastAndWestAtEnds
在CompositeView
- 参数
-
position
- 进入模型的位置 -
bias
-Position.Bias.Forward
或Position.Bias.Backward
- 结果
-
如果真
View
周边安全的View
响应用于渲染position
和bias
按降序奠定了; 否则为虚假
-
-