JAVA浏览器实现方式课案.docx
- 文档编号:14937451
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:12
- 大小:24.03KB
JAVA浏览器实现方式课案.docx
《JAVA浏览器实现方式课案.docx》由会员分享,可在线阅读,更多相关《JAVA浏览器实现方式课案.docx(12页珍藏版)》请在冰点文库上搜索。
JAVA浏览器实现方式课案
JAVA浏览器实现方式
标签:
浏览器javaswingbrowserswtstring
2012-07-1215:
585831人阅读评论(3)收藏举报
分类:
j2se(138)
作者同类文章X
前言
在使用Java开发客户端程序时,有时会需要在界面中使用网页浏览器组件,用来显示一段HTML或者一个特定的网址。
本文将介绍在界面中使用浏览器组件的四种方法,给出示例的代码,并且分析每种方法的优点与不足,便于Java开发者在实际开发过程中根据自己的需要来选择。
回页首
JDK中的实现-JEditorPane
Swing是一个用于开发Java应用程序图形化用户界面的工具包,它是以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格,而且它是轻量级(light-weight)组件,没有本地代码,不依赖于操作系统的支持,这是它与AWT组件的最大的区别。
在Swing中,有一个组件是JEditorPane,它是一个可以编辑任意内容的文本组件。
这个类使用了EditorKit来实现其操作,对于给予它的各种内容,它能有效地将其类型变换为适当的文本编辑器种类。
该编辑器在任意给定时间的内容类型由当前已经安装的EditorKit来确定。
默认情况下,JEditorPane支持以下的内容类型:
∙text/plain
纯文本的内容,在此情况下使用的工具包是DefaultEditorKit的扩展,可生成有换行的纯文本视图。
∙text/html
HTML文本,在此情况下使用的工具包是javax.swing.text.html.HTMLEditorKit,它支持HTML3.2。
∙text/rtf
RTF文本,在此情况下使用的工具包是类javax.swing.text.rtf.RTFEditorKit,它提供了对多样化文本格式(RichTextFormat)的有限支持。
JEditorPane的常用方法
∙JEditorPane()
创建一个新的JEditorPane对象
∙JEditorPane(Stringurl)
根据包含URL规范的字符串创建一个JEditorPane
∙JEditorPane(Stringtype,Stringtext)
创建一个已初始化为给定文件的JEdiorPane
∙JEditorPane(URLinitialPage)
根据输入指定的URL来创建一个JEditorPane
∙scrollToReference(Stringreference)
将视图滚动到给定的参考位置(也就是正在显示的URL的URL.getRef方法所返回的值)
∙setContentType(Stringtype)
设置此编辑器所处理的内容类型
∙setEditorKit(EditorKitkit)
设置当前为处理内容而安装的工具包
∙setPage(Stringurl)
设置当前要显示的URL,参数是一个String
∙setPage(URLpage)
设置当前要显示的URL,参数是一个.URL对象
∙setText(Stringt)
将此TextComponent的文本设置为指定内容,预期以此编辑器的内容类型格式提供该内容
JEditorPane显示网页
要使用JEditorPane来显示HTML,需要完成以下几个步骤:
∙创建一个JEditorPane对象
privateJEditorPanejep=newJEditorPane();
∙设置JEditorPane显示的内容为text/html
jep.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();
}
}
}
完整的代码可以在本文中 下载 到。
在这个例子中,实现了一个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还是一个不错的选择。
回页首
开源的JavaWeb浏览器实现-Lobo
Lobo项目是一个第三方的开源Java浏览器项目,它的官方网站是 http:
//lobobrowser.org/java-browser.jsp。
它是使用100%Java代码实现的,而且能完整地支持HTML4、JavaScript以及CSS2,除此之外,它还支持直接的JavaFX渲染。
Lobo本身就已经是一个完整的浏览器软件,同时它还提供了很多与网页浏览器相关的API,便于Java程序员在自己的代码中使用或者进行扩展,其中包括渲染引擎API、浏览器API以及插件系统API等等。
具体的功能可以在它的官方网站上查看。
Lobo中的FramePanel
Lobo中实现Web浏览器的类叫FramePanel,它提供了对HTML页面显示的封装,并且提供了一些辅助的方法。
下面是一些常见方法的介绍:
∙FramePanel()
创建一个单独的FramePanel对象,它能被添加到任意的Swing窗口或者组件上。
∙booleanback()
浏览器返回上一个页面
∙booleanalert(Stringmessage)
打开一个提示对话框,并且显示消息
∙booleanforward()
浏览器进入下一个界面
∙booleanconfirm(Stringmessage)
打开一个确认对话框,显示特定的消息
∙voidnavigate(Stringurl)
在这个组件里面显示特定的网址,参数一个网址的String
∙voidreload()
重新加载当前的界面
∙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项目的文档还不是特别完善,这可能是限制它广泛使用的一个原因。
回页首
JDICplus中的浏览器组件
JDIC(JavaDesktopIntegrationComponents)项目的背景是当可以不考虑Java代码的平台可移植性的时候,能让Java程序与系统无缝地整合在一起。
它提供给Java代码直接访问本地桌面的功能,其中包含了一系列的Java包以及工具,包含了嵌入本地浏览器组件的功能,启动桌面应用程序,在桌面的系统托盘处添加托盘图标以及注册文件类型关联等等。
JDICplus是在JDIC项目上的另外一个扩展,它是一个Java的win32操作系统的扩展开发工具包,也就是说,它只能在Windows操作系统上使用,所以不具有平台无关性。
它提供了很多类似于WindowsAPI的功能,除了提供了对IE组件的封装之外,还有地图显示组件,以及编辑浏览MSWord、MSPPT、MSExcel、MSOutlook、PDF的组件。
JDICplus的官方网站是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,所以不具有平台无关性。
回页首
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)
{
Stringinput=text.getText().trim();
if(input.length()==0)return;
if(!
input.startsWith("http:
//"))
{
input="http:
//"+input;
text.setText(input);
}
browser.setUrl(input);
}
});
shell.open();
while(!
shell.isDisposed()){
if(!
display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
回页首
结束语
本文介绍了四种在Java图形界面中显示HTML或者特定网页的方法,包括Swing中的JEditorPane组件、Lobo浏览器的实现、JDICplus以及SWT的Browser组件。
对于熟练使用SWT的Java开发者来说,使用SWT中的浏览器组件是一个很好的选择。
如果是对于使用Swing的程序员来说,如果仅仅是显示不太复杂的HTML,JEditorPane就可以胜任了;如果不需要考虑到软件的可移植性,只需要在Windows下运行,那么使用JDICplus的浏览器组件是一个很好的选择;如果需要考虑可移植性,可以考虑使用Lobo浏览器。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 浏览器 实现 方式