`
jxxms
  • 浏览: 106922 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

swt 嵌入其它应用

阅读更多

看完这篇文章,可以开发如下的界面:

没有嵌入Active X控件的视图:

 

嵌入浏览器控件,并显示www.blogjava.net的主页:

 

在Windows系统下,OLE和Active X控件是两个非常吸引人的技术,它们的基础都是COM。OLE的体验,就是平时我们可以把Excel表格嵌入Word文档,或者把PDF嵌入浏览器显示一样,而Active X控件更是无处不在,做VB开发和网页开发的人都应该很熟悉。使用Windows系统中丰富的Active X控件资源,我们可以实现功能非常强大的程序。

在Windows平台下,SWT图形工具包提供了对OLE的支持,Active X控件和OLE文档都可以被很方便地嵌入SWT窗口部件或者JFace部件,在这里,我只讨论将Active X控件插入视图。

在一个视图中包含一个Active X控件需要两个对象的支持,即一个OleFrame和一个OleClientSite对象。如果需要创建一个OLE应用,需要先后创建他们。创建OleFrame对象比较简单,OleFrame类定义在org.eclipse.swt.ole.win32中,创建OleFrame对象只需要简单的new就可以,如下:

1OleFrame frame = new OleFrame(parent, SWT.NONE);
 

在这个构造函数中,第一个参数指的是该OleFrame的母窗口部件,即Active X控件将要被嵌入的窗口部件。

在OleFrame的基础上就可以创建OleClientSite对象,创建该对象需要知道控件的programID,这个ID的信息存放在windows的注册表中。在我们这篇文章的例子中,我们使用的是一个浏览器控件,那么我们怎么知道浏览器控件的ProgID呢?我使用的是Visual Studio 2003自带的OleView工具,如下图:

 

可以看到,Microsoft Web 浏览器的ProgID为Shell.Explorer.2,我们可以这样创建OleClientSite对象:

1OleClientSite client = new OleClientSite(frame,SWT.NONE,"Shell.Explorer.2");
 

创建对象后,还需要激活,才能够在RCP程序中对这些OLE对象进行操作。如下:

client.doVerb(OLE.OLEIVERB_SHOW);
 

然后,我们需要操作这个Active X控件,调用它的方法,或者设置它的属性。比如在此例中,我们需要调用浏览器控件的navigate方法,以便我们的浏览器控件显示www.blogjava.net的主页。对Active X控件的操作通过OleAutomation对象来实现,创建OleAutomation对象的方法如下:

OleAutomation automation = new OleAutomation(client);

再通过automation.invoke()来调用Active X控件的方法,其中invoke方法有几种重载形式,有只带一个int参数的,也有带int和Variant[]两个参数的,其中的int参数表示要调用的Active X控件的方法的ID,Variant[]参数就是要传递给Active X控件的方法的参数。

这里我们要说一说Variant类,这个类提供了多个构造函数,可以方便的将int,float,long,double,string等等基本数据类型封装为Variant,比如我们要传递给浏览器控件的navigate方法的地址参数:

Variant url = new Variant("http://www.blogjava.net");

 那么我们怎么才能得到Active X控件的方法的ID,还有它需要哪些参数呢?还是要借助前面提到的OleView.exe工具,如下图:

 

 

可以看到,Navigate方法的id为0x00000068,转化为十进制就是104,而它需要的参数第一个是一个字符串,其它的都是可选的,因此,我们可以这样调用它的方法:

Variant url = new Variant("http://www.blogjava.net/");
automation.invoke(104, 
new Variant[]{url});


  下面,贴出本文例子中的视图的代码和菜单Action的代码,在写这篇文章之前,我一直在探索怎样从菜单控制视图,后来发现是这样:
window.getActivePage.getViewReferences();
虽然我不知道Eclipse中Page的概念究竟是什么,但是只要能找到我要操作的视图就可以了。视图的代码如下:

OleView.java

 1package cn.blogjava.youxia.views;
 2
 3import org.eclipse.jface.action.IMenuManager;
 4import org.eclipse.jface.action.IToolBarManager;
 5import org.eclipse.swt.SWT;
 6import org.eclipse.swt.widgets.Composite;
 7import org.eclipse.ui.part.ViewPart;
 8import org.eclipse.swt.ole.win32.OleFrame;
 9
10public class OleView extends ViewPart {
11    public OleFrame frame;
12
13    public static final String ID = "cn.blogjava.youxia.views.OleView"; //$NON-NLS-1$
14
15    /** *//**
16     * Create contents of the view part
17     * @param parent
18    */

19    @Override
20    public void createPartControl(Composite parent) {
21        frame = new OleFrame(parent, SWT.NONE);
22        
23        //
24        createActions();
25        initializeToolBar();
26        initializeMenu();
27    }

28
29    /** *//**
30     * Create the actions
31     */

32    private void createActions() {
33        // Create the actions
34    }

35
36    /** *//**
37     * Initialize the toolbar
38     */

39    private void initializeToolBar() {
40        IToolBarManager toolbarManager = getViewSite().getActionBars()
41                .getToolBarManager();
42    }

43
44    /** *//**
45     * Initialize the menu
46     */

47    private void initializeMenu() 
48        IMenuManager menuManager = getViewSite().getActionBars()
49                .getMenuManager();
50    }

51
52    @Override
53    public void setFocus() {
54        // Set the focus
55    }

56
57}

58

 在这个视图中,我创建了OleFrame对象,并让它是public的,至于OleClientSite和OleAutomation对象,我们在点击菜单项后创建。菜单动作的代码如下:

OpenFileAction.java

 1package cn.blogjava.youxia.actions;
 2
 3
 4import org.eclipse.jface.action.IAction;
 5import org.eclipse.jface.viewers.ISelection;
 6import org.eclipse.swt.SWT;
 7import org.eclipse.swt.ole.win32.OLE;
 8import org.eclipse.swt.ole.win32.OleClientSite;
 9import org.eclipse.ui.IWorkbenchWindow;
10import org.eclipse.ui.IWorkbenchWindowActionDelegate;
11import org.eclipse.ui.*;
12import cn.blogjava.youxia.views.*;
13import org.eclipse.swt.ole.win32.OleAutomation;
14import org.eclipse.swt.ole.win32.Variant;
15
16public class OpenFileAction implements IWorkbenchWindowActionDelegate {
17
18    IWorkbenchWindow window;
19    
20    public void dispose() {
21        // TODO 自动生成方法存根
22
23    }

24
25    public void init(IWorkbenchWindow window) {
26        // TODO 自动生成方法存根
27        this.window = window;
28
29   }

30
31    public void run(IAction action) {
32        // TODO 自动生成方法存根
33        
34        IViewReference[] vfs = window.getActivePage().getViewReferences();
35        IViewPart vw;
36        for(int i=0; i<vfs.length; i++){
37             vw = vfs[i].getView(false);
38             if(vw.getTitle().equals("使用Active X控件")){
39                    OleClientSite client = new OleClientSite(((OleView)vw).frame,SWT.NONE,"Shell.Explorer.2");
40                    client.doVerb(OLE.OLEIVERB_SHOW);
41                    OleAutomation oa = new OleAutomation(client);
42                    Variant str = new Variant("http://www.blogjava.net/");
43                    oa.invoke(104, new Variant[]{str});
44        
45             }

46        }

47        
48    }

49
50    public void selectionChanged(IAction action, ISelection selection) {
51        // TODO 自动生成方法存根
52
53    }

54
55}

56
分享到:
评论

相关推荐

    SWT 中嵌入Word 控件应用

    在IT行业中,有时候我们需要在Java应用中集成第三方控件或者组件来实现特定的功能,比如在SWT(Standard Widget Toolkit)环境中嵌入Word编辑器。这篇博客"SWT中嵌入Word控件应用"可能就是讲述如何在Java SWT界面中...

    swt调用ocx应用实例(wps和windows本机播放器)

    WPS是一款兼容Microsoft Office的办公软件,其OCX控件可以被嵌入到其他应用程序中,用于显示和编辑Word文档。这个示例中,开发者通过SWT与OCX的交互,实现了在Java程序中打开和操作DOC文件的能力,这对于需要在无须...

    swt-4.3-win64.rar,swt-4.3-win32-x86.jar

    这使得开发者能够在Eclipse RCP(Rich Client Platform)或其他基于SWT的应用程序中嵌入HTML和Web内容。通过这种方式,开发者可以构建混合型的应用程序,既包含Java GUI的传统优势,也能够展示动态、交互式的Web内容...

    swt-4.3-64

    这使得SWT构建的应用程序在外观和交互上与系统上的其他应用更为一致,提供了更好的性能和更丰富的功能。在Windows平台上,SWT支持常见的控件,如按钮、文本框、列表、树形视图等,并且能够利用Windows API来实现更多...

    Java-Swing嵌入浏览器(本地浏览器和webkit浏览器-火狐内核)

    通过SWT,我们可以方便地在Java应用中集成其他原生组件,比如在这个案例中的Web浏览器控件。 在本示例中,开发者可能使用了DJnative-SWT提供的API来创建一个Swing组件,该组件能够内嵌WebKit浏览器引擎。这通常涉及...

    swt源码和jar包dj-native-swing-swt.jar

    在标题提到的"swt源码和jar包dj-native-swing-swt.jar"中,"dj-native-swing-swt.jar"是一个特殊的库,它结合了SWT和JNativeSwing,允许在Java Swing应用中嵌入SWT组件。这使得开发者可以在同一应用程序中同时使用...

    chromium.swt:SWT的Chromium小部件

    使用与其他SWT浏览器相同的API,可以轻松地将其嵌入Eclipse视图中。 不再为每个平台定制代码,不再为Linux安装特定的库,在Windows中使用IE不再出现问题,也不再存在与平台有关和与浏览器有关的问题。 这是一个真正...

    第6章 SWT概述

    6. **org.eclipse.swt.ole.win32**: 为Windows平台提供了OLE(Object Linking and Embedding)支持,允许在SWT程序中嵌入其他应用程序,如IE浏览器或Office组件。 除了上述核心包,SWT还提供了其他的辅助包,如org....

    SWT java浏览器

    SWT提供了一个名为`Browser`的类,该类可以用来在Java应用程序中嵌入一个浏览器控件。这个控件能够解析和显示HTML内容,支持JavaScript执行,以及执行常见的浏览器操作,如前进、后退、保存和查看历史。 3. 功能...

    swt-4.4.2-win32-win32-x86_64.zip

    5. 利用SWT内嵌Mozilla浏览器:SWT提供了一个名为`Browser`的类,可以用来在Java应用中嵌入Web浏览器。这种功能允许开发者在自己的应用程序中展示网页内容,或者实现基于Web技术的组件,如HTML编辑器。 总的来说,...

    基于SWT组件的IE内核Java简易浏览器

    通过这个控件,我们可以嵌入到Java应用程序中,实现浏览网页的功能。 **创建简易浏览器的基本步骤** 1. **导入依赖**:首先,我们需要在项目中引入SWT库,这可以通过Maven或Gradle等构建工具完成,或者手动添加jar...

    嵌入浏览器需要.rar

    "Swt嵌入浏览器"这一主题涉及到如何使用SWT库在Java应用中嵌入一个功能完整的浏览器引擎。 SWT是Eclipse基金会开发的一个开源GUI库,它允许Java开发者创建与本机系统更加紧密集成的图形用户界面。与传统的Java ...

    SWT(DJNativeSwing)

    DJ NativeSwing是SWT的一个扩展,它允许开发者在Java应用程序中无缝地嵌入Swing组件,包括一个内嵌浏览器功能。 在Java编程中,SWT和Swing分别是两种主要的GUI库。SWT提供了与操作系统更直接的交互,而Swing则依赖...

    DJNativeSwing-SWT组件-Java GUI中内嵌浏览器相关JAR包

    DJNativeSwing是一个Java库,它允许开发者在Java GUI(图形用户界面)应用程序中嵌入原生操作系统控件,如Windows、Mac OS X或Linux上的本机浏览器组件。这个库的目标是提供一种方式,使得Java应用程序能够利用操作...

    图形界面开发--AWT,Swing,SWT

    Jigloo是另一个用于开发SWT/Swing应用的插件,它提供了一套工具和API,帮助开发者创建高性能的图形界面。 **18.4.2 搭建SWT开发环境** SWT的开发环境需要特殊的设置,包括安装必要的库文件和配置IDE(如Eclipse)...

    swt动态图表相关jar包

    在SWT环境下,JFreeChart提供了与SWT组件集成的接口,使得在SWT应用中嵌入动态图表变得简单。 在提供的压缩包文件中,我们看到了以下组件: 1. **jcommon-1.0.23.jar**:这是JFreeChart的一个依赖库,提供了基础的...

    DJNativeSwing的jar包以及32和64的SWT

    它主要提供了JWebBrowser类,该类允许开发者在Java应用程序中嵌入一个真正的Web浏览器引擎。这不同于Java的早期解决方案,如JEditorPane或HTMLEditorKit,它们通常只能处理简单的HTML内容,而无法处理JavaScript、...

    swt程序发布,jar转exe

    SWT是Java平台上的一个GUI库,它提供了与本机操作系统更紧密集成的用户界面,使得Java应用程序可以拥有与原生应用相似的外观和感觉。在开发完成后,为了方便非Java环境下的用户运行,开发者通常会将Java的JAR(Java ...

    DJNativeSwing-SWT有关的所有jar,java将HTML页面转为图片

    SWT不同于Java Swing,Swing是一个完全由Java实现的GUI库,而SWT利用了本地操作系统的服务,因此在某些情况下,SWT的应用可能比Swing更加流畅和响应迅速。 接下来,关于将HTML页面转换为图片,这是通过解析HTML并...

    java 用swt调用com组建之ie组建加强版

    SWT内建了对ActiveX控件的支持,这使得我们能够直接在Java应用程序中嵌入IE浏览器,或者调用其他基于COM的ActiveX组件。 在"java 用swt调用com组建之ie组建加强版"这个主题中,我们可以预想博主可能探讨了以下内容...

Global site tag (gtag.js) - Google Analytics