12.12.4 使用
Swing
提供了一个JEditorPane
类,该类可以编辑各种文本内容,包括有格式的文本。在默认情况下,JEditorPane
支持如下三种文本内容。
JEditorPane支持的文本内容 |
描述 |
text/plain |
纯文本,当JEditorPane 无法识别给定内容的类型时,使用这种文本格式。在这种模式下,文本框的内容是带换行符的无格式文本。 |
text/html |
HTML 文本格式。该文本组件仅支持HTML3.2 格式,因此对互联网上复杂的网页支持非常有限。 |
text/rtf |
RTF (富文本格式)文本格式。实际上,它对RTF 的支持非常有限。 |
JEditorPane用途有限
通过上面介绍不难看出,其实JEditorPane
类的用途非常有限,使用JEditorPane
作为纯文本的编辑器,还不如使用JTextArea;
如果使用JEditorPane
来支持RTF
文本格式,但它对这种文本格式的支持又相当有限;JEditorPane
唯一可能的用途就是显示自己的HTML
文档,前提是这份HTML
文档比较简单,只包含HTML3.2
或更早的元素。
JEditorPane
组件支持三种方法来加载文本内容。
- 使用
getText()
方法直接设置JEditorPane
的文本内容。
- 使用
read()
方法从输入流中读取JEditorPane
的文本内容。
- 使用
setPage()
方法来设置JEditorPane
从哪个URL
处读取文本内容。在这种情况下,将根据该URL
来确定内容类型。
在默认状态下,使用JEditorPane
装载的文本内容是可编辑的,即使装载互联网上的网页也是如此,可以使用JEditorPane
的setEditable(false)
方法阻止用户编辑该JEditorPane
里的内容。
当使用JEditorPane
打开HTML
页面时,该页面的超链接是活动的,用户可以单击超链接。如果程序想监听用户单击超链接的事件,则必须使用addHyperlinkListener()
方法为JEditorPane
添加一个HyperlinkListener
监听器。
程序
从目前的功能来看,JEditorPane
确实没有太大的实用价值,所以本书不打算给出此类的用法示例有兴趣的读者可以参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| import java.awt.*; import javax.swing.*; import javax.swing.text.*;
public class JTextPaneTest { JFrame mainWin = new JFrame("测试JTextPane"); JTextPane txt = new JTextPane(); StyledDocument doc = txt.getStyledDocument(); SimpleAttributeSet android = new SimpleAttributeSet(); SimpleAttributeSet java = new SimpleAttributeSet(); SimpleAttributeSet javaee = new SimpleAttributeSet();
public void init() { StyleConstants.setForeground(android, Color.RED); StyleConstants.setFontSize(android, 24); StyleConstants.setFontFamily(android, "Dialog"); StyleConstants.setUnderline(android, true); StyleConstants.setForeground(java, Color.BLUE); StyleConstants.setFontSize(java, 30); StyleConstants.setFontFamily(java, "Arial Black"); StyleConstants.setBold(java, true); StyleConstants.setForeground(javaee, Color.GREEN); StyleConstants.setFontSize(javaee, 32); StyleConstants.setItalic(javaee, true); txt.setEditable(false); txt.setText("疯狂Android讲义\n" + "疯狂Java讲义\n" + "轻量级Java EE企业应用实战\n"); doc.setCharacterAttributes(0, 12, android, true); doc.setCharacterAttributes(12, 12, java, true); doc.setCharacterAttributes(24, 30, javaee, true); mainWin.add(new JScrollPane(txt), BorderLayout.CENTER); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); int inset = 100; mainWin.setBounds(inset, inset, screenSize.width - inset * 2, screenSize.height - inset * 2); mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainWin.setVisible(true); }
public static void main(String[] args) { new JTextPaneTest().init(); } }
|
来学习该类的用法。相比之下,该类的子类JTextPane
则功能丰富多了,下面详细介绍JTextPane
类的用法。