Swing使用JEditorPane显示HTML内容

2015-01-17 18:19:38|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:Java, Swing, 界面设计|来源:唯设编程网

用户点击左侧列表项的时候,会触发generateHTML动态更改JEditorPane面板中显示的HTML内容,下面是JList列表绑定监听器的代码:

//快照列表选择事件
snapList.addListSelectionListener(new ListSelectionListener() {			
	@Override
	public void valueChanged(ListSelectionEvent e) {
		String selValue = snapList.getSelectedValue();
		if(selValue != null){
			if(selValue.equals("最新"))
				SummaryPanel.this.delSnapBtn.setEnabled(false);
			else
				SummaryPanel.this.delSnapBtn.setEnabled(true);
			htmlPane.setText(generateHTML(selValue));
		}else{
			SummaryPanel.this.delSnapBtn.setEnabled(false);
		}
	}
});

6. JEditorPane概述

public class JEditorPane extends JTextComponent

可编辑各种内容的文本组件。有关基础知识信息和使用编辑器窗格的示例,请参阅 The Java Tutorial 中的 Using Text Components 一节。

此组件使用 EditorKit 的实现来完成其操作。对于给予它的各种内容,它能有效地将其形态变换为适当的文本编辑器种类。该编辑器在任意给定时间的内容类型都由当前已安装的 EditorKit 确定。如果将内容设置为新的 URL,则使用其类型来确定加载该内容所应使用的 EditorKit。

默认情况下,已知下列内容类型:

text/plain
纯文本,即无法识别给定的类型时所使用的默认值。在此情况下使用的工具包是 DefaultEditorKit 的扩展,可生成有换行的纯文本视图。
text/html
HTML 文本。在此情况下使用的工具包是类 javax.swing.text.html.HTMLEditorKit,支持 HTML 3.2。
text/rtf
RTF 文本。在此情况下使用的工具包是类 javax.swing.text.rtf.RTFEditorKit,它提供了对多样化文本格式 (Rich Text Format) 的有限支持。
有多种方式可将内容加载到此组件中。

可使用 setText 方法来初始化字符串组件。在这种情况下,将使用当前的 EditorKit,且此类型为期望的内容类型。
可使用 read 方法来初始化 Reader 组件。注意,如果内容类型为 HTML,那么只有使用了 <base> 标记,或者设置了 HTMLDocument 上的 Base 属性时才能解析相关的引用(例如对于类似图像等内容)。在这种情况下,将使用当前的 EditorKit,且此类型为期望的内容类型。
可使用 setPage 方法来初始化 URL 组件。在这种情况下,将根据该 URL 来确定内容类型,并且设置为该内容类型所注册的 EditorKit。
某些内容类型可能通过生成超链接事件来提供对超链接的支持。如果 JEditorPane 是不可编辑的(已调用了 JEditorPane.setEditable(false);),则 HTML EditorKit 将生成超链接事件。如果文档中嵌入了 HTML frame,则典型的响应是更改当前文档的某一部分。以下代码片段是一种可能的超链接侦听器实现,它特殊对待 HTML frame 事件,并且简单地显示其他所有已激活的超链接。

     class Hyperactive implements HyperlinkListener {

         public void hyperlinkUpdate(HyperlinkEvent e) {
             if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                 JEditorPane pane = (JEditorPane) e.getSource();
                 if (e instanceof HTMLFrameHyperlinkEvent) {
                     HTMLFrameHyperlinkEvent  evt = (HTMLFrameHyperlinkEvent)e;
                     HTMLDocument doc = (HTMLDocument)pane.getDocument();
                     doc.processHTMLFrameHyperlinkEvent(evt);
                 } else {
                     try {
                         pane.setPage(e.getURL());
                     } catch (Throwable t) {
                         t.printStackTrace();
                     }
                 }
             }
         }
     }


有关自定义如何呈现 text/html 的信息,请参阅 W3C_LENGTH_UNITS 和 HONOR_DISPLAY_PROPERTIES

发表评论0条 】
网友评论(共?条评论)..
Swing使用JEditorPane显示HTML内容