JAVA浏览器实现方式_第1页
JAVA浏览器实现方式_第2页
JAVA浏览器实现方式_第3页
JAVA浏览器实现方式_第4页
JAVA浏览器实现方式_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JAVA浏览器实现方式标签:浏览器javaswingbrowserswtstring2012-07-1215:585831人阅读\o"举报"举报分类:j2se(138)作者同类文章X前言在使用Java开发客户端程序时,有时会需要在界面中使用网页浏览器组件,用来显示一段HTML或者一个特定的网址。本文将介绍在界面中使用浏览器组件的四种方法,给出示例的代码,并且分析每种方法的优点与不足,便于Java开发者在实际开发过程中根据自己的需要来选择。\l"ibm-pcon"回页首JDK中的实现-JEditorPaneSwing是一个用于开发Java应用程序图形化用户界面的工具包,它是以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格,而且它是轻量级(light-weight)组件,没有本地代码,不依赖于操作系统的支持,这是它与AWT组件的最大的区别。在Swing中,有一个组件是JEditorPane,它是一个可以编辑任意内容的文本组件。这个类使用了EditorKit来实现其操作,对于给予它的各种内容,它能有效地将其类型变换为适当的文本编辑器种类。该编辑器在任意给定时间的内容类型由当前已经安装的EditorKit来确定。默认情况下,JEditorPane支持以下的内容类型:text/plain纯文本的内容,在此情况下使用的工具包是DefaultEditorKit的扩展,可生成有换行的纯文本视图。text/htmlHTML文本,在此情况下使用的工具包是javax.swing.text.html.HTMLEditorKit,它支持HTML3.2。text/rtfRTF文本,在此情况下使用的工具包是类javax.swing.text.rtf.RTFEditorKit,它提供了对多样化文本格式(RichTextFormat)的有限支持。JEditorPane的常用方法JEditorPane()创建一个新的JEditorPane对象JEditorPane(Stringurl)根据包含URL规范的字符串创建一个JEditorPaneJEditorPane(Stringtype,Stringtext)创建一个已初始化为给定文件的JEdiorPaneJEditorPane(URLinitialPage)根据输入指定的URL来创建一个JEditorPanescrollToReference(Stringreference)将视图滚动到给定的参考位置(也就是正在显示的URL的URL.getRef方法所返回的值)setContentType(Stringtype)设置此编辑器所处理的内容类型setEditorKit(EditorKitkit)设置当前为处理内容而安装的工具包setPage(Stringurl)设置当前要显示的URL,参数是一个StringsetPage(URLpage)设置当前要显示的URL,参数是一个.URL对象setText(Stringt)将此TextComponent的文本设置为指定内容,预期以此编辑器的内容类型格式提供该内容JEditorPane显示网页要使用JEditorPane来显示HTML,需要完成以下几个步骤:创建一个JEditorPane对象privateJEditorPanejep=newJEditorPane();设置JEditorPane显示的内容为text/htmljep.setContentType("text/html");设置它不可编辑jep.setEditable(false);处理超链接事件jep.addHyperlinkListener(this);JEditorPane需要注册一个HyperlinkListener对象来处理超链接事件,这个接口定义了一个方法hyperlinkUpdate(HyperlinkEvente),示例代码如下:publicvoidhyperlinkUpdate(HyperlinkEventevent){if(event.getEventType()==HyperlinkEvent.EventType.ACTIVATED){try{jep.setPage(event.getURL());}catch(IOExceptionioe){ioe.printStackTrace();}}}完整的代码可以在本文中

\l"download"下载

到。在这个例子中,实现了一个HyperlinkListener接口,在方法实现中,if(event.getEventType()==HyperlinkEvent.EventType.ACTIVATED)这行代码表示首先判断HyperlinkListener的类型,在这里只处理事件类型为

HyperlinkEvent.EventType.ACTIVATED

