JAVA进行式
让我们把JAVA进行到底!
posts - 13,comments - 21,trackbacks - 0
        JTextPane类的对象可以显示文本、图片和超链接等,在创建了一个JTextPane类的纯文本格式对象后,可以向里面填写入文字(英文或汉字等)、插入超链接或图片,但无法通过getText()方法获得其中除文字以外的内容,也即无法保存包含文字、图片和超链接的完全对象内容,而如果一开始创建的是JTextPane类的HTML格式对象,则虽然可以保存文字的样式(颜色和字体、字号等)但无法再通过insertIcon()方法插入、显示图片,更不能直接保存了,考虑到的解决思路:①通过手工在HTML文件中插入<img src="02.gif">语句来实现对图片的保存,可是这样比较不容易实现,需要将图片保存在特定位置,才可以在下次打开JTextPane类对象是显示出图片;②创建JTextPane类的纯文本对象,在插入图片、超链接、设置字体样式或其它任何对JTextPane类的对象进行的格式设置时均记录下设置的位置和内容,并和文本内容一起保存到硬盘文件中,下次读取时,按照记录重新恢复原内容,实现的过程更复杂;③将JTextPane对象通过对象序列化的方式在硬盘中保存为一个文件,下次读取时再反序列化为完整对象。
        最后,选择了最好实现的第三种方法,序列化了JTextPane对象,表现出来的效果不错。不过,在实现过程中未考虑程序的运行效率,现在也不太清楚,这样的处理方式是不是比较没有效率哩?
posted on 2005-11-29 22:51 水秀清灵 阅读(6371) 评论(6)  编辑  收藏 所属分类: 学习笔记

FeedBack:
# re: 如何完全保存JTextPane中编辑的文本和图片的方法
2006-10-23 01:18 | hanzaihua
你好,我在写一个服务端和客户断通讯的程序.用的方法和你的第三种一样.
但问题是发送方发送图文后,会覆盖接受方的历史记录.那如何实现追加呢?
期待你的回音.  回复  更多评论
  
# re: 如何完全保存JTextPane中编辑的文本和图片的方法
2006-10-23 21:13 | 水秀清灵[匿名]
@hanzaihua

嗯,我不清楚你所说的追加是什么意思呀?可不可以描述详细一点?  回复  更多评论
  
# re: 如何完全保存JTextPane中编辑的文本和图片的方法
2007-05-11 22:53 | 王锐
我最近始终想不出如何编写保存JTextPane中编辑的文本和图片的方法,能否向你请教一下,大学互相学习一下,你能否把你编写的代码发到我邮箱里呢,谢谢!
我邮箱是dragonet-wl@163.com  回复  更多评论
  
# re: 如何完全保存JTextPane中编辑的文本和图片的方法
2007-07-23 02:58 | 水秀清灵
不是不给你发哦,抱歉哈,我也没有那个代码了,已经是一年半以前的了,现在找不到了,不过,其实,道理也简单,就如我在上面所说的,将JTextPane对象通过对象序列化的方式在硬盘中保存为一个文件,下次读取时再反序列化为完整对象。
嗯,对象序列化的例子网上很好找,其实,我不知道这是不是最好的主意,因为,基本上我没有考虑过效率问题。  回复  更多评论
  
# re: 如何完全保存JTextPane中编辑的文本和图片的方法
2007-12-17 18:17 | 行者买刀
private void doRead(File file) {
FileInputStream fous = null;
{
ObjectInputStream ois = null;
try {
fous = new FileInputStream(file);
ois = new ObjectInputStream(fous);
text = (JTextPane) ois.readUnshared();
if (text != null) {
System.out.println("ok");
}
scrollPane = new JScrollPane(text);
this.getContentPane().add(scrollPane);
SwingUtilities.updateComponentTreeUI(text);
} catch (IOException ex) {
Logger.getLogger(TestJTextArea.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(TestJTextArea.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
fous.close();
} catch (IOException ex) {
Logger.getLogger(TestJTextArea.class.getName()).log(Level.SEVERE, null, ex);
}
try {
ois.close();
} catch (IOException ex) {
Logger.getLogger(TestJTextArea.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}

private void doSave(File file) {
FileOutputStream fous = null;
{
ObjectOutputStream oos = null;
try {
fous = new FileOutputStream(file);
oos = new ObjectOutputStream(fous);
oos.writeUnshared(text);
oos.flush();
} catch (IOException ex) {
Logger.getLogger(TestJTextArea.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
fous.close();
} catch (IOException ex) {
Logger.getLogger(TestJTextArea.class.getName()).log(Level.SEVERE, null, ex);
}
try {
oos.close();
} catch (IOException ex) {
Logger.getLogger(TestJTextArea.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}  回复  更多评论
  
# re: 如何完全保存JTextPane中编辑的文本和图片的方法
2008-07-14 16:23 | hhhh
如果使用了UndoableEditListener的话,就不能序列化了。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: