更新时间:2023-12-20 15:05
提供了其他额外灵活性服务,但不含可插入UI和bean支持特性,这两项特性的支持源于其它swing文本组件的基类。
JTextComponent为其子类提供了以下功能定义。
插入符对象
JTextComponent定义了插入符对象,插入符是swing文本组件中的可插入对象,可以通过它具体定位文本组件中的文档内容的一个具体位置,是逐字操作文本组件内文本的基础。并通过CaretListener的实现类来捕获插入符位置和选择的更改。程序员可以自定义插入符对象,否则UI将提供默认插入符对象。
默认插入符(DefaultCaret)对象可以在发生插入或移除操作时,会自动更新其位置(一般指“绝对位置”,即距离文档开头的绝对字符位置),该对象会计算出插入或移除的操作是否会导致其它UI组件的连锁反应,例如:JScrollPane内的文本组件是否需要滚动。
在文本组件内的文档发生插入或移除操作时,可以按以下策略具体控制插入符对象所在(所指)的位置:
(1)NEVER_UPDATE:无论文档怎样更新,插入符在文档中都位于同一绝对位置,除非由于删除使文档长度小于当前插入符位置。这种情况下,插入符位置将被调整到文档的结尾。使用此策略时,插入符不会试图在滚动关联的视图时保持可见。
(2)ALWAYS_UPDATE:插入符始终跟踪文档更改。对于一般的更改,如果在插入符位置之前或当前位置插入,则增加它的位置,如果在当前位置之前删除,则减小它的位置。对于撤消/重复更新,它总是移动到更新发生的位置。插入符总是试图通过调用 adjustVisibility 方法保持可见。
(3)UPDATE_WHEN_ON_EDT:如果文档更新在事件调度线程上执行,则与 ALWAYS_UPDATE 动作类似;如果文档更新在其它线程上执行,则与NEVER_UPDATE 类似。
其中UPDATE_WHEN_ON_EDT为默认属性。
命令
定义了文本组件提供许多可能用于操作组件的命令。这实质上是组件表示其功能的方式。这些都将根据swing Action接口使用TextAction实现来表示。文本组件支持的命令集合可以使用getActions()方法查找。这些操作可以绑定到由按键等激发的键事件上。
可以通过下面的代码来遍历所用的文本类组件提供的所有Action名称。
JTextArea textComponent = new JTextArea();
Action[] actions = textComponent.getActions();
for(Action action:actions){
}
文本输入
文本组件支持灵活而且国际化的文本输入,在使用keymap和输入法框架的同时维护与AWT侦听器模型的兼容性。通过Keymap让应用程序将击键绑定到操作上。为了允许keymap在整个多文本组件上共享,它们可以使用扩展TextAction的操作。TextAction可以确定哪个JTextComponent最近有或以前有过焦点,并因此成为该操作的执行者(在此情况下,发送到该操作的ActionEvent不包含作为其源的目标文本组件)。
通过input method framework及其内部的文本输入事件InputMethodEvent可以方便的监控组件内文本的变化。
模型/视图拆分结构
文本组件实际上将表示模型、视图和控制器的对象结合在一起。多个组件可以共享一个文档,这个模型是由Document类定义的,它提供了文档内容的存储机制,也可以在编辑过程中跟踪更改,方便扩展出更复杂的模型。在每次修改文档时,都会发送DocumentEvent对象给DocumentListener对象。
位置控制
提供确定视图中文本位置的功能。确定此信息有两个方法,modelToView(int) 和 viewToModel(java.awt.Point)。
撤消/重复支持
提供对编辑历史机制的支持,以允许进行撤消/重复操作。默认情况下文本组件本身不提供历史缓冲区,但确实提供可以与提供撤消/重复支持的历史缓冲区的 UndoableEdit 记录。该支持由 Document 模型提供,该模型允许用户附加 UndoableEditListener 实现。