`
mylxiaoyi
  • 浏览: 320520 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基本文本组件(一)

 
阅读更多

第14章探讨了Swing组件集合的JSpinner所提供的动态输入选择控件。在本章中,我们将会了解Swing基本文本组件的基本功能。更为高级的文本组件将会下一章中进行探讨。

Swing组件集合包含五个文本组件。他们共享一个共同的父类,JTextComponent,其中定义了所有的文本组件的更同行为。

JTextComponent的直接子类是JTextField,JTextArea以及JEditorPane。JTextField用于单行的单属性文本(也就是单一的字体与单一的颜色)。JTextField有一个子类,JPasswordField,用于JTextField用作密码输入的情况。JTextArea用于单一属性文本的多行输入。JEditorPane是可以支持多属性输入编辑的通用编辑器。其子类JTextPane是输入普通文本格式而定制的。在这两个类中,除了文本,输入还可以图片与组件。

15.1 Swing文本组件概述

类似于所有其他的Swing组件,文本组件生活在MVC的世界中。显示在图15-1中的组件,类的层次结构图,是各种可用的UI委托。UI委托模型的其余部分是文本视图,他基于View类,我们会在第16章进行进一步的讨论。

注意,所有的JTextComponent子类位于javax.swing包中。除了事件相关的部分,本章中所讨论的支持接口与类都位于javax.swing.text包(或是子包)中。Swing特定的,文本相关的事件部分位于javax.swing.event包中,其余的位于java.awt.event与java.beans中。

每一个组件的模型都是Document接口的实现,他有五个扩展(或是实现)。单属性组件使用PlainDocument类作为其数据模型,而多属性组件使用DefaultStyledDocument作为其模型。所有这些类派生自AbstractDocument类,在其中定义了他们共同的Document接口实现。DefaultStyleDocument类也实现了StyledDocument接口,他是Document用于支持多属性内容的扩展。另一个Document实现,HTMLDocument,用于JEditorPane的内容类型为text/html的情况。为了限制到这些文档的输入,我们可以使用DocumentFilter类。


本章中以及第16章中将要讨论的许多其他具有共同的文本组件特性。类似于许多其他的Swing组件,我们可以自定义组件的观感而无需创建新的UI委托。对于文本组件,Highlighter,Caret以及NavigationFilter接口分别描述了文本如何高亮显示,在哪里插入文本以及如何限制鼠标位置,从而使得我们可以自定义文本组件的外观以及输入行为。另外,InputMap/ActionMap类定义了击键与文本动作之间的绑定,从而允许我们非常容易的修改文本组件的行为。

其他的组件模型部分被设计用于事件处理。我们并没有被限制使用KeyListener/KeyEvent或是TextEvent/TextListener绑定来处理输入验证。Swing组件同时使用DocumentEvent/DocumentListener组合(以及第2章所描述的InputVerifier)。这种组合提供了一种更为灵活的输入验证方式,特别是在Swing文本组件的MVC环境中。额外的事件处理是通过在第2章所介绍的AbstractAction功能扩展来实现的。这就是用于将键盘绑定与Action实现相关联的TextAction类,我们将会在第16章中进行详细的讨论。文本框架中的许多部分是通过所谓的EditorKit连接在一起的,我们也会在第16章中进行讨论。

注意,由于Swing文本组件类之间的相互连接,我们将会在本章中与第16章中的大量引用关联。我们可以自由的在两章之间进行跳转并且接下来阅读某一功能的详细讨论。

15.2 JTextComponent类

JTextComponent类是用作所有文本视图的组件的父类。他描述了所有文本组件所共享的共同行为。在这些共同行为中包括用于选中支持的Highlight,用于在内容中浏览的Caret,通过action属性(Action实现数组)支持的命令集合,通过KeyMap或是InputMap/ActionMap组合支持的键盘绑定集合,一个Scrollable接口实现,从而每一个特定的文本组件都可以放在JScrollPane中,以及存储在组件中的文本。如果所有的这些听起来需要大量的管理,不要担心。本章将会为我们给出指导。

15.2.1 JTextComponent属性

表15-1显示了JTextComponent的27个属性。这些属性覆盖我们所期望的文本组件功能。




这些属性被分为八个基本类别:

  • 数据模型:document属性用于所有文本组件的数据模型。text属性用于将这个数据模型看作一个String。
  • 颜色:caretColor,disabledTextColor, selectedTextColor与selectionColor属性,以及继承的foreground与background属性指定了渲染光标,禁止文本,所选文本,所选文本的背景,常规文本以及常规文本的背景等颜色。
  • Caret:caret,caretPosition与navigationFilter属性用于在文档中浏览。
  • Highlighter:highlighter,selectionStart与selectionEnd属性负责高亮显示文档中的selectedText部分。
  • Margin:margin属性用于指定文本内容距离文本组件的边界多远显示。
  • 事件:actions与keymap属性描述了文本组件支持哪些功能。对于actions属性的Action[]情况,功能是我们为了事件处理可以关联到组件的一系列ActionListener实现。例如,不必创建一个ActionListener来执行剪切、复制与粘贴操作,我们会发现actions属性中的相应的Action并将其关联到组件。keymap的作用类似,但是他是将Action关联到特定的键。例如,他包含一个按键映射条目用于处理当PageUp键被按下时如何响应。caretListsener属性允许我们发现观察文本组件的CaretListener对象集合。dragEnabled设置描述了组件是否支持在组件中拖放文本。(要了解Swing中的拖放支持信息,可以查看第19章。)
  • 滚动接口:属性preferredScrollableViewportSize, scrollableTracksViewportHeight,与scrollableTracksViewportWidth是相应的Scrollable接口方法的实现。
  • 状态:editable与focusTraversable属性描述了文本组件的各种状态。editable允许我们文本组件设置为只读。对于只读的focusTraversable属性,当他们被使能时文本组件位于信息循环中(也就是我们可以使用Tab键遍历)。focusAccelerator用于相邻的JLabel在其labelFor属性设置文本组件的情况,允许我们使用JLabel的可视化热键将焦点移动到文本组件。componentOrientation设置描述了组件的文本如何绘制。将这一特性于类似Hebrew那样由右到左的语言并不是必须,但却是绘制字符的最好方法。JTextComponent由JComponent继承了opaque属性。当opaque属性被设置为false时,文本组件后面的区域内容会被看穿,如果需要,可以允许我们具有一个图片背景。图15-2显示了这一效果。

列表15-1是用于生成图15-2的源码。如果我们取消setOpaque(false)一行,则背景不会显现。

package swingstudy.ch13;
 
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
 
import javax.swing.GrayFilter;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
 
 
public class BackgroundSample {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		Runnable runner = new Runnable() {
			public void run() {
				JFrame frame = new JFrame("Background Example");
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
				final ImageIcon imageIcon = new ImageIcon("draft.gif");
				JTextArea textArea =  new JTextArea() {
					Image image = imageIcon.getImage();
					Image grayImage = GrayFilter.createDisabledImage(image);
					{
						setOpaque(false);	// instance initializer
					}
						public void paint(Graphics g) {
							g.drawImage(grayImage, 0, 0, this);
							super.paint(g);
						}
				};
				JScrollPane scrollPane = new JScrollPane(textArea);
				frame.add(scrollPane, BorderLayout.CENTER);
				frame.setSize(255, 2550);
				frame.setVisible(true);
			}
		};
		EventQueue.invokeLater(runner);
	}
 
}


15.2.2 JTextComponent操作

JTextComponent为文本控件上所执行的许多操作定义了基本的框架。

  • I/O:public void read(Reader in, Object description)与public void write(Writer out)方法(都抛出IOException)允许我们简单的读取或是写入文本组件内容。
  • 剪切板访问:public void cut(), public void copy()与public void paste()方法提供了到系统剪切板的直接访问。
  • 位置:public void moveCaretPosition(int position)方法允许我们定位caret。位置表示标明由文本组件开始处到caret之前的字符数的一维定位。
  • 选中:public void replaceSelection(String content), public void selectAll()与public void select(int selectionStart, int selectionEnd)方法允许我们组件中的内容部分与替换所选择的内容。
  • Conversion:public Rectange modelToView(int position) throws BadLocationException与public int viewToModel(Point point)方法允许我们(或者更可能的是系统)将JTextComponent内的一个位置映射到特定文本UI委托的内容表示中的映射。

现在我们已经概述了JTextComponent类,现在是了解其不同的子类的时候了。首先是JTextField,他将会被用来演示刚才所列出的操作。

分享到:
评论

相关推荐

    文本显示组件

    文本显示组件的dome,有三个dome,分别是textview的基本使用,链接,和样式表的dome!

    文本编辑器设计 记事本 java

    程序设计题一: 文本编辑器设计 【问题描述】 实现类似Windows操作系统“记事本”的功能。...设计一个文本编辑器,通过菜单组件可以创建、查看或编辑文本文件。 增加对文件的存贮、剪切和黏贴等功能 功能的其他扩展

    react-editext:React Apps的可编辑文本组件

    React应用程序的可编辑文本组件 安装 npm install --save react-editext 或与纱线: yarn add react-editext 用法 EdiText是高度可定制的。 您可以看到更多示例。 这是基本用法: import React , { useState } ...

    Android基本UI组件详解

    TextView(标签文本) EditText(文本输入框) Button(按钮) ImageButton(图像按钮) ToggleButton(开关按钮) RadioButton(单选按钮) Progressbar(进度条) Checkbox(检查框) SeekBar(滑动条) RatingBar...

    android实验2界面设计:基本组件.doc

    西 安 邮 电 大 学 (计算机学院) 课内实验报告 实验名称: 界面设计:基本组件 专 业: 网络工程 班 级: 姓 名: 学 号: 指导教师: 日 期: 2017年4月20日 一.实验目的 1. 掌握常用组件在布局文件中的设置 2. ...

    react-taggy:一个简单的零依赖性React组件,用于标记文本块内的用户定义的实体

    一个简单的零依赖的React组件,用于标记文本块内的用户定义的实体。 哥哥。演示版访问,然后单击底部的“旋钮”,以了解调整某些道具如何影响渲染的组件的感觉。安装npm i --save react-taggy或yarn add react-taggy...

    基本组件python

    静态文本 wx.StaticText(parent,id,label,pos,size,style,name) 用户输入文本 wx.TextCtrl(parent, id,value, pos, size, style, validator,name) 多行或样式文本控件 wx.TE_MULTILINE样式 创建字体

    Qt制作的富文本编辑器

    这是 Qt 中最基本的富文本编辑器组件,继承自 QAbstractScrollArea。 它支持富文本格式(HTML)、自动换行、拼写检查、撤销/重做操作等功能。 可以通过设置样式表或加载 CSS 文件来自定义 QTextEdit 的外观。 支持各种...

    C++QT实现对pdf、word文档预览以及文本内容的读取

    最近在做一个简历管理工具时遇到了一些需求,在网上找了大量资源信息,发现Qt对pdf、word进行数据读取的信息少之又少,于是根据我自己的摸索,实现了这些需求功能。 功能主要实现了1、对pdf、word文件进行预览显示2...

    riot-hi-text:Riot.js的突出显示文本组件

    Riot.js的突出显示文本组件 安装 npm ins --save-dev riot-hi-text 例子 基本的 导入脚本,独立脚本文件位于dist 。 < script src =" riot.hi-text.js " > </ script > Webpack或Browserify: require...

    adapt-textNotify:劫持锚标签点击的文本组件

    这个组件基本上是一个contrib文本,它劫持了bodyText( component-body )中的所有锚标记单击,并显示了一个通知弹出窗口,而不是导航到href。 重要提示: 该组件取决于对尚未合并的核心框架的。 需要安装Adapt-...

    kaier-writer:基于文字的现代文本编辑器Web组件,由StencilJS制成

    Kaier作家[WIP] 基于基于文字的现代文本编辑器Web组件。 我目前正在努力。 尽管已经有了项目的基本结构,但仍需要处理文档。

    简易文本编译器源码简易文本编译器源码

    开发的基本思路就是建立一个运行的框架,然后添加元素组件以及各个动作响应,虽然查找对话框、帮助对话框可以 另立起来,但将其也当做一般的元素组件一样实现。同样是添加元素组件的对象和动作,所不同的只是需要...

    Get清风android实验2界面设计:基本组件.doc

    android实验2界面设计:基本组件 西 安 邮 电 大 学 〔计算机学院〕 课内实验报告 实验名称: 界面设计:根本组件 专 业: 网络工程 班 级: 姓 名: 学 号: 指导教师: 日 期: 2021年4月20日 一.实验目的 1. ...

    c#窗体控件组件

    窗体与对话框 6.2 控件共有的基本操作 6.3 容器类控件和组件 6.4 文本操作类控件 6.5 选择操作类控件 6.6 图像操作类控件和组件 6.7 菜单、工具栏与状态栏 6.8 视图操作类控件 6.9 其他常用控件

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

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

    react-markdown-el:一个简单的 React 组件,用于解析和呈现 Markdown 文本

    React降价-el 提供一个简单的React组件,用于在元素中呈现 Markdown 文本。安装 $ npm install react-markdown-el用法基本用法只是将 markdown 作为text属性: var Markdown = require('react-markdown-el');......

    Java项目源码之文本编辑器的实现.rar

    文本编辑器的实现旨在为用户提供一个功能丰富、易于使用的文本编辑工具,满足用户对文本编辑的基本需求,同时通过扩展性和定制性,允许用户根据个人需求进行定制和扩展,提高编辑效率和工作体验。

    .net日志组件NLog.zip

    文件文本控制台Email数据库网络中的其它计算机(通过TCP或UDP)基于MSMQ的消息队列Windows系统日志其他形式,请参考http://www.nlog-project.org/targets.html除此之外,每一条跟踪消息都可以自动带有上下文信息...

    易语言黑月丰富文本框显示插入图片

    注意:通过菜单设置,格式菜单第一项表示整个富文本框的格式,第二项表示选择区的格式。 但是测试插入图片却无法显示图片,只显示文件名xxx.bmp之类。 于是我就在网上查资料,先找易语言的富文本框没收获。 后来发现...

Global site tag (gtag.js) - Google Analytics