一、概述
JTextComponent是Swing中所有文本组件的超类。它具有以下几个特性:
1、模型,即Document,管理组件内容;
2、视图
3、控制器,即Editor kit,读或写文本,并提供一些文本编辑的action
4、支持有限的撤销和重复操作
5、光标,光标过滤器和光标导航。
二、关联text action和菜单或按钮
menu.add(getActionByName(DefaultEditorKit.cutAction) //通过文本组件的getActions方法可以获得该组件支持的全部action,并将这些action导入到HashMap中去,以便访问。
action名是从DefaultEditorKit获取的,该类提供了实现基本文本编辑的action,并且是所有的EditorKit的基类。
基于性能方面的考虑,按上述方法得到的action是被程序中文本组件所共享,但有时你并不想这样,可以通过自己实例化一个action实例:
Action action = new StyledEditorKit.BoldAction();
action.putValue(Action.NAME, "Bold");
menu.add(action);
三、关联键盘和text action
InputMap inputMap = textPane.getInputMap();
KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_B,Event.CTRL_MASK);
inputMap.put(key, DefaultEditorKit.backwardAction);
四、实现撤销和重复
分两步走:
(1)记录可撤销的操作,使用UndoManager:protected UndoManager undo = new UndoManager();
在文本组件的document上注册UndoableEditListener,当有操作发生时就会通知该监听器:
doc.addUndoableEditListener(new MyUndoableEditListener());
protected class MyUndoableEditListener
implements UndoableEditListener {
public void undoableEditHappened(UndoableEditEvent e) {
//Remember the edit and update the menus
undo.addEdit(e.getEdit());
undoAction.updateUndoState();
redoAction.updateRedoState();
}
}
(2)实现undo和redo action,并添加到菜单
JMenu menu = new JMenu("Edit");
//Undo and redo are actions of our own creation
undoAction = new UndoAction();
menu.add(undoAction);
redoAction = new RedoAction();
menu.add(redoAction);
UndoAction 和RedoAction都继承自AbstractAction ,具体实现大概如下:
public void actionPerformed(ActionEvent e) {
try {
undo.undo();
} catch (CannotUndoException ex) {
System.out.println("Unable to undo: " + ex);
ex.printStackTrace();
}
updateUndoState();
redoAction.updateRedoState();
}
五、Document
Document将文本组件的内容和表现相分离,该对象至少提供以下服务:1、包含文本组件的内容;2、通过remove 和insertString提供对文本的编辑;3、将
文本的变化通知给document listeners和undoable edit listeners;4、管理位置对象;5、从文本获取信息,比如文本长度等
有以下几种document:PlainDocument DefaultSyledDocument HTMLDocument
六、Document过滤器
StyledDocument styledDoc = textPane.getStyledDocument();
if (styledDoc instanceof AbstractDocument) {
doc = (AbstractDocument)styledDoc;
doc.setDocumentFilter(new DocumentSizeFilter(MAX_CHARACTERS));
}
七、监听Document的变化
doc.addDocumentListener(new MyDocumentListener());
切记,千万不要在DocumentListener中试图改变文本内容,这样会导致死锁,如想改变文本内容,可以使用过滤器。
八、监听光标或选择变化
通过注册光标监听器,可以实时显示光标的位置或选择的范围。textPane.addCaretListener(caretListenerLabel);
当光标发生移动或选择变化,会调用监听器中的caretUpdate方法。
注意该监听器仅能反映光标或选择返回的相关变化或信息,但不能改变光标或选择,如想改变可以使用NavigationFilter。
九、EditorKit
文本组件就是通过EditorKit将不同组件的不同部分整合在一起。其提供了view factory,actions,document,caret。它可以对document
进行读和写。有三种EditorKit:
(1)DefaultEditorKit:对plain document进行读写,提供基本的编辑命令集,是其他EditorKit的超类
(2)StyledEditorKit:对带格式文本进行读写,为格式文本提供了一组action,默认由JTextPane使用
(3)HTMLEditorKit:对HTML进行读写编辑是StyledEditorKit的子类。
以上的三个Editorkit均被注册到JEditorPane中,并与所编辑的文本格式相关联。当读入一个文件时,会根据文件的格式选择相应的Editorkit。
分享到:
相关推荐
3.1 文本相关组件 3.2 按钮和复选框 3.3 分组组件 3.4 菜单组件 3.5 图形组件 3.6 文件选择组件 3.7 网格组件 第4章 Data Access组件页 4.1 TDataSource组件 4.2 TClientDataSet组件 4.3 TDataSetProvider...
基于Sprite的文本组件。 文本被绘制到画布上,转换为,然后用作上的材质。 由于正在使用精灵,因此文本将始终面向相机,并且其方向相对于相机固定。 快速开始 import SpriteText from 'three-spritetext'; 或者 var...
集成VBS/JScript脚本引擎,完美利用Windows各种COM组件的特性 简洁方便的宏录制,录制出来的宏就是简单的VBS脚本,易读易改 GUI插件支持,脚本之外的又一大选择,满足您的各种需求 用户自定义工具 丰富的状态栏,...
vuedraggable特性: 支持触摸设备 支持拖拽和选择文本 支持智能滚动 支持不同列表之间的拖拽 不以jQuery为基础 和视图模型同步刷新 和vue2的国度动画兼容 支持撤销操作 当需要完全控制时,可以抛出所有变化...
后来找到了wxParse-微信小程序富文本解析组件。特性支持特性实验功能 ... 昨天一位网友问我小程序怎么解析富文本。他尝试过把html转出小程序的组件,但是还是不成功,我说可以把内容剥离出来。但是这两种...
创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。 支持折线图(区域图)、柱状图(条状图)、散点图(气泡图)、K线图、饼图(环形图)、雷达图(填充雷达图...
特性 轻量级 仅添加pdfbox相关依赖,无其他任何依赖 简单易用 仅需一行代码,便可完成pdf的操作 自动换行分页 文本超出单行显示时,即可自动换行;内容超出单页显示时,即可自动分页 模板填充 提供内置方法,可轻松...
本文实例讲述了VUE 动态组件的应用。分享给大家供大家参考,具体如下: 业务场景 我们在开发表单的过程中会遇到这样的问题,我们选择一个控件进行...文本组件配置: 我是单行文本框{{config.type}} [removed]
Auto Alt 它可以自动给你的网页中图像插入文本说明,快下载吧! Inspectors 名称 简介 Map 这是一个映射图检查器,它可以允许您给您的网页映射图加上BEHAVIORS。 Style 让您更快、更少错误地编辑您的源代码! ...
特性 基于建议列表自动完成 键盘友好和鼠标支持 使用拖放重新排序标签 为什么因为我正在寻找构建独立组件并在野外发布的借口? 老实说,我需要一个标记组件来为我的 React-Surveyman 项目提供上述功能。 由于我无法...
这款软件由侯今吾基于同是开放源代码的Scintilla文本编辑组件独立研发而成,自发布以来,已经赢得了大量用户的青睐。它的项目起初托管于SourceForge.net,后来被转移至TuxFamily,现由GitHub托管。 在功能方面,...
所以 Couchbase 团队就构建了一个 Go 库,支持大部分 Lucene 常规使用的文本分析组件,可以使用 off-the-shelf key-value (KV) 存储。特性:支持任何 go 数据架构索引,包括 JSON 通过强大的配置智能默认备份支持...
未来可能会有所变化: 前言与目录 Flex 4概述 (与学习资源) MXML 2009 新增MXML标签 改进的视图状态 (1) 改进的视图状态 (2) ...Spark文本组件 双向数据绑定 高级CSS Selector MXML ASDoc
Warship+NPOI为一款基于NPOI的实体化Excel操作组件,包含丰富的组件化封装,全部基于实体化、对象化操作,不需要用户再对NPOI进行操作。 通用场景支撑: 1)头部校验 2)数据校验(必填、长度、范围、格式校验等...
2023年08月23日ModStartCMS发布v7.1.0版本,增加了以下12个特性: [新功能] 手机端Banner支持视频背景显示 [新功能] CMS内容管理分页增加跳转功能 [新功能] 富文本公式编辑默认替换为LatexEasy [新功能] 支持MS.ui....
在介绍select组件的时候,之前分享过一篇JS组件中bootstrap multiselect两大组件较量的文章,这两个组件的功能确实很强大,本文分享下select组件的一些用法和特性。 一些通用的单选、多选、分组等功能这里就不多做...
2、将用户控件添加至工具箱中,方法如下:右击工具箱控件白处,选择“选择项”,在“选择工具箱项”对话框中,单击“浏览”按钮,在“打开”对话框中选定刚才那个动态链接库文件,然后在“.NETFramework组件”选项卡...
2022年10月19日魔众文档管理系统发布v5.3.0版本,增加了以下23个特性: ·[新功能] 文件上传表新增大类和分类索引 ·[新功能] 用户新增Meta信息,用于底层临时存储部分关联信息 ·[新功能] Request新增isGet方法...
开放了部分源码AC Report是一套功能强大、基于表格的中国式报表组件,同时也是一款中文化程度最高、最终用户最易学习的报表组件,操作简单方便、计算功能强大、容易与程序集成及易于扩充,是迄今为止国产最完美的...
2022年10月19日魔众文档管理系统发布v5.3.0版本,增加了以下23个特性: ·[新功能] 文件上传表新增大类和分类索引 ·[新功能] 用户新增Meta信息,用于底层临时存储部分关联信息 ·[新功能] Request新增isGet方法...