`

关于JTextPane读取RTF多出一行的问题

阅读更多

代码如下:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.StyleContext;
import javax.swing.text.rtf.RTFEditorKit;

public class Test {
	public static void main(String[] args) {
		InputStream in = null;
		try {
			in = new FileInputStream("bbb.rtf");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		DefaultStyledDocument doc = new DefaultStyledDocument(new StyleContext());
		RTFEditorKit kit = new RTFEditorKit();
		try {
			kit.read(in, doc, 0);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (BadLocationException e) {
			e.printStackTrace();
		}
		
		System.out.println("Reading, Doc length = " + doc.getLength());

		JFrame jframe = new JFrame();
		JTextPane jtp = new JTextPane();
		
		jtp.setDocument(doc);
		jframe.add(jtp);
		jframe.setSize(400, 200);
		jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jframe.setVisible(true);
	}
}

 结果在JTextPane中显示比rtf文档中末尾多了一个回车,经研究发现是由于setDocument方法引起的。


 

其方法说明是 Associates the editor with a text document. This must be a StyledDocument .

我想是Associates的缘故吧,document本身末尾含回车,JTextPane中也是有回车的,因此组合一起就多了一个回车,但是如何解决这个问题呢?

 

2009.11.11 14:38编辑添加:

保证不多出换行的一个权宜办法:

try {
    jtp.getDocument().insertString(0, doc.getText(0, doc.getLength() - 1), null);
} catch (BadLocationException e) {
    e.printStackTrace();
}

 此段用来替换

jtp.setDocument(doc);

至于insertString之后的文字无格式,可以通过构造insertString方法的第三参数AttributeSet来添加,此处为null,例如:

SimpleAttributeSet attrset = new SimpleAttributeSet();
StyleConstants.setForeground(attrset, Color.red);
StyleConstants.setUnderline(attrset, true);
StyleConstants.setItalic(attrset, true);
StyleConstants.setFontSize(attrset, 24);

 至于其与原先doc的格式关联,还未找到。

 

 

  • 大小: 6.8 KB
分享到:
评论

相关推荐

    读取doc rtf文档内容

    本篇文章将深入探讨如何在Java中读取doc和rtf文档内容,并解决中文乱码问题,同时还会涉及到log4j日志记录以及使用Swing展示rtf内容。 首先,读取.doc文件通常涉及到使用Apache POI库。Apache POI是一个开源项目,...

    关于JTextPane中进行搜索结果显示的问题及解决

    然而,在`JTextPane`中实现搜索功能可能会遇到一些问题,特别是关于结果显示的部分。本文将深入探讨这些常见问题以及相应的解决方案。 首先,让我们了解`JTextPane`的基础。`JTextPane`基于抽象文本组件`Abstract...

    JAVA-----JTextPane实例

    ### JAVA中的JTextPane:一个全面的解析与实例讲解 在Java Swing库中,`JTextPane`是一个功能强大的文本组件,它允许显示和编辑富文本格式,包括字体、颜色和排版等特性。本文将深入探讨`JTextPane`的基本概念、...

    用java实现 写RTF文件

    RTF(Rich Text Format)是一种跨平台的文本格式,它允许在不同的应用程序和操作系统之间交换格式丰富的文本。在Java中,我们可以通过使用`java.io`和`java.text`包中的类来实现RTF文件的创建和写入。下面将详细介绍...

    JTextPane使用

    JTextPane使用,可以传图片,文字等

    JTextPane 关键字变色

    在Java GUI编程中,`JTextPane`是一个非常重要的组件,它属于Swing库,用于显示和编辑富文本。在给定的标题“JTextPane 关键字变色”和描述“SWT JTextPane 可以把控件中需要的字符串的颜色修改成自己想要的颜色”中...

    控制jEditorPane和jTextPane换行的演示程序

    在Java Swing库中,`JEditorPane`和`JTextPane`是两个常用的文本组件,它们主要用于显示和编辑富文本内容。...如果你希望了解更多关于自定义`Document`或处理文本组件换行的实践知识,可以从给出的博客链接开始探索。

    JTextPane--insert-Image.zip_JTextPane

    在Java Swing库中,`JTextPane`是一个高级文本组件,它允许用户处理富文本,包括格式化的文本、图像和嵌入对象。本项目提供的源码着重展示了如何在`JTextPane`中插入图片和艺术字,使得文本区域更加丰富多彩。`...

    JTable编辑器、渲染器及JTextPane着色、搜索实例——待办事项、日历及JSON格式化工具

    NULL 博文链接:https://icarusliu.iteye.com/blog/2098986

    JEditorPane/JTextPane常见操作(字体,颜色,字号,加粗,斜线,下划线,保存,行间距 等操作)以及HTML空格处理

    关于行间距,`JTextPane`可以通过设置`ParagraphAttributes`来调整。创建一个`ParagraphAttributes`对象,然后设置所需的间距,最后将其应用到文档中。 对于HTML中的空格处理,有时我们需要去除不必要的空格或者...

    java写的记事本程序带工具栏可以改变字体颜色

    同时,对于有经验的开发者,它提供了一个基础的文本编辑器模板,可以在此基础上扩展出更多功能,如查找替换、拼写检查等。通过阅读和理解源码,开发者可以深化对Java GUI编程的理解,特别是Swing和JTextPane组件的...

    Swing实现编辑器(支持语法高亮)

    Swing是Java编程语言中的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分,由Sun Microsystems开发并引入Java平台。Swing提供了一系列组件,用于创建丰富的桌面应用程序,包括按钮、文本框...

    ChatApp_Java.zip

    课程设计期间做的Java的桌面端小程序,可以发送Emoji表情的聊天室,另外在文件夹中放置了自己的关键代码部分解析,关于emoji部分可查看笔者博客...

    设计文档1

    GUI界面包括编辑区,为了实现行号显示,有两种方案:一是使用两个JTextPane,二是只使用一个JTextPane。第一种方案可能导致行号刷新不及时,而第二种方案可能需要处理复杂的滚动条同步问题。 总的来说,这个项目...

    EditorMDI多文档编辑器swing.rar

    【EditorMDI多文档编辑器】是一款基于Java Swing技术开发的多文档界面(MDI, Multiple Document Interface)编辑器。Swing是Java提供的一种用于构建图形用户界面(GUI)的库,它允许开发者创建功能丰富的桌面应用...

Global site tag (gtag.js) - Google Analytics