javax.swing.text

接口
异常
java.lang.Object
  继承者 javax.swing.text.View
所有已实现的接口:
SwingConstants
直接已知子类:
AsyncBoxView, ComponentView, CompositeView, GlyphView, IconView, ImageView, PlainView

public abstract class View
     
extends Object
implements SwingConstants

View 类是 text 包极为重要的一部分。顾名思义,其表示文本模型的一个视图或者文本模型的一部分。负责文本组件外观的正是此类。View 无意成为用户必须学习的全新内容,相反其更像是一个轻量级组件。

在默认情况下,视图是很轻量的。它包含一个对父视图的引用,由此能获取许多内容而无需保持状态,它还包含一个对模型 (Element) 某部分的引用。视图无需精确地表示模型中的元素,而只是使用一个典型而便利的映射。视图可以选择性地维护一对 Position 对象,从而维护其在模型中的位置(即表示一个元素段)。这通常是将视图拆分为片的格式化的结果。与元素坚固联系的便利之处在于使其更容易地构建工厂来生成视图,还能使其在模型更改时更容易地跟踪视图片,并且视图一定会更改视图来反映该模型。因此,简单的视图直接表示一个 Element,而复杂的视图并不如此。

视图具有以下责任:

参与布局。

视图有一个 setSize 方法,该方法如同 Component 中的 doLayoutsetSize 组合而成。视图有一个 preferenceChanged 方法,该方法与 Component 中的 invalidate 类似,但该方法可以仅使一个轴无效并标识请求更改的子级。

View 根据三个值(即最小跨距、首选跨距、最大跨距)来表示其所需的大小。视图中的布局可以在独立于每一个轴来完成。对于一个运行正常的 View 实现,将满足:最小跨距 <= 首选跨距 <= 最大跨距。

以上文本是对此图像的描述。

布局最小值的设置方法有:

方法 setSize 应当准备好被多次调用(即使在大小没有更改时也可能调用此方法)。通常调用 setSize 方法来确保试图在视图上执行需要更新布局的操作之前,已经完成了 View 布局。应该始终 将视图的大小设置为该视图所指定的最小跨距和最大跨距之间的某个值。此外,如果视图已经更改了其需要的布局值,并且希望其父级遵守该值,则必须一直在其父级上调用 preferenceChanged 方法。在发送了 preferenceChanged 之前,父 View 无需识别更改。如果需要的话,此类允许父 View 实现缓存子级的需求。调用序列如下所示:

父视图和子视图间的示例调用序列: 
       setSize, getMinimum, getPreferred, getMaximum, getAlignment, setSize

确切的调用序列取决于父视图的布局功能(如果该视图具有任何子级)。在决定提供给每个子级的内容之前,视图可能收集子级的优先权,或者其可能一次一个地迭代更新子级。

呈现模型的一部分。

这在 paint 方法中完成,该方法与组件的 paint 方法非常类似。期望 View 潜在地组装一个相当大的树。对于呈现,View 具有如下语义:

  • 视图在绘制时从其父级获取分配,因此如果分配的区域与其准备处理的区域不同,其必须准备重新执行布局。
  • 坐标系统与承载 Component(即由 getContainer 方法返回的 Component)相同。这意味着子视图与父级处于同一个坐标系统中,除非父级显式地改变了坐标系统。要安排重绘本身,视图可以在承载 Component 上调用 repaint。
  • 在默认情况下不剪贴 子级。允许视图只在真正需要剪贴的时候进行剪贴才更有效率。
  • 给定的 Graphics 对象没有以任何方式初始化。视图应该设置任何所需的设置。
  • View 本身是透明的。虽然视图可以呈现在其整个分配中,但通常视图不这么做。通过向下遍历 View 实现树来执行呈现。每个 View 负责呈现其子级。线程安全取决于此行为。虽然视图实现不必要在实现时考虑线程安全,但是其他确实利用了并发的视图实现可以依赖树遍历来保证线程安全。
  • 相对于模型的视图顺序由实现来决定。尽管子视图通常将按其在模型中出现的相同顺序被排列,但它们也可能以完全不同的顺序来可视地排列。如果子级是重叠的,View 实现可能具有一个与其相关联的 Z-顺序。

用于呈现的方法有:

在模型和视图坐标系统间转换。

因为视图对象产生自一个工厂,因而不能指望其必然处于某个特定模型,所以用户必须要能够执行转换以恰当地定位模型的空间表示形式。执行此操作的方法有:

在尝试进行转换之前布局必须有效。当通过 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
 

字段详细信息

BadBreakWeight

public static final int BadBreakWeight
该权重指示对于格式化来说视图未处于拆分的好时机。此值指示不应该尝试将视图拆分成段,因为该视图没有写入支持分段操作。

另请参见:
getBreakWeight(int, float, float), GoodBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, 常量字段值

GoodBreakWeight

public static final int GoodBreakWeight
该权重指示视图支持拆分,但是可能存在更好时机。

另请参见:
getBreakWeight(int, float, float), BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, 常量字段值

ExcellentBreakWeight

public static final int ExcellentBreakWeight
该权重指示视图支持拆分,并且表示拆分的极好时机。

另请参见:
getBreakWeight(int, float, float), BadBreakWeight, GoodBreakWeight, ForcedBreakWeight, 常量字段值

ForcedBreakWeight

public static final int ForcedBreakWeight
该权重指示视图支持拆分,并且在被置入一个通过拆分其子级来格式化子级的视图时,必须拆分该视图以恰当的表示它。

另请参见:
getBreakWeight(int, float, float), BadBreakWeight, GoodBreakWeight, ExcellentBreakWeight, 常量字段值

X_AXIS