的事件(即点击了某个超链接的事件),然后通过调用HyperlinkEvent的getURL()方法来获取超链接的URL地址。最后通过调用jep.setPage(event.getURL())方法,使得JEditorPane显示新的URL地址。JEditorPane优缺点由于JEditorPane是包含在J2SE中的Swing中,所以不需要导入第三方的jar文件,相对来说比较简单。但是JEditorPane类对于网页中的CSS的显示处理以及对JavaScript脚本执行的支持很弱,而且官方似乎也没有对JEditorPane类进行改进的打算,如果想用JEditorPane来显示常见的网址,会发现显示出来的页面与IE,Firefox有很大的差别,而且不能正常地处理页面逻辑。所以如果仅仅用来显示比较简单的HTML,用JEditorPane还是一个不错的选择。\l"ibm-pcon"回页首开源的JavaWeb浏览器实现-LoboLobo项目是一个第三方的开源Java浏览器项目,它的官方网站是

/java-browser.jsp。它是使用100%Java代码实现的,而且能完整地支持HTML4、JavaScript以及CSS2,除此之外,它还支持直接的JavaFX渲染。Lobo本身就已经是一个完整的浏览器软件,同时它还提供了很多与网页浏览器相关的API,便于Java程序员在自己的代码中使用或者进行扩展,其中包括渲染引擎API、浏览器API以及插件系统API等等。具体的功能可以在它的官方网站上查看。Lobo中的FramePanelLobo中实现Web浏览器的类叫FramePanel,它提供了对HTML页面显示的封装,并且提供了一些辅助的方法。下面是一些常见方法的介绍:FramePanel()创建一个单独的FramePanel对象,它能被添加到任意的Swing窗口或者组件上。booleanback()浏览器返回上一个页面booleanalert(Stringmessage)打开一个提示对话框,并且显示消息booleanforward()浏览器进入下一个界面booleanconfirm(Stringmessage)打开一个确认对话框,显示特定的消息voidnavigate(Stringurl)在这个组件里面显示特定的网址,参数一个网址的Stringvoidreload()重新加载当前的界面addContentListener(ContentListenerlistener)添加一个内容变化的监听器addNavigationListener(NavigationListenerlistener)添加一个导航(所显示的URL变化)的监听器addResponseListener(ResponseListenerlistener)添加一个获取服务器返回结果的监听器使用FramePanel要想使用FramePanel,首先需要在它的官方网站上面下载它的安装包,然后在安装目录下,可以看到有lobo.jar以及lobo-pub.jar,将这两个jar文件添加到classpath中。类似于JEditorPane,要使用FramePanel有以下的步骤:创建一个FramePanel的对象FramePanelbrowser=newFramePanel();将这个对象添加到界面上。Frame是继承自JPanel,所以可以像其他Swing组件一样地添加到JPanel或者窗口上面。通过调用FramePanel.navigate(url)的方法来设置要显示的网址。不同于JEditorPane,FramePanel已经默认处理了点击超链接的事件,不需要另外手动地编写代码来处理。Lobo浏览器API的优缺点首先Lobo的FramePanel是100%纯Java的实现,具有良好的可移植性,在Window/Linux平台下都能正常地运行。它相比于Swing中的JEditorPane,对于HTML、CSS的显示以及对于JavaScript的执行都有了比较大的提高。经过实际的使用测试,在访问大多数网页的时候,都能比较正常的显示,与主流的IE/Firefox效果类似,不过它对于CSS支持还不是很完整,对于某些比较复杂的网页的,显示出入比较大。另外Lobo项目的文档还不是特别完善,这可能是限制它广泛使用的一个原因。\l"ibm-pcon"回页首JDICplus中的浏览器组件JDIC(JavaDesktopIntegrationComponents)项目的背景是当可以不考虑Java代码的平台可移植性的时候,能让Java程序与系统无缝地整合在一起。它提供给Java代码直接访问本地桌面的功能,其中包含了一系列的Java包以及工具,包含了嵌入本地浏览器组件的功能,启动桌面应用程序,在桌面的系统托盘处添加托盘图标以及注册文件类型关联等等。JDICplus是在JDIC项目上的另外一个扩展,它是一个Java的win32操作系统的扩展开发工具包,也就是说,它只能在Windows操作系统上使用,所以不具有平台无关性。它提供了很多类似于WindowsAPI的功能,除了提供了对IE组件的封装之外,还有地图显示组件,以及编辑浏览MSWord、MSPPT、MSExcel、MSOutlook、PDF的组件。JDICplus的官方网站是/documentation/incubator/JDICplus/index.html,这个页面上展示了很多使用了JDICplus这个库的DEMO,这里讨论的主要是对WindowsIE封装的浏览器组件。使用JDICplus的浏览器组件使用JDICplus,首先需要的是环境的配置。JDICplus需要的是JDK6.0或更高的版本,您需要首先从下载最新的版本。否则代码不能正常编译运行。其次是下载JDICplus的类库,然后将它添加到classpath中。JDICplus中对IE封装的组件是org.jdic.web.BrTabbed,它除了封装了网页的显示,还处理了多个标签页的功能,所以它相对是比较强大的。使用它的步骤如下:初始化JDICplus组件,设置它为非设计模式。这个组件它默认的模式是设计模式,此时如果用来显示HTML内容,会有很多无用的信息。代码如下:org.jdic.web.BrComponent.DESIGN_MODE=false;初始化一个BrTabbed组件:privateBrTabbedbrowser=newBrTabbed();添加到界面中,BrTabbed是JPanel的子类,所以能直接在Swing中使用,就像其他Swing组件一样添加到JPanel或者窗口中。BrTabbed类已经处理了点击超链接的事件,而且还支持多标签,这些不需要手动编写代码来处理。JDICplus浏览器组件的优缺点JDICplus中的浏览器组件使用了JNI来对IE进行了封装,所以它显示的效果与IE完全相同(还包括其中的右键菜单),而且BrTabbed还内置了多标签的功能,使用起来相对比较简单,同样不需要去处理点击超链接的事件。它的缺点首先在于它必须是使用JDK6.0或以上版本,要求比较高,同时它底层使用的是Windows操作系统相关的API,所以不具有平台无关性。\l"ibm-pcon"回页首SWT中的浏览器组件SWT(TheStandardWidgetKit)是Java的一套开源组件库,它提供了一种高效的创建图像化用户界面的能力,也是Eclipse平台的UI组件之一。它相比于Swing,速度相对比较快,而且因为使用了与操作系统相同的渲染方式,界面上与操作模式上比较接近操作系统的风格。SWT的跨平台性是通过不同的底层支持库来解决的。SWT的Browser类org.eclipse.swt.browser.Browser类是SWT中用来实现网页浏览器可视化组件的类,它能显示HTML文档,并且实现文档之间的超链接。它主要有以下的方法。booleanback()当前的会话返回到历史上前一个界面booleanexecute(Stringscript)执行特定的脚本booleanforward()当前的会话前进到历史上下一个页面voidrefresh()刷新显示当前的界面setText(Stringhtml)显示特定的HTML内容setUrl(Stringurl)显示特定的网页内容,传入的参数是网页的地址使用Browser类以下的代码演示了如何使用SWT中的Browser类:

SWT的Browser类demo packageorg.dakiler.browsers;importorg.eclipse.swt.SWT;importorg.eclipse.swt.browser.Browser;importorg.eclipse.swt.widgets.Button;importorg.eclipse.swt.widgets.Display;importorg.eclipse.swt.widgets.Event;importorg.eclipse.swt.widgets.Label;importorg.eclipse.swt.widgets.Listener;importorg.eclipse.swt.widgets.Shell;importorg.eclipse.swt.widgets.Text;publicclassSWTBrowserTest{publicstaticvoidmain(Stringargs[]){Displaydisplay=newDisplay();Shellshell=newShell(display);shell.setText("SWTBrowserTest");shell.setSize(800,600);finalTexttext=newText(shell,SWT.BORDER);text.setBounds(110,5,560,25);Buttonbutton=newButton(shell,SWT.BORDER);button.setBounds(680,5,100,25);button.setText("go");Labellabel=newLabel(shell,SWT.LEFT);label.setText("输入网址:");label.setBounds(5,5,100,25);finalBrowserbrowser=newBrowser(shell,SWT.FILL);browser.setBounds(5,30,780,560);button.addListener(SWT.Selection,newListener(){publicvoidhandleEvent(Eventevent){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论