`
mylxiaoyi
  • 浏览: 327559 次
  • 性别: 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,他将会被用来演示刚才所列出的操作。

分享到:
评论

相关推荐

    Android--EditText的富文本组件

    本篇文章将详细探讨如何在Android中实现一个基于原生EditText的富文本组件。 首先,`EditText`是一个简单的文本输入框,它可以接收用户的文本输入并显示。然而,它的功能相对有限,不支持诸如插入图片、设置文本...

    mendix富文本组件

    在Mendix平台上,富文本组件是一个至关重要的元素,它允许用户在应用中创建和编辑复杂的文本格式,如加粗、斜体、下划线、插入链接、图像等。这个组件极大地增强了用户交互性和内容的表现力,使得非技术人员也能轻松...

    linux-一款基于draftJs和antdesign实现的react富文本编辑器组件

    标题所提及的"linux-一款基于draftJs和antdesign实现的react富文本编辑器组件",意味着这个项目是一个专为Linux环境设计的React组件,它结合了draft-js的强大编辑功能和ant-design的优雅界面设计,为开发者提供了一...

    富文本编辑器组件.zip

    本压缩包“富文本编辑器组件.zip”包含了一个用于前端实现此类功能的组件,允许用户轻松地实现多种编辑操作,并且支持图片上传,增强了编辑体验。 富文本编辑器的工作原理通常基于WYSIWYG(What You See Is What ...

    ellipsis基于vue20的文本展开收起组件

    在Vue.js框架中,开发一个基于`vue2.0`的`ellipsis`(省略号)文本展开收起组件是一项常见的需求。这个组件通常用于处理长文本...这个组件不仅能满足基本的文本展示需求,还能适应各种复杂的使用场景,提升用户体验。

    react-一个可以把文本中多个关键字高亮显示的react组件

    这个“react-一个可以把文本中多个关键字高亮显示的react组件”就是为了满足这样的需求而设计的。这个组件可以帮助开发者轻松地实现关键词高亮功能,提升用户在浏览和搜索文本时的体验。 首先,让我们了解React组件...

    Flex4视频教程_03-02使用文本组件.rar

    本视频教程聚焦于Flex4中的文本组件使用,这部分内容对于理解和创建动态、交互式的用户界面至关重要。在Flex4中,文本处理能力得到了显著提升,提供了更丰富的样式和格式化选项。 1. **Text组件基础** - Text组件...

    vue后台管理系统富文本组件(二)kindeditor

    在Vue后台管理系统中,富文本编辑器是必不可少的组件,它允许用户以WYSIWYG(所见即所得)的方式创建和编辑内容。KindEditor是一款经典的富文本编辑器,尽管其界面可能相对陈旧,但它以其稳定性、低Bug率赢得了众多...

    Android学习笔记四:基本视图组件:TextView

    在Android开发中,基本视图组件是构建用户界面的基础元素,TextView作为其中之一,扮演着至关重要的角色。TextView用于展示文本信息,它不仅能够显示简单的静态文本,还可以支持动态文本更新、格式化显示以及多种...

    微信小程序富文本解析自定义组件

    总的来说,微信小程序富文本解析自定义组件如`wxParse`提供了一种便捷的方式来处理复杂的文本格式,使开发者能够更灵活地展示内容。理解其工作原理和使用方法,对于提高小程序的用户体验和功能丰富性具有重要意义。...

    为netbeans的文本组件添加右键菜单功能的插件

    这篇博客“为NetBeans的文本组件添加右键菜单功能的插件”介绍了一个实用的插件开发案例,让我们来深入探讨这个主题。 首先,理解插件开发是扩展IDE功能的关键。NetBeans平台基于模块化设计,允许开发者创建和集成...

    安卓EditText输入框相关-一个基于Android原生的EditText的富文本组件支持文字输入可以插入图片.rar

    本资源提供了一个基于Android原生EditText的富文本组件,允许用户在输入文字的同时插入图片,为应用增加了更多的交互可能性。 首先,我们要理解这个组件的工作原理。在Android中,富文本编辑通常涉及到Spannable和...

    JS 仿支付宝input文本输入框放大组件

    总之,实现这样一个组件不仅需要掌握JavaScript和jQuery的基本语法,还需要对CSS样式和DOM操作有深入理解。不断实践和优化,才能创造出更贴近用户需求的交互效果。在实际开发过程中,要注重代码的模块化和可扩展性,...

    android 部分基本组件

    `TextView`是Android中最常用的组件之一,用于在界面上展示文本信息。其主要属性包括: - **`android:layout_width`** 和 **`android:layout_height`**:定义文本框的宽度和高度。`wrap_content`表示宽度或高度将...

    完整版脚本组件应用一例(文本顺序取反).rar

    这个名为"完整版脚本组件应用一例(文本顺序取反).rar"的压缩包文件似乎提供了一个实际的案例,展示了如何利用脚本组件来实现文本顺序的反转功能。这种功能常见于各种文本处理任务,如数据清洗、字符串操作或者编程...

    TVText 011 (竖着显示文本的组件)

    4. **文本操作**:可能支持插入、删除、查找、替换等基本文本操作,以及剪切、复制、粘贴等常见编辑功能。 5. **事件处理**:开发者可以通过绑定各种事件,如OnClick、OnDblClick、OnKeyDown等,来响应用户的交互...

    AWT基本组件

    Java AWT(Abstract Window Toolkit)是Java早期的图形用户界面(GUI)库,它提供了创建和管理窗口、按钮、文本框等基本GUI组件的基本框架。本篇将深入讲解AWT中的基本组件及其方法,以及使用AWT组件的一般步骤。 ...

    完整版脚本组件应用一例(文本顺序取反).e.rar

    以"完整版脚本组件应用一例(文本顺序取反).e.rar"为例,这个压缩包文件提供了一个实际操作的示例,展示了如何通过脚本组件实现文本顺序的反转功能。下面将详细解析这个知识点。 首先,脚本组件通常指的是在软件或...

    脚本组件应用一例(文本顺序取反).e.rar

    总之,“脚本组件应用一例(文本顺序取反)”这个主题涵盖了基本的脚本编程和字符串处理技巧,这对于提升IT专业人员的技能和效率非常有帮助。无论是在日常编程还是在解决特定问题时,理解并掌握这些技术都将大大提升...

    脚本组件应用一例(文本顺序取反).rar

    总结一下,这个“脚本组件应用一例(文本顺序取反)”展示了如何利用编程语言的特性,如Python的切片操作,来实现文本处理功能。这种能力对于任何IT专业人员来说都是非常基础且实用的,无论是进行数据分析,还是开发...

Global site tag (gtag.js) - Google Analytics