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); } } });
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