java.lang.Object javax.swing.text.View
public abstract class View
View
类是 text 包极为重要的一部分。顾名思义,其表示文本模型的一个视图或者文本模型的一部分。负责文本组件外观的正是此类。View 无意成为用户必须学习的全新内容,相反其更像是一个轻量级组件。
在默认情况下,视图是很轻量的。它包含一个对父视图的引用,由此能获取许多内容而无需保持状态,它还包含一个对模型 (Element
) 某部分的引用。视图无需精确地表示模型中的元素,而只是使用一个典型而便利的映射。视图可以选择性地维护一对 Position 对象,从而维护其在模型中的位置(即表示一个元素段)。这通常是将视图拆分为片的格式化的结果。与元素坚固联系的便利之处在于使其更容易地构建工厂来生成视图,还能使其在模型更改时更容易地跟踪视图片,并且视图一定会更改视图来反映该模型。因此,简单的视图直接表示一个 Element,而复杂的视图并不如此。
视图具有以下责任:
视图有一个 setSize
方法,该方法如同 Component
中的 doLayout
和 setSize
组合而成。视图有一个 preferenceChanged
方法,该方法与 Component
中的 invalidate
类似,但该方法可以仅使一个轴无效并标识请求更改的子级。
View 根据三个值(即最小跨距、首选跨距、最大跨距)来表示其所需的大小。视图中的布局可以在独立于每一个轴来完成。对于一个运行正常的 View 实现,将满足:最小跨距 <= 首选跨距 <= 最大跨距。
布局最小值的设置方法有:
方法 setSize
应当准备好被多次调用(即使在大小没有更改时也可能调用此方法)。通常调用 setSize
方法来确保试图在视图上执行需要更新布局的操作之前,已经完成了 View 布局。应该始终 将视图的大小设置为该视图所指定的最小跨距和最大跨距之间的某个值。此外,如果视图已经更改了其需要的布局值,并且希望其父级遵守该值,则必须一直在其父级上调用 preferenceChanged
方法。在发送了 preferenceChanged
之前,父 View 无需识别更改。如果需要的话,此类允许父 View 实现缓存子级的需求。调用序列如下所示:
确切的调用序列取决于父视图的布局功能(如果该视图具有任何子级)。在决定提供给每个子级的内容之前,视图可能收集子级的优先权,或者其可能一次一个地迭代更新子级。
这在 paint 方法中完成,该方法与组件的 paint 方法非常类似。期望 View 潜在地组装一个相当大的树。对于呈现,View
具有如下语义:
Component
(即由 getContainer 方法返回的 Component
)相同。这意味着子视图与父级处于同一个坐标系统中,除非父级显式地改变了坐标系统。要安排重绘本身,视图可以在承载 Component
上调用 repaint。 Graphics
对象没有以任何方式初始化。视图应该设置任何所需的设置。 View
本身是透明的。虽然视图可以呈现在其整个分配中,但通常视图不这么做。通过向下遍历 View
实现树来执行呈现。每个 View
负责呈现其子级。线程安全取决于此行为。虽然视图实现不必要在实现时考虑线程安全,但是其他确实利用了并发的视图实现可以依赖树遍历来保证线程安全。 用于呈现的方法有:
因为视图对象产生自一个工厂,因而不能指望其必然处于某个特定模型,所以用户必须要能够执行转换以恰当地定位模型的空间表示形式。执行此操作的方法有:
在尝试进行转换之前布局必须有效。当通过 DocumentEvent
从模型广播更改时,转换无效并且禁止尝试。
如果总体视图由多片(如果希望更改视图并写入最小数量的新代码,这是最佳的情形)表示,而具有大量的 DocumentListener
是不现实的。如果每个视图都侦听模型,在任意给定的时间上,仅有少数视图可能对所广播的更改实际感兴趣。因为模型不了解视图,所以没有方法来过滤更改信息的广播。视图层次结构本身就代为负责传播更改信息。在视图层次结构的任何一层上,视图都足够了解其子级,从而能最佳地进一步分发更改信息。因此,更改从视图层次结构的根开始广播。执行此操作的方法有:
字段摘要 | |
---|---|
static int |
BadBreakWeight 该权重指示对于格式化来说视图未处于拆分的好时机。 |
static int |
ExcellentBreakWeight 该权重指示视图支持拆分,并且表示拆分的极好时机。 |
static int |
ForcedBreakWeight 该权重指示视图支持拆分,并且在被置入一个通过拆分其子级来格式化子级的视图时,必须拆分该视图以恰当的表示它。 |
static int |
GoodBreakWeight 该权重指示视图支持拆分,但是可能存在更好时机。 |
static int |
X_AXIS 用于格式化/拆分操作的轴。 |
static int |
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 |
构造方法摘要 | |
---|---|
View(Element elem) 创建一个新的 View 对象。 |
方法摘要 | |
---|---|
void |
append(View v) 追加单个子视图。 |
View |
breakView(int axis, int offset, float pos, float len) 试图在给定的轴上拆分视图。 |
void |
changedUpdate(DocumentEvent e, Shape a, ViewFactory f) 发出通知,通知文档此视图负责的位置处的属性已更改。 |
View |
createFragment(int p0, int p1) 创建一个表示元素某部分的视图。 |
protected void |
forwardUpdate(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a, ViewFactory f) 将给定的 DocumentEvent 转发给需要被通知模型更改的子视图。 |
protected void |
forwardUpdateToView(View v, DocumentEvent e, Shape a, ViewFactory f) 将 DocumentEvent 转发到给定的子视图。 |
float |
getAlignment(int axis) 确定此视图沿某个轴所需的对齐方式。 |
AttributeSet |
getAttributes() 获取呈现时要使用的属性。 |
int |
getBreakWeight(int axis, float pos, float len) 确定此视图中拆分时机的权重大小。 |
Shape |
getChildAllocation(int index, Shape a) 获取给定子视图的分配。 |
Container |
getContainer() 获取承载视图的容器。 |
Document |
getDocument() 获取与视图关联的模型。 |
Element |
getElement() 获取此视图所映射的主题的结构化部分。 |
int |
getEndOffset() 获取此视图负责的模型的一部分。 |
Graphics |
getGraphics() 获取用于呈现的 Graphics 。 |
float |
getMaximumSpan(int axis) 确定此视图沿某个轴的最大跨距。 |
float |
getMinimumSpan(int axis) 确定此视图沿某个轴的最小跨距。 |
int |
getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet) 提供某种途径来确定可以放置一个插入符的下一个可视表示模型位置。 |
View |
getParent() 返回视图的父级。 |
abstract float |
getPreferredSpan(int axis) 确定此视图沿某个轴的首选跨距。 |
int |
getResizeWeight(int axis) 确定视图沿给定轴的大小可调整性。 |
int |
getStartOffset() 获取此视图负责的模型的一部分。 |
String |
getToolTipText(float x, float y, Shape allocation) 返回提定位置的工具提示文本。 |
View |
getView(int n) 获取第 n 个子视图。 |
int |
getViewCount() 返回此视图中的视图数。 |
ViewFactory |
getViewFactory() 获取将提供给视图层次结构的 ViewFactory 实现。 |
int |
getViewIndex(float x, float y, Shape allocation) 返回表示视图中给定位置的子视图索引。 |
int |
getViewIndex(int pos, Position.Bias b) 返回表示模型中给定位置的子视图索引。 |
void |
insert(int offs, View v) 插入单个子视图。 |
void |
insertUpdate(DocumentEvent e, Shape a, ViewFactory f) 发出通知,通知在文档中此视图负责的某个位置已插入内容。 |
boolean |
isVisible() 返回一个指示视图是否可视的 boolean 值。 |
Shape |
modelToView(int p0, Position.Bias b0, int p1, Position.Bias b1, Shape a) 为给定区域提供从文档模型坐标空间到视图坐标空间的映射。 |
Shape |
modelToView(int pos, Shape a) 已过时。 |
abstract Shape |
modelToView(int pos, Shape a, Position.Bias b) 为给定字符提供从文档模型坐标空间到视图坐标空间的映射。 |
abstract void |
paint(Graphics g, Shape allocation) 使用给定的呈现表面和该表面上的区域来呈现。 |
void |
preferenceChanged(View child, boolean width, boolean height) 子视图能在父级上调用此方法来指示首选项已经更改,并且应该重新考虑布局。 |
void |
remove(int i) 移除给定位置处的一个子级。 |
void |
removeAll() 移除所有子级。 |
void |
removeUpdate(DocumentEvent e, Shape a, ViewFactory f) 给出从文档中此视图负责的位置移除了某些内容的通知。 |
void |
replace(int offset, int length, View[] views) 替代子视图。 |
void |
setParent(View parent) 为此视图建立父视图。 |
void |
setSize(float width, float height) 设置视图的大小。 |
protected boolean |
updateChildren(DocumentEvent.ElementChange ec, DocumentEvent e, ViewFactory f) 更新子视图以响应接收模型变化的通知,并且有一条此视图负责的元素的变化记录。 |
protected void |
updateLayout(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a) 更新布局,以响应从模型接受的更改通知。 |
int |
viewToModel(float x, float y, Shape a) 已过时。 |
abstract 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 |
字段详细信息 |
---|
public static final int BadBreakWeight
public static final int GoodBreakWeight
public static final int ExcellentBreakWeight
public static final int ForcedBreakWeight
public static final int X_AXIS
public static final int Y_AXIS
构造方法详细信息 |
---|
public View(Element elem)
View
对象。
elem
- 要表示的
Element
方法详细信息 |
---|
public View getParent()
null
public boolean isVisible()
public abstract float getPreferredSpan(int axis)
axis
- 可能是
View.X_AXIS
或者
View.Y_AXIS
getPreferredSpan(int)
public float getMinimumSpan(int axis)
axis
- 可能是
View.X_AXIS
或者
View.Y_AXIS
getPreferredSpan(int)
public float getMaximumSpan(int axis)
axis
- 可能是
View.X_AXIS
或者
View.Y_AXIS
getPreferredSpan(int)
public void preferenceChanged(View child, boolean width, boolean height)
revalidate
。
child
- 子视图
width
- 如果宽度首选项更改,则该参数为 true
height
- 如果高度首选项更改,则该参数为 true
JComponent.revalidate()
public float getAlignment(int axis)
axis
- 可能是
View.X_AXIS
或者
View.Y_AXIS
public abstract void paint(Graphics g, Shape allocation)
g
- 要使用的呈现表面
allocation
- 分配的要在其中呈现的区域
public void setParent(View parent)
super.setParent()
。
parent
- 新的父级,如果要从父级中移除视图,则为
null
public int getViewCount()
getViewCount()
public View getView(int n)
null
。
n
- 要获取的视图的编号,该值 >= 0 && < getViewCount()
public void removeAll()
replace
的便捷调用。
public void remove(int i)
replace
的便捷调用。
public void insert(int offs, View v)
replace
的便捷调用。
offs
- 要其前插入视图的偏移量,该值 >= 0
v
- 视图
replace(int, int, javax.swing.text.View[])
public void append(View v)
replace
的便捷调用。
v
- 视图
replace(int, int, javax.swing.text.View[])
public void replace(int offset, int length, View[] views)
null
,并且移除对它们的内部引用以便能被垃圾回收。实现此方法以不执行任何操作,因为默认情况下视图没有任何子级。
offset
- 子视图中插入新 views 的起始索引。这应当是一个 >= 0 并且 <= getViewCount 的值
length
- 要移除的已存在的子视图数 这应当是一个 >= 0 并且 <= (getViewCount() - offset) 的值。
views
- 要添加的子视图。此值可以为
null
,指示当前不添加任何子级(移除时很有用)
public int getViewIndex(int pos, Position.Bias b)
pos
- 位置,该值 >= 0
public Shape getChildAllocation(int index, Shape a)
null
。
index
- 子级的索引,该值 >= 0 && <
getViewCount()
a
- 此视图的分配
public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet) throws BadLocationException
pos
- 要转换的位置,该值 >= 0
a
- 为呈现分配的区域
direction
- 以当前位置开始的方向,可以将它们设想为通常出现在键盘上的箭头键。它将是以下值之一: