Swing使用JEditorPane显示HTML内容

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

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

Swing提供了方便的手段进行界面元素的布局,但是在进行复杂样式布局的时候,使用HTML+CSS比直接使用Swing的界面元素进行布局要方便很多,本文介绍在JEditorPane中使用HTML+CSS布局界面的基本方法,并且还介绍了JEditorPane如何响应HTML中的超链接事件。

首先看看本示例实现的效果:

Swing面板显示HTML+CSS内容

面板的左侧是一个JList列表控件,列出了保存的快照节点,右侧是使用HTML+CSS进行布局得到对应节点的详细内容。本文着重关注JEditorPane显示HTML的方法,其它内容不做详细介绍。

1. 定义成员变量

private JEditorPane htmlPane = new JEditorPane();
private HTMLEditorKit kit = new HTMLEditorKit();
private Document htmlDocument = kit.createDefaultDocument();
/**
* 超链接监听器
*/
private HyperlinkListener listener = null;

定义4个类的成员变量

2. 将JEditorPane添加到滚动面板中

this.getViewport().add(htmlPane);

3. 初始化JEditorPane面板

/**
 * 初始化HTML面板
 */
private void initHtmlPane() {
	//
	this.initStyle(kit.getStyleSheet());
	listener = new HyperlinkListener() {
		@Override
		public void hyperlinkUpdate(HyperlinkEvent e) {
			if (e.getEventType() == EventType.ACTIVATED) {
				// 保存快照
				if (e.getDescription().equals("EVT_SAVE")) {
					if(SummaryPanel.this.listServer instanceof ModelAccount){
						ModelAccount modAccount = (ModelAccount) SummaryPanel.this.listServer;
						try {
							modAccount.saveSnap();
							JOptionPane.showMessageDialog(SummaryPanel.this, "保存快照成功!");
							SummaryPanel.this.loadSnapLableList();
						} catch (Exception e1) {
							JOptionPane.showMessageDialog(SummaryPanel.this, "出错:"+e1.getMessage());
						}							
					}
				}
			} else {
				String styleName = null;
				if (e.getEventType() == HyperlinkEvent.EventType.ENTERED) {
					styleName = ".btn:hover";
				} else if (e.getEventType() == HyperlinkEvent.EventType.EXITED) {
					styleName = ".btn";
				}
				if (styleName != null) {
					JEditorPane editor = (JEditorPane) e.getSource();
					HTMLDocument doc = (HTMLDocument) editor.getDocument();
					Style aStyle = kit.getStyleSheet().getStyle(styleName);

					int start = e.getSourceElement().getStartOffset();
					int end = e.getSourceElement().getEndOffset();
					doc.setCharacterAttributes(start, end - start, aStyle,false);
				}
			}
			
		}
    };
    //初始化htmlPane
    htmlPane.setEditable(false);
    htmlPane.setEditorKit(kit);	    
    htmlPane.addHyperlinkListener(listener);    
    htmlPane.setDocument(htmlDocument);	  
	
}
发表评论0条 】
网友评论(共?条评论)..
Swing使用JEditorPane显示HTML内容