`
joyo_fly
  • 浏览: 86716 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

文本组件的特性

阅读更多

一、概述

    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。

 

 

 

分享到:
评论

相关推荐

    Delphi7组件应用实例

    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...

    three-spritetext:ThreeJS的基于Sprite的文本组件

    基于Sprite的文本组件。 文本被绘制到画布上,转换为,然后用作上的材质。 由于正在使用精灵,因此文本将始终面向相机,并且其方向相对于相机固定。 快速开始 import SpriteText from 'three-spritetext'; 或者 var...

    国产优秀文本编辑器everedit

    集成VBS/JScript脚本引擎,完美利用Windows各种COM组件的特性 简洁方便的宏录制,录制出来的宏就是简单的VBS脚本,易读易改 GUI插件支持,脚本之外的又一大选择,满足您的各种需求 用户自定义工具 丰富的状态栏,...

    Vue组件Draggable实现拖拽功能

    vuedraggable特性: 支持触摸设备 支持拖拽和选择文本 支持智能滚动 支持不同列表之间的拖拽 不以jQuery为基础 和视图模型同步刷新 和vue2的国度动画兼容 支持撤销操作 当需要完全控制时,可以抛出所有变化...

    微信小程序开发--富文本插件wxParse的使用

    后来找到了wxParse-微信小程序富文本解析组件。特性支持特性实验功能 ...       昨天一位网友问我小程序怎么解析富文本。他尝试过把html转出小程序的组件,但是还是不成功,我说可以把内容剥离出来。但是这两种...

    ECharts图表组件使用

    创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。 支持折线图(区域图)、柱状图(条状图)、散点图(气泡图)、K线图、饼图(环形图)、雷达图(填充雷达图...

    x-easypdf基于pdfbox构建而来的pdf构建工具,极大降低使用门槛,以组件化的形式进行pdf的构建 .rar

    特性 轻量级 仅添加pdfbox相关依赖,无其他任何依赖 简单易用 仅需一行代码,便可完成pdf的操作 自动换行分页 文本超出单行显示时,即可自动换行;内容超出单页显示时,即可自动分页 模板填充 提供内置方法,可轻松...

    VUE 动态组件的应用案例分析

    本文实例讲述了VUE 动态组件的应用。分享给大家供大家参考,具体如下: 业务场景 我们在开发表单的过程中会遇到这样的问题,我们选择一个控件进行...文本组件配置: 我是单行文本框{{config.type}} [removed]

    dreamweaver的各种组件

    Auto Alt 它可以自动给你的网页中图像插入文本说明,快下载吧! Inspectors 名称 简介 Map 这是一个映射图检查器,它可以允许您给您的网页映射图加上BEHAVIORS。 Style 让您更快、更少错误地编辑您的源代码! ...

    用于 React 项目的极其简单的标记组件

    特性 基于建议列表自动完成 键盘友好和鼠标支持 使用拖放重新排序标签 为什么因为我正在寻找构建独立组件并在野外发布的借口? 老实说,我需要一个标记组件来为我的 React-Surveyman 项目提供上述功能。 由于我无法...

    Notepad++是一款功能强大的纯文本编辑器,它以其出色的性能、丰富.txt

    这款软件由侯今吾基于同是开放源代码的Scintilla文本编辑组件独立研发而成,自发布以来,已经赢得了大量用户的青睐。它的项目起初托管于SourceForge.net,后来被转移至TuxFamily,现由GitHub托管。 在功能方面,...

    Go文本索引库Bleve.zip

    所以 Couchbase 团队就构建了一个 Go 库,支持大部分 Lucene 常规使用的文本分析组件,可以使用 off-the-shelf key-value (KV) 存储。特性:支持任何 go 数据架构索引,包括 JSON 通过强大的配置智能默认备份支持...

    Flex4 SDK 新特性

    未来可能会有所变化: 前言与目录 Flex 4概述 (与学习资源) MXML 2009 新增MXML标签 改进的视图状态 (1) 改进的视图状态 (2) ...Spark文本组件 双向数据绑定 高级CSS Selector MXML ASDoc

    Warship+NPOI导入导出组件

    Warship+NPOI为一款基于NPOI的实体化Excel操作组件,包含丰富的组件化封装,全部基于实体化、对象化操作,不需要用户再对NPOI进行操作。 通用场景支撑: 1)头部校验 2)数据校验(必填、长度、范围、格式校验等...

    ModStartCMS v7.1.0 后台栏目模式切换,富文本公式升级

    2023年08月23日ModStartCMS发布v7.1.0版本,增加了以下12个特性: [新功能] 手机端Banner支持视频背景显示 [新功能] CMS内容管理分页增加跳转功能 [新功能] 富文本公式编辑默认替换为LatexEasy [新功能] 支持MS.ui....

    JS组件Bootstrap Select2使用方法详解

    在介绍select组件的时候,之前分享过一篇JS组件中bootstrap multiselect两大组件较量的文章,这两个组件的功能确实很强大,本文分享下select组件的一些用法和特性。 一些通用的单选、多选、分组等功能这里就不多做...

    在线文本编辑器在线编辑器

    2、将用户控件添加至工具箱中,方法如下:右击工具箱控件白处,选择“选择项”,在“选择工具箱项”对话框中,单击“浏览”按钮,在“打开”对话框中选定刚才那个动态链接库文件,然后在“.NETFramework组件”选项卡...

    魔众文档管理系统+支持Markdown图表脑图富文本等集合.zip

    2022年10月19日魔众文档管理系统发布v5.3.0版本,增加了以下23个特性: ·[新功能] 文件上传表新增大类和分类索引 ·[新功能] 用户新增Meta信息,用于底层临时存储部分关联信息 ·[新功能] Request新增isGet方法...

    Anycell Report中式报表组件V1.71

    开放了部分源码AC Report是一套功能强大、基于表格的中国式报表组件,同时也是一款中文化程度最高、最终用户最易学习的报表组件,操作简单方便、计算功能强大、容易与程序集成及易于扩充,是迄今为止国产最完美的...

    魔众文档管理系统+支持Markdown图表脑图富文本等集合

    2022年10月19日魔众文档管理系统发布v5.3.0版本,增加了以下23个特性: ·[新功能] 文件上传表新增大类和分类索引 ·[新功能] 用户新增Meta信息,用于底层临时存储部分关联信息 ·[新功能] Request新增isGet方法...

Global site tag (gtag.js) - Google Analytics