论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
Displaying Text In Multiple Styles
 作者:佚名     2007-3-14 17:30:37        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

A commonly asked question is how to display text in multiple colors or styles within a JTextArea component. The short answer is: you can't. Both the JTextField and JTextArea components are designed to display text in a single style, color, font. When you change the characteristics of the text, you are changing all text in the component. You can't change the characteristics of only the selected text, or just the piece you want changed.


Just because the JTextArea component can't display its content in multiple colors or styles, doesn't mean there isn't support for displaying text in multiple styles. It just isn't done with the JTextArea. You need to use the JTextPane. Knowing that it is the JTextPane and not the JTextArea will lead you to the actual "how" answer to the original question.


Within the JTextPane, text that you add to the component is associated with an AttributeSet. The AttributeSet contains a set of key-value pairs for the various display attributes of the text. These pairs can answer questions like "what's the current font?", "what's the background color?", and "with what alignment should I display the current paragraph?" By setting this AttributeSet before adding the text, you can change the way the added text is displayed. You can also change the AttributeSet for the currently selected text.


AttributeSet is an interface in the Javax.Swing.text package. To fill the set with the desired characteristics, you need to work with an implementation of that interface. That implementation is most likely SimpleAttributeSet, though it can also be StyleContext.SmallAttributeSet or StyleContext.NamedStyle.


SimpleAttributeSet set = new SimpleAttributeSet();


After you create the set, you set the attributes, but this involves a little complexity. The possible settings for the different styles are found in the inner classes of the StyleConstants class:


CharacterConstants

ColorConstants

FontConstants

ParagraphConstants

Each of these inner classes has a set of constants for each of its supported attributes:


CharacterConstants

- Background

- BidiLevel

- Bold

- ComponentAttribute

- Family

- Foreground

- IconAttribute

- Italic

- Size

- StrikeThrough

- Subscript

- Superscript

- Underline


ColorConstants

- Background

- Foreground


FontConstants

- Bold

- Family

- Italic

- Size


ParagraphConstants

- Alignment

- FirstLineIndent

- LeftIndent

- LineSpacing

- Orientation

- RightIndent

- SpaceAbove

- SpaceBelow

- TabSet


To change the set of attributes for newly-added text, you add the necessary attribute to an AttributeSet, and associate the set with the JTextPane. You can also replace the existing set, or as previously mentioned, change the attributes for the current text selection.


SimpleAttributeSet set = new SimpleAttributeSet();

set.addAttribute(

StyleConstants.CharacterConstants.Bold,

Boolean.TRUE);

JTextPane tp = new JTextPane();

// false = don't replace attribute for all text

tp.setCharacterAttributes(set, false);


In addition to using addAttribute to add attributes to the set, there are some helper methods in the StyleConstants class. For instance, instead of having to use StyleConstants.CharacterConstants.Bold, as shown above, you can simply call the setBold method of StyleConstants, and pass in the appropriate AttributeSet and boolean value:


StyleConstants.setBold(set, true);


Actually, the first argument to the StyleConstants methods must be a MutableAttributeSet, which is an extension of the AttributeSet interface. SimpleAttributeSet implements both MutableAttributeSet and AttributeSet. See the StyleConstants class definition for the full set of methods.


Because the setText method of JTextPane will replace all the content, a better way to add multi-attributed text is to work with the component's Document, which contains the text and its attributes. Get the Document with getStyledDocument, and add text to it with insertString. The insertString method requires as arguments, the position to add, the text to add, and the attribute set. The method can also throw a BadLocationException, which you must catch or pass along.


Document doc = pane.getStyledDocument();

try {

doc.insertString(doc.getLength(), "Blind", set);

} catch (BadLocationException e) {

System.err.println("Bad location");

return;

}


To demonstrate, let's provide a JTextPane with three words, where each word has a different style. Notice the different ways the attribute sets are initialized and associated with the JTextPane.


import java.awt.*;

import javax.swing.*;

import javax.swing.text.*;


public class Multi {

public static void main(String args[]) {

JFrame frame = new JFrame(

"Multiattributed text");

frame.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);

Container content = frame.getContentPane();

JTextPane pane = new JTextPane();

SimpleAttributeSet set =

new SimpleAttributeSet();

set.addAttribute(

StyleConstants.CharacterConstants.Bold,

Boolean.TRUE);

// Initialize attributes before adding text

pane.setCharacterAttributes(set, true);

pane.setText("Three");


set = new SimpleAttributeSet();

StyleConstants.setItalic(set, true);

StyleConstants.setForeground(set, Color.PINK);

StyleConstants.setBackground(set, Color.GREEN);


Document doc = pane.getStyledDocument();

try {

doc.insertString(

doc.getLength(), "Blind", set);

} catch (BadLocationException e) {

System.err.println("Bad location");

return;

}


set = new SimpleAttributeSet();

StyleConstants.setFontSize(set, 48);


try {

doc.insertString(

doc.getLength(), "Mice", set);

} catch (BadLocationException e) {

System.err.println("Bad location");

return;

}


JScrollPane scrollPane = new JScrollPane(pane);

content.add(scrollPane, BorderLayout.CENTER);

frame.setSize(300, 200);

frame.show();

}

}


When you run the program, here's what you should see:



责任编辑:lss
  相关新闻
Spring MVC framework总体分析
Spring MVC framework总体分析
2005年9月全国计算机等级考试二级Visual FoxPro笔试试
Spring VS. HiveMind
Spring开发基础之Spring事务管理
Jsp中的Application使用
各种CISCO认证的简单介绍
CCDA认证-思科(CISCO)认证设计工程师问答
Cisco国际认证全国考试中心查询
Visual FoxPro 中的错误处理
2005年9月全国计算机等级考试二级Visual FoxPro笔试试
Oracle9i iSQL*PLUS的配置过程
CCDA认证-思科(CISCO)认证设计工程师问答
CISCO认证种类
Cisco认证网络工程师介绍
各种CISCO认证的简单介绍
CISCO认证证书有关问答
Cisco认证体系
CISCO最新CCSP认证介绍
Cisco职业认证再认证体系及程序
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号