- 浏览: 479877 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
alvin198761:
renzhengzhi 写道我参与过12306余票查询系统的开 ...
别给12306 辩解了 -
renzhengzhi:
我参与过12306余票查询系统的开发,用户请求被前面3层缓存拦 ...
别给12306 辩解了 -
renzhengzhi:
写的很好。
JAVA线程dump的分析 -
liyonghui160com:
说好的附件呢
分布式服务框架 Zookeeper -- 管理分布式环境中的数据 -
ghpaas:
orbeon作为xforms标准的实现,不论其设计器还是运行时 ...
XForms 1.1 中文翻译—第1章 关于XForms标准
在使用 Java 开发客户端程序时,有时会需要在界面中使用网页浏览器组件,用来显示一段 HTML 或者一个特定的网址。本文将介绍在界面中使用浏览器组件的四种方法,给出示例的代码,并且分析每种方法的优点与不足,便于 Java 开发者在实际开发过程中根据自己的需要来选择。 Swing 是一个用于开发 Java 应用程序图形化用户界面的工具包,它是以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格,而且它是轻量级(light-weight)组件,没有本地代码,不依赖于操作系统的支持,这是它与 AWT 组件的最大的区别。 在 Swing 中,有一个组件是 JEditorPane,它是一个可以编辑任意内容的文本组件。这个类使用了 EditorKit 来实现其操作,对于给予它的各种内容,它能有效地将其类型变换为适当的文本编辑器种类。该编辑器在任意给定时间的内容类型由当前已经安装的 EditorKit 来确定。 默认情况下,JEditorPane 支持以下的内容类型: 纯文本的内容,在此情况下使用的工具包是 DefaultEditorKit 的扩展,可生成有换行的纯文本视图。 HTML 文本,在此情况下使用的工具包是 javax.swing.text.html.HTMLEditorKit,它支持 HTML3.2。 RTF 文本,在此情况下使用的工具包是类 javax.swing.text.rtf.RTFEditorKit,它提供了对多样化文本格式(Rich Text Format)的有限支持。 创建一个新的 JEditorPane 对象 根据包含 URL 规范的字符串创建一个 JEditorPane 创建一个已初始化为给定文件的 JEdiorPane 根据输入指定的 URL 来创建一个 JEditorPane 将视图滚动到给定的参考位置(也就是正在显示的 URL 的 URL.getRef 方法所返回的值) 设置此编辑器所处理的内容类型 设置当前为处理内容而安装的工具包 设置当前要显示的 URL, 参数是一个 String 设置当前要显示的 URL, 参数是一个 java.net.URL 对象 将此 TextComponent 的文本设置为指定内容,预期以此编辑器的内容类型格式提供该内容 要使用 JEditorPane 来显示 HTML,需要完成以下几个步骤: JEditorPane 需要注册一个 HyperlinkListener 对象来处理超链接事件,这个接口定义了一个方法 完整的代码可以在本文中 下载 到。在这个例子中,实现了一个 HyperlinkListener 接口,在方法实现中, 这行代码表示首先判断 HyperlinkListener 的类型,在这里只处理事件类型为 最后通过调用 jep.setPage(event.getURL()) 方法,使得 JEditorPane 显示新的 URL 地址。 由于 JEditorPane 是包含在 J2SE 中的 Swing 中,所以不需要导入第三方的 jar 文件,相对来说比较简单。但是 JEditorPane 类对于网页中的 CSS 的显示处理以及对 JavaScript 脚本执行的支持很弱,而且官方似乎也没有对 JEditorPane 类进行改进的打算,如果想用 JEditorPane 来显示常见的网址,会发现显示出来的页面与 IE,Firefox 有很大的差别,而且不能正常地处理页面逻辑。所以如果仅仅用来显示比较简单的 HTML, 用 JEditorPane 还是一个不错的选择。 Lobo 项目是一个第三方的开源 Java 浏览器项目,它的官方网站是 http://lobobrowser.org/java-browser.jsp。 它是使用 100%Java 代码实现的,而且能完整地支持 HTML4、JavaScript 以及 CSS2,除此之外,它还支持直接的 JavaFX 渲染。 Lobo 本身就已经是一个完整的浏览器软件,同时它还提供了很多与网页浏览器相关的 API,便于 Java 程序员在自己的代码中使用或者进行扩展,其中包括渲染引擎 API、浏览器 API 以及插件系统 API 等等。具体的功能可以在它的官方网站上查看。 Lobo 中实现 Web 浏览器的类叫 FramePanel,它提供了对 HTML 页面显示的封装,并且提供了一些辅助的方法。下面是一些常见方法的介绍: 创建一个单独的 FramePanel 对象,它能被添加到任意的 Swing 窗口或者组件上。 浏览器返回上一个页面 打开一个提示对话框,并且显示消息 浏览器进入下一个界面 打开一个确认对话框,显示特定的消息 在这个组件里面显示特定的网址,参数一个网址的 String 重新加载当前的界面 添加一个内容变化的监听器 添加一个导航(所显示的 URL 变化)的监听器 添加一个获取服务器返回结果的监听器 要想使用 FramePanel,首先需要在它的官方网站上面下载它的安装包,然后在安装目录下,可以看到有 lobo.jar 以及 lobo-pub.jar,将这两个 jar 文件添加到 classpath 中。类似于 JEditorPane, 要使用 FramePanel 有以下的步骤: 首先 Lobo 的 FramePanel 是 100% 纯 Java 的实现,具有良好的可移植性,在 Window/Linux 平台下都能正常地运行。它相比于 Swing 中的 JEditorPane,对于 HTML、CSS 的显示以及对于 JavaScript 的执行都有了比较大的提高。经过实际的使用测试,在访问大多数网页的时候,都能比较正常的显示,与主流的 IE/Firefox 效果类似,不过它对于 CSS 支持还不是很完整,对于某些比较复杂的网页的,显示出入比较大。另外 Lobo 项目的文档还不是特别完善,这可能是限制它广泛使用的一个原因。 JDIC(Java Desktop Integration Components)项目的背景是当可以不考虑 Java 代码的平台可移植性的时候,能让 Java 程序与系统无缝地整合在一起。它提供给 Java 代码直接访问本地桌面的功能,其中包含了一系列的 Java 包以及工具,包含了嵌入本地浏览器组件的功能,启动桌面应用程序,在桌面的系统托盘处添加托盘图标以及注册文件类型关联等等。 JDICplus 是在 JDIC 项目上的另外一个扩展,它是一个 Java 的 win32 操作系统的扩展开发工具包,也就是说,它只能在 Windows 操作系统上使用,所以不具有平台无关性。它提供了很多类似于 Windows API 的功能,除了提供了对 IE 组件的封装之外,还有地图显示组件,以及编辑浏览 MS Word、MS PPT、MS Excel、MS Outlook、PDF 的组件。JDICplus 的官方网站是https://jdic.dev.java.net/documentation/incubator/JDICplus/index.html,这个页面上展示了很多使用了 JDICplus 这个库的 DEMO,这里讨论的主要是对 Windows IE 封装的浏览器组件。 使用 JDICplus,首先需要的是环境的配置。JDICplus 需要的是 JDK6.0 或更高的版本,您需要首先从 www.sun.com 下载最新的版本。否则代码不能正常编译运行。 其次是下载 JDICplus 的类库,然后将它添加到 classpath 中。 JDICplus 中对 IE 封装的组件是 org.jdic.web.BrTabbed,它除了封装了网页的显示,还处理了多个标签页的功能,所以它相对是比较强大的。使用它的步骤如下: BrTabbed 类已经处理了点击超链接的事件,而且还支持多标签,这些不需要手动编写代码来处理。 JDICplus 中的浏览器组件使用了 JNI 来对 IE 进行了封装,所以它显示的效果与 IE 完全相同(还包括其中的右键菜单),而且 BrTabbed 还内置了多标签的功能,使用起来相对比较简单,同样不需要去处理点击超链接的事件。它的缺点首先在于它必须是使用 JDK6.0 或以上版本,要求比较高,同时它底层使用的是 Windows 操作系统相关的 API,所以不具有平台无关性。 SWT(The Standard Widget Kit)是 Java 的一套开源组件库,它提供了一种高效的创建图像化用户界面的能力,也是 Eclipse 平台的 UI 组件之一。它相比于 Swing,速度相对比较快,而且因为使用了与操作系统相同的渲染方式,界面上与操作模式上比较接近操作系统的风格。SWT 的跨平台性是通过不同的底层支持库来解决的。 org.eclipse.swt.browser.Browser 类是 SWT 中用来实现网页浏览器可视化组件的类,它能显示 HTML 文档,并且实现文档之间的超链接。它主要有以下的方法。 当前的会话返回到历史上前一个界面 执行特定的脚本 当前的会话前进到历史上下一个页面 刷新显示当前的界面 显示特定的 HTML 内容 显示特定的网页内容,传入的参数是网页的地址 以下的代码演示了如何使用 SWT 中的 Browser 类: 本文介绍了四种在 Java 图形界面中显示 HTML 或者特定网页的方法,包括 Swing 中的 JEditorPane 组件、Lobo 浏览器的实现、JDICplus 以及 SWT 的 Browser 组件。 对于熟练使用 SWT 的 Java 开发者来说,使用 SWT 中的浏览器组件是一个很好的选择。如果是对于使用 Swing 的程序员来说,如果仅仅是显示不太复杂的 HTML,JEditorPane 就可以胜任了;如果不需要考虑到软件的可移植性,只需要在 Windows 下运行,那么使用 JDICplus 的浏览器组件是一个很好的选择;如果需要考虑可移植性,可以考虑使用 Lobo 浏览器。
JEditorPane()
JEditorPane(String url)
JEditorPane(String type,String text)
JEditorPane(URL initialPage)
scrollToReference(String reference)
setContentType(String type)
setEditorKit(EditorKit kit)
setPage(String url)
setPage(URL page)
setText(String t)
private JEditorPane jep=new JEditorPane();
jep.setContentType("text/html");
jep.setEditable(false);
jep.addHyperlinkListener(this);
hyperlinkUpdate(HyperlinkEvent e)
,示例代码如下:
public void hyperlinkUpdate(HyperlinkEvent event)
{
if(event.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
{
try
{
jep.setPage(event.getURL());
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
}
if(event.getEventType()==HyperlinkEvent.EventType.ACTIVATED)
HyperlinkEvent.EventType.ACTIVATED
的事件(即点击了某个超链接的事件),然后通过调用 HyperlinkEvent 的 getURL() 方法来获取超链接的 URL 地址。
FramePanel()
boolean back()
boolean alert(String message)
boolean forward()
boolean confirm(String message)
void navigate(String url)
void reload()
addContentListener(ContentListener listener)
addNavigationListener(NavigationListener listener)
addResponseListener(ResponseListener listener)
FramePanel browser=new FramePanel();
org.jdic.web.BrComponent.DESIGN_MODE = false;
private BrTabbed browser=new BrTabbed();
boolean back()
boolean execute(String script)
boolean forward()
void refresh()
setText(String html)
setUrl(String url)
SWT 的 Browser 类 demo
package org.dakiler.browsers;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class SWTBrowserTest
{
public static void main(String args[])
{
Display display=new Display();
Shell shell=new Shell(display);
shell.setText("SWT Browser Test");
shell.setSize(800,600);
final Text text=new Text(shell,SWT.BORDER);
text.setBounds(110,5,560,25);
Button button=new Button(shell,SWT.BORDER);
button.setBounds(680,5,100,25);
button.setText("go");
Label label=new Label(shell,SWT.LEFT);
label.setText("输入网址 :");
label.setBounds(5, 5, 100, 25);
final Browser browser=new Browser(shell,SWT.FILL);
browser.setBounds(5,30,780,560);
button.addListener(SWT.Selection, new Listener()
{
public void handleEvent(Event event)
{
String input=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();
}
}
发表评论
-
.NET开源核心运行时,且行且珍惜
2014-12-25 15:39 1860背景 2014年11月12日,ASP.NET之父、微软云 ... -
常用 Java Profiling 工具的分析与比较
2010-08-15 22:04 1182相对于静态代码分析,Profiling 是通过收集程序运行 ... -
监控系统内存
2010-07-01 14:15 1214public CollectorThread(int seco ... -
Debugging the JNI
2010-06-18 14:03 999If you think you have a JNI p ... -
JNI原理2
2010-06-18 13:31 160015.2 调用C程序 JNI规范 ... -
JNI原理1
2010-06-18 13:14 1260在某些Java的忠实支持者眼中,JNI(Java Nati ... -
JNI的crash终于搞定<转>
2010-06-18 13:08 1677今天终于搞定困扰我一周的一个问题了。我们的算法通过jni封装, ... -
java的volatile是什么意思
2010-04-20 15:39 1335我们知道,在Java中设置变量值的操作,除了long和d ... -
Concurrent kickoff
2010-04-19 15:55 1386This example shows you the ... -
IBM JDK和sun jdk区别
2010-04-19 15:52 2581在IBM的虚拟机官方指导文档中明确指出,禁止将虚拟机的最大 ... -
如何在IBM JDK 1.4.2的环境中避免Java堆空间的碎片问题
2010-04-19 15:48 876用户在使用WebSphere Applic ... -
Concurrent mark
2010-04-15 19:39 1017Concurrent mark gives reduced ... -
Java 技术,IBM 风格: 垃圾收集策略,第 1 部分
2010-04-15 16:51 989可以使用 4 种不同的策略配置 IBM Developer ... -
利用 Java dump 进行 JVM 故障诊断
2010-04-06 16:54 1966引言 对于大型 java 应用程序来说,再精细的测试都难 ... -
IBM JVM垃圾回收原理——1
2010-04-06 15:42 1616原文下载:IBM Garbage Collection ... -
Java 理论与实践: 垃圾收集简史
2010-04-06 14:34 821垃圾收集的好处是无 ... -
关注性能: 调优垃圾收集
2010-04-06 14:08 830随着网志作为公共日 ... -
Java 理论与实践: JVM 1.4.1 中的垃圾收集
2010-04-06 10:42 886老对象和年轻对象 ... -
优化 Java 垃圾收集器改进系统性能
2010-04-02 16:05 902From http://www.ibm.com/de ... -
搞懂java中的synchronized关键字
2010-04-01 19:54 812实际上,我关于java的基 ...
相关推荐
【Java网页浏览器组件介绍(全的4种)】 在Java编程中,开发客户端应用程序时,有时需要集成网页浏览器功能,以便展示HTML内容或特定网址。本文将深入探讨四种不同的Java技术,用于在GUI中实现这一目标,同时提供相关...
Java网页浏览器组件介绍(全的4种).txt
本文主要介绍了四种不同的Java网页浏览器组件及其使用方法。这些组件可以帮助开发者在Java应用中集成浏览网页的功能。 首先,我们来看JDK自带的实现——JEditorPane。JEditorPane是Swing组件的一部分,它是一个轻量...
本文主要介绍了四种在Java中实现网页浏览器组件的方法,其中重点关注JDK自带的JEditorPane。JEditorPane是Swing库中的一个组件,它可以显示和编辑多种格式的内容,包括纯文本、HTML和RTF。 **JEditorPane组件详解**...
除了JEditorPane,还有其他三种在Java中实现网页浏览器组件的方法,这些可能包括使用JavaFX的WebView,利用JNI(Java Native Interface)调用本地浏览器引擎,以及通过Java Web Start技术集成浏览器组件。...
在Java开发中,有时我们需要在应用程序的用户界面中嵌入一个网页浏览器组件,以便展示HTML内容或访问特定的网址。本文主要介绍了在Java中实现这一功能的四种方法,重点讲解了JDK自带的JEditorPane组件。 ...
Lobo 是一个开源的 Java 组件库,它提供了一个轻量级的浏览器组件来显示 HTML 内容。相比于 JDK 中的 JEditorPane,Lobo 的 FramePanel 更加强大,支持更多的 HTML 特性,比如 CSS 和 JavaScript,因此能更好地呈现...
5. **安全机制**:考虑到网络安全,Java浏览器需要有安全策略来防止恶意代码。Java内置了沙箱机制,限制了未经许可的系统访问,同时还可以利用SSL/TLS协议确保数据传输的安全性。 6. **缓存机制**:为了提高加载...
【Java网页浏览器开发课程设计】是一项旨在让学生将理论知识与实践结合的重要教学活动。通过这个课程设计,学生将运用已学的Java编程语言,面向对象编程原则,以及网络通信和数据库编程技术,来构建一个基本的网页...
在Java编程领域,开发一款网页浏览器是一项挑战性的任务,它涉及到网络通信、用户界面设计、渲染引擎等多个核心组件。下面将详细阐述这个项目所涵盖的关键知识点。 首先,我们需要理解Java的基础,包括类、对象、...
2. **嵌入式应用** - 开发者可以将Lobo作为嵌入式浏览器组件,集成到Java应用程序中,提供浏览网页的功能。 3. **轻量级解决方案** - 对于资源有限的设备或低性能的系统,Lobo作为一个轻量级的浏览器选项,可能比...
虽然这是一个简单的Java浏览器,但理解这些概念对于开发更安全的浏览器至关重要。 总之,这个Java实现的网页浏览器项目是一个学习Java GUI编程、网络通信、HTML解析和JavaScript交互的好起点。通过研究和改进这个...
本文将为您详细介绍如何使用 JAVA 实现网页浏览器,使用 JDIC(JDesktop Integration Components)组件来嵌入网页浏览器。 标题:利用 JAVA 实现网页浏览器的方法 描述:JAVA 实现网页浏览器 标签:JAVA 实现网页...
以上是构建一个简易Java网页浏览器涉及的主要技术点,每个点都需要深入理解和实践。实际开发中,还可以考虑添加更多高级功能,如页面预加载、多标签页、下载管理等,以增强浏览器的功能和用户体验。
网页浏览器是互联网应用的核心组成部分,它允许用户与各种网页和服务进行交互。...同时,这也是一个不断迭代和改进的过程,随着技术的进步,你可以逐步添加更多高级功能,使你的Java浏览器变得更加完善。
8. **安全性**: 由于涉及网络通信,Java浏览器需要处理安全问题,如SSL/TLS加密,证书验证,以及防止跨站脚本(XSS)和跨站请求伪造(CSRF)攻击。 9. **性能优化**: 由于Java的解释执行特性,性能可能不如原生应用。...
Java实现内置浏览器是一种技术实践,它允许开发者在Java应用程序中集成一个Web浏览器组件,使得用户可以在应用程序内部浏览网页,提供类似桌面应用的体验。这种方式通常使用JavaFX或Swing库来构建用户界面,并通过...
在某些场景下,我们可能需要在Swing应用中嵌入一个浏览器组件,以便展示网页内容或者与Web服务交互。这个压缩包文件“Java-Swing嵌入浏览器(本地浏览器和webkit浏览器-火狐内核)”显然提供了一个实现这一功能的...
在这个免费源码项目中,开发者可能已经实现了用Swing构建一个自定义的浏览器组件,能够嵌套并展示网页。这通常涉及到以下步骤: 1. **创建Swing组件**:首先,创建一个`JFrame`作为主窗口,然后在其中添加一个可以...