Java JTextComponents中的EditorKits是什么?它们的工作是什么?

Java JTextComponents中的EditorKits是什么?它们的工作是什么?,java,swing,user-interface,text,Java,Swing,User Interface,Text,我正在研究Swing程序中文本组件的结构 据我所知,JTextComponent基本上分为视图和模型。该模型是实现文档的类的一个实例,包含所有文本并提供操作方法,以及可视化显示文本的视图 但是,我不清楚在哪里、如何以及为什么使用EditorKit。我不确定它是否封装了模型(文档),或者文档是否封装了它。而且不确定视图在所有这些中的位置 所以有两个问题: 1-请描述JTextComponents中的视图、Document和EditorKit之间的关系。什么封装了什么,什么与什么相互作用,为什么 2

我正在研究Swing程序中文本组件的结构

据我所知,
JTextComponent
基本上分为视图和模型。该模型是实现
文档
的类的一个实例,包含所有文本并提供操作方法,以及可视化显示文本的视图

但是,我不清楚在哪里、如何以及为什么使用
EditorKit
。我不确定它是否封装了模型(
文档
),或者文档是否封装了它。而且不确定视图在所有这些中的位置

所以有两个问题:

1-请描述
JTextComponents
中的视图、
Document
EditorKit
之间的关系。什么封装了什么,什么与什么相互作用,为什么

2-请解释
EditorKit
的功能和作用

感谢您的帮助

“一种称为编辑器工具包的控制器,它可以读写文本并通过操作实现编辑功能。”

DefaultEditorKit
StyledEditorKit
的抽象父级,这两个类都导出了对通用的
文档
模型进行操作的有用类。在这种情况下,编辑器工具包操作会更新
文档
,从而间接更新侦听视图组件。查尔斯·贝尔(Charles Bell)的
HTMLDocumentEditor
,就是一个相关的例子


编辑它是一种类似控制器的东西,允许使用指定的内容类型。它引用文档(模型)并侦听更改

EditorIt提供读写器来加载/存储特定类型的文档(例如HTMLDocument或RtfDocument)。它还提供ViewFactory为不同文档的元素(节点和叶子)创建视图

此外,EditorIt还提供了内容类型可能的操作列表


您可以尝试查看如何创建和使用EditorIt。

谢谢您的回答。我在文档中读到了这一页。让我看看我是否理解编辑器工具包是基于您引用的内容:当用户在UI上执行操作时,编辑器工具包是负责将其转换为模型上的操作的对象。就像一个经典的MVC实现。这是正确的吗?你能告诉我我是否遗漏了什么,或者这确实是Swing组件结构中编辑器工具包的工作吗?它不是所有Swing组件,只是
JTextComponent
及其子类。但是是的,它是一个可切换的控制器,允许您拥有一个基本类(例如
JTextPane
),并根据所使用的实现自定义其行为和外观。如果EditorIt是JTextComponents内部系统的一种控制器,那么为什么它没有对视图的引用呢?你能解释一下当用户在JTextArea中键入内容时,内部会发生什么吗?视图是否调用EditorKit,然后EditorKit操作文档?(像一个经典的MVC?)或者它是其他什么?事实上,它间接引用了视图。editorKitInstance.getUI().getRootView(JTextComponent tc)。当EditorKit设置为sety时,它会将侦听器添加到文档中。当文档发生更改时(当用户键入时),它会反映更改和更新视图在经典MVC中,视图是UI,因此它是接收用户操作的视图。当它收到用户操作(例如,点击按钮)时,它会将其报告给控制器。控制器然后相应地操纵模型,最后模型(通过观察者模式)将更改通知视图,并且视图自身更新。我的问题是:这也是JTextComponent内部工作的方式吗?这不是理想的世界。EditorKit+UI是控制器。Kit还改变了模型,例如加载新内容或应用某些特定操作。我明白了。因此,当用户对组件执行某些操作(例如,键入文本)时,EditorKit(它是UI的一部分)决定如何影响模型(文档)。这准确吗?谢谢你的回答。在典型的MVC实现中,UI(即视图)上的操作报告给控制器,然后控制器相应地调用模型上的操作。最后,模型通知视图(通常通过观察者模式)数据已更改,并且视图会相应地更新自身。我想知道JTextComponents的内部结构是否如此。当用户执行某些操作(例如键入文本)时,视图是否会调用EditorKit上的某些内容,然后EditorKit会调用文档上的某些内容?这就是它的工作原理吗?如果不是,你能给我一个实用的高级示例,说明当用户键入文本时,JTextComponent内部会发生什么情况吗?有人刚刚告诉我UI和EditorIt都是控制器。不过,你能给我一个高级示例,说明当用户在组件中键入文本时,它是如何在内部工作的吗
EditorKit
操作改变
文档
(模型),该文档通知任何侦听文本组件(视图)。在Swing中,我认为用户是控制器;更多信息。当程序在
JTextArea
上调用
setText()
时,内部调用什么?
EditorKit
上的方法?