JTextPane插入图片和获得插入图片的位置及路径

jaMsg为JTextPane对象。

JTextPane插入图片的代码:

//点击了发送图片按钮
			JFileChooser jfc = new JFileChooser();
			FileNameExtensionFilter filter = new FileNameExtensionFilter("图片(jpg,gif)","gif","jpg");
			jfc.setFileFilter(filter);
			
			int rtn = jfc.showOpenDialog(this);
			if(rtn == JFileChooser.APPROVE_OPTION) {
				
				String filePath = jfc.getSelectedFile().getAbsolutePath();
				
				//向jaMsg中插入一张图片
				ImageIcon img = new ImageIcon(filePath);
				this.jaMsg.insertIcon(img);
			}


JTextPane解析出其中的图片,并放入一个list中:

//获得JTextPane中的图片
			for(int i=0;i

JTextPane将文字及图片路径一起输出:

for(int i=0;i

输出来的就是以下格式:

发送:打发打发#C:\Users\Administrator\Documents\360截图\360截图20120605224732628.jpg#短发的空间发的减肥的见附件

可以看到,用#号将文字和图片路径分开了,接下来就可以用获得的数据进行操作了。

 

但是,以上的代码,在用户输入一行文字之后,再按下【ENTER】键,然后在下一行插入图片。这时利用此代码就会产生IndexOutofBounds错误。

报错就报在,从list中取这一行。很明显,只有第一行的图片放入了list,后面的行都没有放。这是为什么呢?

我们查看一下JDK API文档,对于StyledDocument,它是java.swing.text下的一个类,是一个用于描述文档结构的。其中getRootElements()是从Document接口继承的方法,返回所有的根元素,Element[]。但是一个文档只有一个根,所以我们通常是getRootElements()[0]。

那么我们可以猜想得到getRootElements()[0].getElement(0)获得的是文档的第一段。而我们按了回车键后,是到了第二段,那么插入的图片,就没有放入list中。那么我们再在其后遍历想取时,自然就会报IndexOfBounds错误。

所以放入list的代码应该改为:

java.util.List list = new ArrayList();
			
			for(int i=0;i


 

你可能感兴趣的:(JAVA)