所有类


javax.swing.text
类 View

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 无意成为用户必须学习的全新内容,相反其更像是一个轻量级组件。事实上,最初的 View 实现就是一个轻量级组件。抛弃了 Component 实现这个替代方案有几个原因。

  1. 在 JDK 的 1.1 版中,几乎没有时间来获得轻量级组件的支持。要将组件减轻到满足用于文本所需的地步不仅仅是时间问题。对 JComponent 所做的额外处理增大了内存消耗,并且按照当前情况看来,其对于呈现文本而言仍然过重。

  2. 布局语义不是很适合文本,而更改组件的当前布局语义有可能破坏现有的应用程序。

  3. 组件 api 使用整数,但是在 1.2 中,用户可以使用与设备无关的浮点坐标。对 1.1 和 1.2 都有效的 api 便于最小化过渡困难。View 类使用 Shape 接口和 float 参数来使 View 实现能在 Java 2 平台 v1.2 及其之后的版本使用,同时在更老的 JDK 1.1 中也能运行。

在默认情况下,视图是很轻量的。它包含一个对父视图的引用,由此能获取许多内容而无需保持状态,它还包含一个对模型 (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 intBadBreakWeight
          该权重指示对于格式化来说视图未处于拆分的好时机。
static intExcellentBreakWeight
          该权重指示视图支持拆分,并且表示拆分的极好时机。
static intForcedBreakWeight
          该权重指示视图支持拆分,并且在被置入一个通过拆分其子级来格式化子级的视图时,必须拆分该视图以恰当的表示它。
static intGoodBreakWeight
          该权重指示视图支持拆分,但是可能存在更好时机。
static intX_AXIS
          用于格式化/拆分操作的轴。
static intY_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 对象。
 
方法摘要
 voidappend(View v)
          追加单个子视图。
 ViewbreakView(int axis, int offset, float pos, float len)
          试图在给定的轴上拆分视图。
 voidchangedUpdate(DocumentEvent e, Shape a, ViewFactory f)
          发出通知,通知文档此视图负责的位置处的属性已更改。
 ViewcreateFragment(int p0, int p1)
          创建一个表示元素某部分的视图。
protected  voidforwardUpdate(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a, ViewFactory f)
          将给定的 DocumentEvent 转发给需要被通知模型更改的子视图。
protected  voidforwardUpdateToView(View v, DocumentEvent e, Shape a, ViewFactory f)
          将 DocumentEvent 转发到给定的子视图。
 floatgetAlignment(int axis)
          确定此视图沿某个轴所需的对齐方式。
 AttributeSetgetAttributes()
          获取呈现时要使用的属性。
 intgetBreakWeight(int axis, float pos, float len)
          确定此视图中拆分时机的权重大小。
 ShapegetChildAllocation(int index, Shape a)
          获取给定子视图的分配。
 ContainergetContainer()
          获取承载视图的容器。
 DocumentgetDocument()
          获取与视图关联的模型。
 ElementgetElement()
          获取此视图所映射的主题的结构化部分。
 intgetEndOffset()
          获取此视图负责的模型的一部分。
 GraphicsgetGraphics()
          获取用于呈现的 Graphics
 floatgetMaximumSpan(int axis)
          确定此视图沿某个轴的最大跨距。
 floatgetMinimumSpan(int axis)
          确定此视图沿某个轴的最小跨距。
 intgetNextVisualPositionFrom(int pos, Position.Bias b, Shape a, int direction, Position.Bias[] biasRet)
          提供某种途径来确定可以放置一个插入符的下一个可视表示模型位置。
 ViewgetParent()
          返回视图的父级。
abstract  floatgetPreferredSpan(int axis)
          确定此视图沿某个轴的首选跨距。
 intgetResizeWeight(int axis)
          确定视图沿给定轴的大小可调整性。
 intgetStartOffset()
          获取此视图负责的模型的一部分。
 StringgetToolTipText(float x, float y, Shape allocation)
          返回提定位置的工具提示文本。
 ViewgetView(int n)
          获取第 n 个子视图。
 intgetViewCount()
          返回此视图中的视图数。
 ViewFactorygetViewFactory()
          获取将提供给视图层次结构的 ViewFactory 实现。
 intgetViewIndex(float x, float y, Shape allocation)
          返回表示视图中给定位置的子视图索引。
 intgetViewIndex(int pos, Position.Bias b)
          返回表示模型中给定位置的子视图索引。
 voidinsert(int offs, View v)
          插入单个子视图。
 voidinsertUpdate(DocumentEvent e, Shape a, ViewFactory f)
          发出通知,通知在文档中此视图负责的某个位置已插入内容。
 booleanisVisible()
          返回一个指示视图是否可视的 boolean 值。
 ShapemodelToView(int p0, Position.Bias b0, int p1, Position.Bias b1, Shape a)
          为给定区域提供从文档模型坐标空间到视图坐标空间的映射。
 ShapemodelToView(int pos, Shape a)
          已过时。  
abstract  ShapemodelToView(int pos, Shape a, Position.Bias b)
          为给定字符提供从文档模型坐标空间到视图坐标空间的映射。
abstract  voidpaint(Graphics g, Shape allocation)
          使用给定的呈现表面和该表面上的区域来呈现。
 voidpreferenceChanged(View child, boolean width, boolean height)
          子视图能在父级上调用此方法来指示首选项已经更改,并且应该重新考虑布局。
 voidremove(int i)
          移除给定位置处的一个子级。
 voidremoveAll()
          移除所有子级。
 voidremoveUpdate(DocumentEvent e, Shape a, ViewFactory f)
          给出从文档中此视图负责的位置移除了某些内容的通知。
 voidreplace(int offset, int length, View[] views)
          替代子视图。
 voidsetParent(View parent)
          为此视图建立父视图。
 voidsetSize(float width, float height)
          设置视图的大小。
protected  booleanupdateChildren(DocumentEvent.ElementChange ec, DocumentEvent e, ViewFactory f)
          更新子视图以响应接收模型变化的通知,并且有一条此视图负责的元素的变化记录。
protected  voidupdateLayout(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a)
          更新布局,以响应从模型接受的更改通知。
 intviewToModel(float x, float y, Shape a)
          已过时。  
abstract  intviewToModel(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