atitit.javascript调用java in swt attilax 总结

来源:互联网 发布:在哪里买淘宝小号 编辑:程序博客网 时间:2024/05/21 11:24

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

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 身份证丢失怎么办健康证 个人怎么办武汉健康证 山海关古御壹号怎么办房本? 车玻璃被炮烧了怎么办 奔驰钥匙没电怎么办 婚内买的车离婚怎么办 离心风机噪音大怎么办 匹凸匹被st五牛怎么办 考不进去中学怎么办 教师体检来例假怎么办 老板拖欠农民工工资怎么办 公司破产拖欠员工工资怎么办 白玉蜗牛下蛋了怎么办 黄牛卖不出的票怎么办 鸡受风寒不产蛋怎么办 蛋鸡感冒不下蛋怎么办 牛肉煮老了怎么办 牛肉炖碎了怎么办 比值审敛法等于1怎么办 华为手机停止运行怎么办 易事通卡怎么办延期 三星手机照相机故障怎么办 凌晨一点到机场怎么办 凌晨3点醒来怎么办 凌晨四五点咳嗽怎么办 凌晨4点大便怎么办 熊猫小课付了费怎么办 华为手机系统升级后卡机怎么办 孕妇汗脚脚臭怎么办 巴基斯坦留学生丢失护照怎么办 vivox20耳机进水了怎么办 轴圆齿之间间隙大怎么办 浩辰cad2017保存不了怎么办 会议无poster版块怎么办 大四考研失败了怎么办 博士退学老师不同意怎么办? 贴双眼皮眼皮松怎么办 dpf灯亮了怎么办 60岁社保没交满怎么办 老公素质太差怎么办 耿彦波退休了太原怎么办