1、用Swing组件展示HTML文档,内容,在按钮等原子组件上展示HTML文档 用JEditorPane组件创建简单的浏览器,组件上显示HTML,多数基于文本的swing组件上可以显示HTML文本 标签、按钮、菜单项、工具提示等 Swing组件上可以支持的HTML标签有、和,组件上显示HTML,限制: 不支持HTML3.2中的、和标记 不支持HTML4.0中的各种新标记,如、和等 不支持框架标签,组件上显示HTML,支持标签的限制: 不能解析属性值中的相对地址,影响IMG标签的src属性 链接在单击后不会发生转向 表单仅能显示,用户不能输入或提交 总之,在swing组件中仅能支持静态文本和图片,J
2、EditorPane,如需要处理交互,可以使用javax.swing.JEditorPane. 可以处理框架、表单及超链接 JEditorPane类以简单直观的方式支持HTML,使用时,仅需指明URL即可显示,JEditorPane构造方法,JEditorPane类提供四个构造方法: public JEditorPane() public JEditorPane(URL initialPage)throws IOException public JEditorPane(String url)throws IOException public JEditorPane(String mimeTyp
3、e,String text),JEditorPane设置方法,JEditorPane类还提供了设置要展示的页面的方法: public void setPage(URL page)throws IOException public void setPage(String url)throws IOException public void setContentType(String type) public void setText(String text)以上两个setPage()方法指定要展示的页面的URL,setContentType()方法指定文档的类型,可选值包括“text/html”
4、和“text/plain”等,setText()方法指定文档的具体内容。,JEditorPane举例1,以下四段代码的作用是等价的,它们都创建了能展示www.javathinker.org网站的主页的JEditorPane对象:,/第一段代码 JEditorPane jep=new JEditorPane(); jep.setPage(“http:/www.javathinker.org“); /传入字符串类型参数/第二段代码 JEditorPane jep=new JEditorPane(); URL url=new URL(“http:/www.javathinker.org“); /传入
5、URL类型参数 jep.setPage(url);,/第三段代码 JEditorPane jep=new JEditorPane(“http:/www.javathinker.org“); /传入字符串类型参数/第四段代码 URL url=new URL(“http:/www.javathinker.org“); JEditorPane jep=new JEditorPane(url); /传入URL类型参数,JEditorPane举例2,以下两段代码是等价的,它们创建的JEditorPane对象都展示变量text指定的HTML文档:,/第一段程序代码 String text=“Hello W
6、orld!“; JEditorPane jep=new JEditorPane(“text/html“,text);,/第二段程序代码 String text=“Hello World!“; JEditorPane jep=new JEditorPane(); jep.setContentType(“text/html“); jep.setText(text);,JEditorPane中处理超链接,对于JEditorPane类展示的HTML页面,当用户选择页面上的超级链接时, 触发HyperlinkEvent事件, 由HyperlinkListener监听器负责处理。 JEditorPane的
7、addHyperlinkListener()方法注册该监听器。HyperlinkListener接口中声明了处理HyperlinkEvent事件的方法:public void hyperlinkUpdate(HyperlinkEvent evt),JEditorPane中处理超链接,hyperlinkUpdate()方法有一个HyperlinkEvent类型的参数。在该方法的实现中,可通过HyperlinkEvent参数的以下方法获得用户选择的超级链接以及事件类型: getURL():返回一个URL对象,表示用户在页面上选择的超级链接。 getEventType():返回一个Hyperlink
8、Event.EventType类的对象,表示具体的事件类型,可能的取值包括: (1)HyperlinkEvent.EventType.ACTIVATED:选择了超级链接。 (2)HyperlinkEvent.EventType.ENTERED:鼠标进入超级链接区域。 (3)HyperlinkEvent.EventType.EXITED:鼠标退出超级链接区域。,JEditorPane中处理超链接实例,以下hyperlinkUpdate()方法使得JEditorPane展示用户选择的超级链接: /* 处理用户选择超级链接事件 */ public void hyperlinkUpdate(Hyper
9、linkEvent evt)try if(evt.getEventType()=HyperlinkEvent.EventType.ACTIVATED) jep.setPage(evt.getURL(); /使JEditorPane展示用户选择的超级链接 catch(Exception e)jep.setText(“无法打开网页:“+ evt.getURL().toString()+“); ,JEditorPane处理表单,表单的处理由与JEditorPane对象关联的HTMLEditorKit对象控制 其setAutoFormSubmission(boolean isAuto)方法决定处理表单
10、的方式: 如果参数isAuto为true,就按自动方式提交表单,默认值 如果参数isAuto为false,那么按手工方式提交表单 手工提交的方式会触发一个javax.swing.text.html.FormSubmitEvent事件,也由HyperlinkListener监听器负责监听。,附录:InetAddress类的用法,简介,连接到Internet上的计算机节点称为主机 主机的标识由Internet地址或IP地址唯一标识 为便于记忆,产生域名系统DNS,将IP地址和主机名做映射 一台主机可以有多个主机名(域名) 一个名字可以映射多个IP地址 利用主机名访问Internet中的任何一台主机
11、,需要本地域名服务器和其他域名服务器的协作,InetAddress类,是Java对IP地址的高级表示 通常同时包括主机名和IP地址 在.*包中 用于大多数网络类中,是后继学习的基础,创建新的InetAddress对象,可利用InetAddress类的3个静态方法返回其对象,public static InetAddress InetAddress.getByName(String hostName) throws UnknownHostException /返回一个地址 public static InetAddress InetAddress.getAllByName(String host
12、Name) throws UnknownHostException /返回地址组 public static InetAddress InetAddress.getLocalHost() throws UnknownHostException /本地机IP地址,说明:,参数hostName的形式: 网址, 字符串形式的点分IP地址,如10.2.3.4 这三个方法均会进行网络连接去得到它们需要的所有信息 潜在的异常情况: 禁止连接DNS服务器 本地机没有网络连接 等等,作业,设计GUI,输入文件名: 文本域输入 文件打开对话框选择 分析读取的DNS.txt文件 统计文件的总行数 统计文件中显示的省市的个数 统计信息输出在文本区中 由IP地址的原始形式,返回主机名,