public static final int X_AXIS
用于格式化/拆分操作的轴。

另请参见:
常量字段值

Y_AXIS

public static final int Y_AXIS
用于格式化/拆分操作的轴。

另请参见:
常量字段值
构造方法详细信息

View

public View(Element elem)
创建一个新的 View 对象。

参数:
elem - 要表示的 Element
方法详细信息

getParent

public View getParent()
返回视图的父级。

返回:
父级,如果不存在则返回 null

isVisible

public boolean isVisible()
返回一个指示视图是否可视的 boolean 值。在默认情况下所有视图都是可视的。

返回:
始终返回 true

getPreferredSpan

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

参数:
axis - 可能是 View.X_AXIS 或者 View.Y_AXIS
返回:
视图想要在其中呈现的跨距。通常告知视图呈现在返回的跨距中,但并不保证如此。父级可能选择调整视图大小或者拆分视图。
另请参见:
getPreferredSpan(int)

getMinimumSpan

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

参数:
axis - 可能是 View.X_AXIS 或者 View.Y_AXIS
返回:
视图能在其中呈现的最小跨距。
另请参见:
getPreferredSpan(int)

getMaximumSpan

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

参数:
axis - 可能是 View.X_AXIS 或者 View.Y_AXIS
返回:
视图能在其中呈现的最大跨距。
另请参见:
getPreferredSpan(int)

preferenceChanged

public void preferenceChanged(View child,
                              boolean width,
                              boolean height)
子视图能在父级上调用此方法来指示首选项已经更改,并且应该重新考虑布局。在默认情况下,此方法仅仅上传播到下一个父级。根视图将在相关联的文本组件上调用 revalidate

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

getAlignment

public float getAlignment(int axis)
确定此视图沿某个轴所需的对齐方式。返回所需的对齐方式。这应该是一个 >= 0.0 并且 <= 1.0 的值,其中 0 指示在起始处对齐,1.0 指示在离起始处的整个跨距的地方对齐。0.5 则指示在视图中央对齐。

参数:
axis - 可能是 View.X_AXIS 或者 View.Y_AXIS
返回:
值 0.5

paint

public abstract void paint(Graphics g,
                           Shape allocation)
使用给定的呈现表面和该表面上的区域来呈现。该视图可能需要进行布置和创建子视图,以使它本身能够在给定的分配区域呈现。

参数:
g - 要使用的呈现表面
allocation - 分配的要在其中呈现的区域

setParent

public void setParent(View parent)
为此视图建立父视图。如果父视图运行正常,则会保证在其他任何方法之前调用此方法。这也是最后调用的一个方法,因为也调用其来指示已从层次结构中移除视图。当调用此方法来将父级设置为 null 时,此方法对每一个子级执行同样操作,传播它们已经从视图树中断开连接的通知。如果重新实现此方法,应该调用 super.setParent()

参数:
parent - 新的父级,如果要从父级中移除视图,则为 null

getViewCount

public int getViewCount()
返回此视图中的视图数。因为默认情况下不是一个复合视图,所以此方法返回 0。

返回:
视图数,该值 >= 0
另请参见:
getViewCount()

getView

public View getView(int n)
获取第 n 个子视图。因为在默认情况下没有任何子级,所以此方法返回 null

参数:
n - 要获取的视图的编号,该值 >= 0 && < getViewCount()
返回:
视图

removeAll

public void removeAll()
移除所有子级。此方法是 replace 的便捷调用。

从以下版本开始:
1.3

remove

public void remove(int i)
移除给定位置处的一个子级。此方法是 replace 的便捷调用。

从以下版本开始:
1.3

insert

public void insert(int offs,
                   View v)
插入单个子视图。此方法是 replace 的便捷调用。

参数:
offs - 要其前插入视图的偏移量,该值 >= 0
v - 视图
从以下版本开始:
1.3
另请参见:
replace(int, int, javax.swing.text.View[])

append

public void append(View v)
追加单个子视图。此方法是 replace 的便捷调用。

参数:
v - 视图
从以下版本开始:
1.3
另请参见:
replace(int, int, javax.swing.text.View[])

replace

public void replace(int offset,
                    int length,
                    View[] views)
替代子视图。如果没有任何视图要移除,则此方法充当一个插入操作。如果没有任何视图要添加,则此方法充当一个移除操作。将要被移除的视图会将其父级设置为 null,并且移除对它们的内部引用以便能被垃圾回收。实现此方法以不执行任何操作,因为默认情况下视图没有任何子级。

参数:
offset - 子视图中插入新 views 的起始索引。这应当是一个 >= 0 并且 <= getViewCount 的值
length - 要移除的已存在的子视图数 这应当是一个 >= 0 并且 <= (getViewCount() - offset) 的值。
views - 要添加的子视图。此值可以为 null,指示当前不添加任何子级(移除时很有用)
从以下版本开始:
1.3

getViewIndex

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

参数:
pos - 位置,该值 >= 0
返回:
表示给定位置的视图索引,如果没有任何视图表示该位置,则返回 -1

getChildAllocation

public Shape getChildAllocation(int index,
                                Shape a)
获取给定子视图的分配。这使得在没有假定视图如何存储其位置的情况下,能找出各种视图的定位。因为默认情况下没有任何子视图,所以此方法返回 null

参数:
index - 子级的索引,该值 >= 0 && < getViewCount()
a - 此视图的分配
返回:
子级的分配

getNextVisualPositionFrom

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

参数:
pos - 要转换的位置,该值 >= 0
a - 为呈现分配的区域
direction - 以当前位置开始的方向,可以将它们设想为通常出现在键盘上的箭头键。它将是以下值之一:
  • SwingConstants.WEST