`
ljl_xyf
  • 浏览: 636640 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SWT可交互式Browser控件

 
阅读更多

在许多平台中,Browser控件皆被作为一个必需的控件给出,并提供了DOM接口,用于访问Browser的内容,相对来说SWT中的Browser控 件就比较薄弱,没有提供DOM的可控制接口,那么,如何和控件所加载的页面进行交互呢?比如需要在集成web应用的环境中实现模拟登陆、自动填表等功能。

SWT中对Browser有不同的实现,目前实现的有IE和Mozilla。在Browser的构造函数中根据不同的平台和不同的style设置类决定使用哪个类的实现。

org.eclipse.swt.browser.Mozilla org.eclipse.swt.browser.IE 是已经实现的,而其他的 org.eclipse.swt.browser.Safari org.eclipse.swt.browser.Voyager

则没有实现。

 

 

    public Browser (Composite parent, int style) {  
      
        super (checkParent (parent), checkStyle (style));  
      
        String platform = SWT.getPlatform ();  
      
        Display display = parent.getDisplay ();  
      
        if ("gtk".equals (platform)) display.setData (NO_INPUT_METHOD, null); //$NON-NLS-1$  
      
        String className = null;  
      
        if ((style & SWT.MOZILLA) != 0) {  
      
            className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$  
      
        } else {  
      
            if ("win32".equals (platform) || "wpf".equals (platform)) { //$NON-NLS-1$ $NON-NLS-2$  
      
                className = "org.eclipse.swt.browser.IE"; //$NON-NLS-1$  
      
            } else if ("motif".equals (platform)) { //$NON-NLS-1$  
      
                className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$  
      
            } else if ("gtk".equals (platform)) { //$NON-NLS-1$  
      
                className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$  
      
            } else if ("carbon".equals (platform)) { //$NON-NLS-1$  
      
                className = "org.eclipse.swt.browser.Safari"; //$NON-NLS-1$  
      
            } else if ("photon".equals (platform)) { //$NON-NLS-1$  
      
                className = "org.eclipse.swt.browser.Voyager"; //$NON-NLS-1$  
      
            } else {  
      
                dispose ();  
      
                SWT.error (SWT.ERROR_NO_HANDLES);  
      
            }  
      
        }  
      
      
      
        try {  
      
            Class clazz = Class.forName (className);  
      
            webBrowser = (WebBrowser)clazz.newInstance ();  
      
        } catch (ClassNotFoundException e) {  
      
        } catch (IllegalAccessException e) {  
      
        } catch (InstantiationException e) {  
      
        }  
      
        if (webBrowser == null) {  
      
            dispose ();  
      
            SWT.error (SWT.ERROR_NO_HANDLES);  
      
        }  
      
      
      
        webBrowser.setBrowser (this);  
      
        webBrowser.create (parent, style);  
      
    }  
 

其中对IE的实现主要是采用调用IE的Activex控件,直接加载IE,对Mozilla由于代码过多,本人没有具体研究,其本身开源,有兴趣可以参看。

那么回归主题,如何实现与Browser控件的交互呢? 其实仔细看Browser控件的API,可以发现一个execute()方法,这个方法适用于在web文档加载完毕时可以运行javascript code的。这样的话,交互就变得简单了,因为javascript是提供dom的支持的,既然可以调用javascript,那么就可以调用web页面 中的每个节点了。控制的问题解决了,可是另外的问题来了。 如何从javascript的code里边返回数据呢? 比如我需要将一个<input type=text id=textid />的值返回到java code中。其实采用的方法是很投机的,因为execute()方法返回的结果是true or false,那么对它做文章是没有用的,我们看其他的api,可以发现:addStatusTextListener()方法。  这个方法可以监听web页面对于statusbar文本改变的值,并反映在java code里面,那么我们只要通过javascript把返回的值写到window.status,那么就可以在javacode里取到了。 具体代码请参考下面,对于Browser的继承重写,通过getValue可以取得指定id的html 控件的值,通过setValue可以设置值。

    import org.eclipse.swt.browser.Browser;  
    import org.eclipse.swt.browser.StatusTextEvent;  
    import org.eclipse.swt.browser.StatusTextListener;  
    import org.eclipse.swt.widgets.Composite;  
      
    public class CoolBrowser extends Browser implements StatusTextListener {  
        private final String DATA = "Browser_Data";  
        public CoolBrowser(Composite parent, int style) {  
            super(parent, style);  
            addStatusTextListener(this);  
        }  
      
      
      
        @Override  
        protected void checkSubclass() {  
      
        }  
      
      
      
        /** 
         * Get the value of one input control in the web 
         * @param id 
         * @return 
         */  
      
        public String getValue(String id) {  
      
            if (execute("var obj = document.getElementById('" + id + "');"  
      
                    + "if( obj != null ) window.status=obj.value;")) {  
      
                return (String) getData(DATA);  
      
            }  
      
            return null;  
      
        }  
      
          
      
        /** 
         * Set the value of the input control 
         * @param id 
         * @param value 
         */  
      
        public void setValue( String id, Object value ){  
      
            if (execute("var obj = document.getElementById('" + id + "');"  
      
                    + "if( obj != null ) obj.value='" + value + "';")) {  
            }  
      
        }  
      
      
      
        @Override  
      
        public void changed(StatusTextEvent event) {  
      
            setData(DATA, event.text);  
      
        }  
      
    }  
 
分享到:
评论

相关推荐

    SWT/JFace 自定义日历控件(可绑定注册到其他控件)

    SWT自带的DateTime控件属实不好用,而且无法绑定到其他控件上。因此自己写一个日历控件用着方便,功能大致如下: 1、日历控件可自定义设置常见的几种日期格式; 2、可以绑定注册到其他控件如:文本框、按钮、标签上...

    java文集

    映射标记 Java的“静态库链接” 姚博文 集成ACEGI 进行权限控制 SWT可交互式Browser控件 JDK配置(注意) RIA简介(第一部分) 在 Eclipse 中嵌入 NASA World Wind Java SDK, 用3DES加密解密 ...

    java swt自定义控件

    SWT是Eclipse IDE的基础,它通过与操作系统直接交互来提供本地化的图形用户界面,使得应用程序具有更高的性能和更好的外观。本文将深入探讨在Java中使用SWT进行自定义控件的开发。 ### 1. SWT概述 SWT是一个开源的...

    SWT日期时间选择控件.rar

    这个控件允许用户方便地选取特定的日期和时间,提高了用户界面的交互性和用户体验。 在SWT中,虽然有基础的日期和时间输入组件,但它们的功能相对有限,不便于用户直观地进行日期和时间的选择。因此,开发人员常常...

    一个SWT日期时间选择控件类

    在给定的资源中,“SWT日期时间选择控件类”是一个专门为SWT环境设计的控件,使得开发者能够轻松地在Java应用中集成日期和时间选择功能,并且支持拖放操作,提高了用户体验。 这个控件类可能是基于SWT的`Combo`或`...

    SWT Browser(内嵌浏览器)所需SWTResourceManager Jar包

    SWT Browser(内嵌浏览器)所需SWTResourceManager Jar包

    SWT 中嵌入Word 控件应用

    嵌入Word控件通常涉及到ActiveX技术,这是微软提供的一种组件对象模型,允许开发人员在Windows平台上创建和使用交互式的、动态链接的软件组件。在Java中,通过JACOB(Java COM Bridge)或者其他类似的库,可以实现对...

    SWT基础代码涵盖其所有控件

    OCE(Open Component Environment)可能是指开放组件环境,它可能与Eclipse插件系统有关,允许开发者将SWT控件和其他组件集成到一个可扩展的环境中。然而,"oce"标签在SWT上下文中并不常见,可能需要进一步的信息来...

    SWT/JFace 控件实例

    SWT是底层的GUI库,提供了与操作系统直接交互的组件,而JFace则建立在SWT之上,提供了一层抽象,简化了GUI的开发过程。 ### SWT基础知识 SWT是一个开源的Java库,它允许开发者使用原生操作系统提供的控件来创建GUI...

    Draw2D 模拟SWT控件之RadioButton、CheckedBox

    本文将深入探讨如何使用Draw2D模拟SWT中的RadioButton和CheckedBox控件,以及这些控件在实际应用中的作用和实现方式。 首先,RadioButton和CheckedBox是GUI中的两种常见选择控件。RadioButton通常用于提供一组互斥...

    SWT 自定义控件

    2. **设计属性**:为控件提供可配置的属性,如行高、颜色列表等。 ```java public void setColorList(Vector&lt;Color&gt; colors) { this.colors = colors; // 更新显示 } public Vector&lt;Color&gt; getColorList() { ...

    SWT Table单元格编辑功能

    ### SWT Table单元格编辑功能详解 在Java图形用户界面(GUI)开发中,SWT...通过以上步骤,我们可以在SWT `Table`控件中实现单元格的编辑功能,使用户能够直接在界面上修改数据,提高了应用的交互性和实用性。

    SWT 时间控件及执行bat文件

    在“SWT 时间控件及执行bat文件”这个例子中,我们将探讨如何使用SWT来创建时间选择控件,以及如何利用Java的TimerTask类进行定时任务,同时还会学习如何通过批处理(bat)文件运行Java应用程序。 1. SWT时间控件:...

    SWT中bean与控件的数据绑定

    在SWT中,数据绑定是一种将业务对象(通常称为bean)的属性与UI控件的值进行关联的技术,使得UI的变化能够实时反映到数据模型中,反之亦然。这种双向绑定机制极大地简化了UI与数据模型之间的交互,提高了代码的...

    SWT控件

    **SWT控件详解** SWT(Standard Widget Toolkit)是由Eclipse基金会开发并维护的一套用于构建图形用户界面(GUI)的开源库,它是Java语言中的一个GUI工具包,主要面向那些希望创建高性能、原生外观的应用程序的...

    Java使用SWT JFreeChart控件实现的小游戏.zip

    Java使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的...

    SWT日期控件

    在SWT中,虽然内建了一些基本的控件,但并没有内置日期选择器(date picker)组件。因此,为了在SWT应用中实现日期选择功能,通常会采用第三方库或插件来扩展这一功能,如"SWT 第三方 date picker RCP"。 这个描述...

    org.eclipse.swt相关所有jar包,

    在JAVA调用IE内核制作浏览器的过程中,SWT使用了一个名为`Browser`的类,这个类允许开发者创建一个内嵌的Web浏览器控件。它支持HTML、CSS、JavaScript等Web标准,并且可以执行复杂的Web应用程序。这种功能对于那些...

    SWT 使用 OLE 函数调用com控件的资料

    SWT 使用 OLE 函数调用com控件的资料 SWT 使用 OLE 函数调用com控件的资料SWT 使用 OLE 函数调用com控件的资料SWT 使用 OLE 函数调用com控件的资料 SWT 使用 OLE 函数调用com控件的资料

Global site tag (gtag.js) - Google Analytics