zoukankan      html  css  js  c++  java
  • atitit.javascript调用java in swt attilax 总结

    atitit.javascript调用java in swt attilax 总结

     

    1BrowserFunction 简单介绍1

    1.1. BrowserFunction 能够分为三类: 1

    1.2. 事件监听2

    2ati的实现2

    2.1. 页面调用2

    2.1.1. --------nativeswing的实现2

    2.2. java代码2

    3---code4

    4參考5

     

    1. BrowserFunction 简单介绍

    为了让读者更好的理解后面的内容,在正式介绍之前。须要让读者简单了解一下 BrowserFunctionBrowserFunction 是个很有意思的类,它能够为 Browser 永久绑定一个 JavaScript 方法。它的构造函数是 BrowserFunction(browser:Browser, name:String),当中 browser 代表 Browser 对象,而 name 则代表绑定该浏览器的 JavaScript 方法名,定义了该 BrowserFunction 对象以后,不论什么在 Browser 显示的网页,都能够訪问名为 name 的 JavaScript 方法。

    BrowserFunction 仅仅有一个接口 public Object function(Object[] arguments),它接收网页传来的參数,运行 Java 代码返回结果对象。注意:尽管參数和结果都是 Object 类型。可是他们不接收复杂对象,仅仅接受基本数据类型。也就是 Stringint 这种。我预计定义成 Object 的原因是未来将要进行扩展吧。

     

    在 Java 端。绑定了多个的 BrowserFunction。以他们的 name 作为标识。

    Browser 对象显示了一个 HTML 页面。当该页面想与 Java 端进行交互时,就发出了事件对象。该事件对象可能是表单提交,也可能是超链接跳转,也可能是 JavaScript 的方法调用,最后该事件触发了某个 BrowserFunction 运行 Java 代码。整体来说。

     

    作者:: 老哇的爪子 Attilax 艾龙。  EMAIL:1466519819@qq.com

    转载请注明来源: http://blog.csdn.net/attilax

     

    1.1. BrowserFunction 能够分为三类:

    1、直接存储,比方保存到数据库。保存到文件,该类型无详细的反馈,如上图的 BrowserFunction2

    2、2、回调 JavaScript,在调用完 Java 端代码后,须要回调 JavaScript,类似于 Ajax 的效果,能够保持不刷新页面而改变页面的内容,使用的是 Browser 的 exec 方法。3、操作完 Java 代码,须要定义结果对象作为 FreeMarker 的模板根对象,从模板库中选择模板。生成静态 HTML 网页,然后将 Browser 跳转到该网页,作为结果响应,形成类似 HTTP 的请求 -> 响应模型。

     

     

    回页首

    1.2. 事件监听

    本文提到的事件,能够分为三种类型,各自是表单提交、超链接跳转、JavaScript 直接调用 BrowserFunction。当中 JavaScript 调用 BrowserFunction 因为无需刷新页面,能够直接运行,因此无需对其进行特殊监听。然而。Web 上最为常见的表单提交和超链接跳转,都须要刷新页面,而刷新页面时。则无法调用 BrowserFunction。那么怎样对这些事件进行监听成为文章的一大难点。

    Browser 提供了一个事件监听机制,能够为 Browser 加入地址变更监听器,也就是 LocationListener,这个接口有两个方法 

     

    2. ati的实现

     

    2.1. 页面调用

    mycallJava("submitx",$("#title").val(),$("#content").val());

     

    2.1.1. --------nativeswing的实现

     sendNSCommand('play',video);

     

    2.2. java代码

    prjatibrow

     

    public EditorForm() {

     

    String urlgoto = pathx.classPathParent_jensyegeor()

    "/blogger/index.html";

    super.atiBrowserExampleinstance.setUrlgoto(urlgoto);

    super.atiBrowserExampleinstance.gotoUrl();

    regJsCallbackMeth("submitx"new Closure() {

     

    @Override

    public Object execute(Object arg0throws Exception {

    List ps = (List) arg0;

    String p1tit = (String) ps.get(0);

    String p2_txt = (String) ps.get(1);

    System.out.println(p1tit + p2_txt);

     

     

     

    submitx(p1titp2_txt);

    // System.out.println(b);

    return null;

    }

    });

    }

     

     

    ---nativeswing的实现

    #

    webBrowser.addWebBrowserListener(new WebBrowserAdapter() {

     // js java comm

    public void commandReceived(WebBrowserCommandEvent e) {

    String command = e.getCommand();

    System.out.println("  receve commd: " + command);

    Object[] parameters = e.getParameters();

    if ("cmd1".equals(command)) {

    String html = (String) parameters[0];

    System.out.println(html);

    }

     

    3. ---code

    public void regJsCallbackMeth(String string, Closure closure) {

    CallJava.eventMap.put(stringclosure);

    }

     

    package aaBaolilo;

     

    import java.util.ArrayList;

    import java.util.HashMap;

    import java.util.List;

    import java.util.Map;

     

    import org.eclipse.swt.browser.Browser;

    import org.eclipse.swt.browser.BrowserFunction;

     

    import com.attilax.Closure;

     

    public final class CallJava extends BrowserFunction {

        public static Map eventMap=new HashMap();

    public static void main(String[] args) {

    System.out.println("--");

    }

     

            /**

             * Constructor

             * 

             * @param arg0

             * @param arg1

             */

            public CallJava (Browser arg0, String arg1) {

                super(arg0, arg1);

            }

     

            /**

             * {@inheritDoc}

             * 

             * @see org.eclipse.swt.browser.BrowserFunction#function(java.lang.Object[])

             */

            @Override

            public Object function(Object[] arg0) {

               // logger.debug("ImageSelect");

            String meth=arg0[0].toString();

            List li=new ArrayList ();

             for(int i=1;i<arg0.length;i++)

             {

             li.add(arg0[i]);

             }

            

            

            Closure evet=(Closure) eventMap.get(meth);

            try {

    returnevet.execute(li);

    } catch (Exception e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

                return super.function(arg0);

            }

     

        }

     

    4. 參考

    基于 SWT Browser 与 Freemarker 的 Java 桌面开发.htm

     

  • 相关阅读:
    LeetCode:Length of Last Word
    Team Queue(POJ 2259)
    LeetCode:Largest Rectangle in Histogram(update)
    bzoj4821 && luogu3707 SDOI2017相关分析(线段树,数学)
    luogu1438无聊的数列(区间加等差数列,求一个数的和)
    luogu1081 开车旅行2012 D1T3 (倍增,set,O2)
    bzoj4094 && luogu3097 最优挤奶
    luogu3888 GDOI2014拯救莫里斯 (状压dp)
    noip2017D1T3逛公园(拓扑图上dp,记忆化搜索)
    bzoj1065 NOI2008奥运物流 (dp,树上背包,推式子)
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7307179.html
Copyright © 2011-2022 走看看