JEditorPane显示HTML --Swing篇

Java实用经验总结--Swing篇【四】
2007年07月27日 星期五 19:10

5       JEditorPane显示HTML描述的文本

JDK1.4开始,Swing的很多组件(如JLabel)都可以显示HTML语言写的文本。这是一个巨大的进步,因为我们可以将所要显示的文字的配置信息如字体,字号,颜色,换行等信息直接以HTML写入到组件的setText()方法当中,不但免去了事后对这些信息进行繁杂配置的烦恼,而且还丰富和简化了所要显示文本的形式。而JEditorPane则有所不同,它天生就是用来分析并显示格式化文本的,由一些Java写的开源Web浏览器甚至都采用改进后的JEditorPane作为Web页的显示器。下图就是SwingSet2中的JEditorPane相关的例子。我们可以看到JEditorPane可以显示大多数的HTML元素,包括图片,格式化文字,URL链接等。

JEditorPane显示HTML --Swing篇_第1张图片

然而通过JEditorPane显示HTML描述的文本有两种方式:

第一种是直接使用JEditorPane.setPage(String htmlTxt);来显示用html语言写成的文本。但是这种方法的缺点是无法显示HTML文本中所描述的对外部资源(如图片,CSS等)的引用。所以如果要显示更为丰富的信息,仅仅用第一种方法是不够的。

       所以第二种方法就呼之欲出:将用HTML语言描述的动态文本信息写到文件中,使之成为真正的HTML文件,再用JEditorPane.setPage(URL)JEditorPane.setPage(String htmlFilePath)JEditorPane方法读入这个动态生成的内容文件就可以让JEditorPane自动为我们显示丰富的信息了。

   String vNewReportFileName = "file:///c:/temp.html";

   JEditorPane reportPane = new JEditorPane();

   File f = new File(FileUtil.reportDir,vNewReportFileName);

  FileWriter fw = new FileWriter(f, false);

   fw.write("<html>");

  fw.write("<head>");

  …………

  fw.write("</body></html>");

//清理操作

   fw.flush();

   fw.close();

f = null;

reportPane.setPage(vNewReportFileName);

下图就是我的程序所显示的结果,从图中我们可以清楚地看到由CSS文件定义的表格的Title,这个Title是由一个蓝色的图片作为背景的。

JEditorPane显示HTML --Swing篇_第2张图片

让人遗憾的是用JEditorPane显示的表格的边框都很粗,虽然我已经将了表格的border设置为1,可是JEditorPane依然我行我素。但是在IE下,表格的边框的表现就要好的多:

JEditorPane显示HTML --Swing篇_第3张图片

网上有人说这是一个Bug,但是没有人给过解决这个问题的方法,如果有人又解决方法的话请留言,我将不胜感激!

你可能感兴趣的:(java,html,String,swing,File,语言)